57354 lines
1.4 MiB
Plaintext
57354 lines
1.4 MiB
Plaintext
### FUNC _FINI_0 @ 00026594
|
|
|
|
void _FINI_0(void)
|
|
|
|
{
|
|
__cxa_finalize(&DAT_0006b000);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _INIT_0 @ 000265a4
|
|
|
|
void _INIT_0(void)
|
|
|
|
{
|
|
CFunctions::CFunctions((CFunctions *)theFunc);
|
|
__cxa_atexit(CFunctions::~CFunctions,theFunc,&DAT_0006b000);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _INIT_1 @ 000265d4
|
|
|
|
void _INIT_1(void)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = pthread_key_create(&DAT_00070a18,(__destr_function *)0x30b41);
|
|
if (iVar1 == 0) {
|
|
DAT_00070a1c = 0xc;
|
|
DAT_00070a20 = 0x155;
|
|
DAT_00070a24 = 0xffc;
|
|
pthread_mutex_init((pthread_mutex_t *)&DAT_00070a28,(pthread_mutexattr_t *)0x0);
|
|
DAT_00070a2c = 0;
|
|
DAT_00070a30 = 0;
|
|
__cxa_atexit(0x30611,&DAT_00070a14,&DAT_0006b000);
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030e78("Can\'t allocate C++ runtime pthread_key_t");
|
|
}
|
|
|
|
|
|
|
|
### FUNC _INIT_2 @ 0002666c
|
|
|
|
void _INIT_2(void)
|
|
|
|
{
|
|
std::ios_base::Init::Init((Init *)&DAT_00070d78);
|
|
__cxa_atexit(std::ios_base::Init::~Init,&DAT_00070d78,&DAT_0006b000);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _INIT_3 @ 00026698
|
|
|
|
void _INIT_3(void)
|
|
|
|
{
|
|
pthread_mutex_init((pthread_mutex_t *)&DAT_00070de0,(pthread_mutexattr_t *)0x0);
|
|
__cxa_atexit(0x4cde5,&DAT_00070de0,&DAT_0006b000);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC CAccumulator @ 000266f0
|
|
|
|
/* CAccumulator::CAccumulator() */
|
|
|
|
CAccumulator * __thiscall CAccumulator::CAccumulator(CAccumulator *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__CAccumulator_00068c28;
|
|
__aeabi_memclr4(this + 4,0x1c);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~CAccumulator @ 00026710
|
|
|
|
/* CAccumulator::~CAccumulator() */
|
|
|
|
CAccumulator * __thiscall CAccumulator::~CAccumulator(CAccumulator *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__CAccumulator_00068c28;
|
|
if (*(void **)(this + 4) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 4));
|
|
*(undefined4 *)(this + 4) = 0;
|
|
}
|
|
*(undefined4 *)(this + 8) = 0;
|
|
if (*(void **)(this + 0xc) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0xc));
|
|
*(undefined4 *)(this + 0xc) = 0;
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~CAccumulator @ 00026748
|
|
|
|
/* CAccumulator::~CAccumulator() */
|
|
|
|
void __thiscall CAccumulator::~CAccumulator(CAccumulator *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)~CAccumulator(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Reset @ 00026756
|
|
|
|
/* CAccumulator::Reset(unsigned int, unsigned int, unsigned int) */
|
|
|
|
undefined4 __thiscall CAccumulator::Reset(CAccumulator *this,uint param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
void *pvVar1;
|
|
uint uVar2;
|
|
undefined4 uVar3;
|
|
undefined8 uVar4;
|
|
|
|
uVar3 = 0;
|
|
*(undefined4 *)(this + 0x1c) = 0;
|
|
if (*(void **)(this + 4) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 4));
|
|
*(undefined4 *)(this + 4) = 0;
|
|
}
|
|
*(undefined4 *)(this + 8) = 0;
|
|
if (*(void **)(this + 0xc) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0xc));
|
|
*(undefined4 *)(this + 0xc) = 0;
|
|
}
|
|
if (((param_1 != 0) && (param_2 < 0x41)) && ((param_2 - 1 & param_2) == 0)) {
|
|
*(undefined4 *)(this + 0x10) = 0;
|
|
*(uint *)(this + 0x14) = param_1;
|
|
*(uint *)(this + 0x18) = param_2;
|
|
uVar4 = __muldi3((param_3 + 3 >> 2) + (param_1 >> 1 & 0x3fffffff),0,4,0);
|
|
uVar2 = 0xffffffff;
|
|
if ((int)((ulonglong)uVar4 >> 0x20) == 0) {
|
|
uVar2 = (uint)uVar4;
|
|
}
|
|
pvVar1 = operator_new__(uVar2);
|
|
*(void **)(this + 4) = pvVar1;
|
|
*(uint *)(this + 8) = (int)pvVar1 + (param_3 & 0xfffffffe);
|
|
if (2 < param_2) {
|
|
uVar4 = __muldi3(param_1,0,4,(int)param_1 >> 0x1f);
|
|
uVar2 = 0xffffffff;
|
|
if ((int)((ulonglong)uVar4 >> 0x20) == 0) {
|
|
uVar2 = (uint)uVar4;
|
|
}
|
|
pvVar1 = operator_new__(uVar2);
|
|
*(void **)(this + 0xc) = pvVar1;
|
|
}
|
|
uVar3 = 1;
|
|
*(undefined4 *)(this + 0x1c) = 1;
|
|
}
|
|
return uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC PushFrame @ 0002680e
|
|
|
|
/* CAccumulator::PushFrame(unsigned short const*) */
|
|
|
|
bool __thiscall CAccumulator::PushFrame(CAccumulator *this,ushort *param_1)
|
|
|
|
{
|
|
ushort uVar1;
|
|
uint *puVar2;
|
|
undefined2 *puVar3;
|
|
ushort *puVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
|
|
if (*(int *)(this + 0x1c) == 0) {
|
|
return false;
|
|
}
|
|
iVar7 = *(int *)(this + 0x10);
|
|
*(int *)(this + 0x10) = iVar7 + 1;
|
|
iVar5 = *(int *)(this + 0x18);
|
|
if (iVar5 == 2) {
|
|
if (iVar7 != 0) {
|
|
if (*(uint *)(this + 0x14) >> 2 != 0) {
|
|
iVar5 = -(*(uint *)(this + 0x14) >> 2);
|
|
puVar4 = *(ushort **)(this + 8);
|
|
do {
|
|
*puVar4 = (ushort)((uint)*param_1 + (uint)*puVar4 >> 1);
|
|
puVar4[1] = (ushort)((uint)param_1[1] + (uint)puVar4[1] >> 1);
|
|
puVar4[2] = (ushort)((uint)param_1[2] + (uint)puVar4[2] >> 1);
|
|
puVar4[3] = (ushort)((uint)param_1[3] + (uint)puVar4[3] >> 1);
|
|
param_1 = param_1 + 4;
|
|
puVar4 = puVar4 + 4;
|
|
iVar5 = iVar5 + 1;
|
|
} while (iVar5 != 0);
|
|
}
|
|
goto LAB_000268a0;
|
|
}
|
|
}
|
|
else if (iVar5 != 1) {
|
|
puVar2 = *(uint **)(this + 0xc);
|
|
if (iVar7 == 0) {
|
|
if (*(uint *)(this + 0x14) >> 2 != 0) {
|
|
iVar5 = -(*(uint *)(this + 0x14) >> 2);
|
|
do {
|
|
*puVar2 = (uint)*param_1;
|
|
puVar2[1] = (uint)param_1[1];
|
|
puVar2[2] = (uint)param_1[2];
|
|
puVar2[3] = (uint)param_1[3];
|
|
puVar2 = puVar2 + 4;
|
|
param_1 = param_1 + 4;
|
|
iVar5 = iVar5 + 1;
|
|
} while (iVar5 != 0);
|
|
}
|
|
goto LAB_000268a0;
|
|
}
|
|
if (iVar7 + 1 != iVar5) {
|
|
if (*(uint *)(this + 0x14) >> 2 != 0) {
|
|
iVar5 = -(*(uint *)(this + 0x14) >> 2);
|
|
do {
|
|
*puVar2 = *puVar2 + (uint)*param_1;
|
|
puVar2[1] = puVar2[1] + (uint)param_1[1];
|
|
puVar2[2] = puVar2[2] + (uint)param_1[2];
|
|
puVar2[3] = puVar2[3] + (uint)param_1[3];
|
|
puVar2 = puVar2 + 4;
|
|
param_1 = param_1 + 4;
|
|
iVar5 = iVar5 + 1;
|
|
} while (iVar5 != 0);
|
|
}
|
|
goto LAB_000268a0;
|
|
}
|
|
puVar3 = *(undefined2 **)(this + 8);
|
|
iVar5 = 2;
|
|
if (iVar7 < 0xf) {
|
|
if (iVar7 != 3) {
|
|
if (iVar7 == 7) {
|
|
iVar5 = 3;
|
|
}
|
|
else {
|
|
LAB_0002691e:
|
|
iVar5 = 0;
|
|
}
|
|
}
|
|
}
|
|
else if (iVar7 == 0xf) {
|
|
iVar5 = 4;
|
|
}
|
|
else if (iVar7 == 0x1f) {
|
|
iVar5 = 5;
|
|
}
|
|
else {
|
|
if (iVar7 != 0x3f) goto LAB_0002691e;
|
|
iVar5 = 6;
|
|
}
|
|
for (iVar7 = *(int *)(this + 0x14); iVar7 != 0; iVar7 = iVar7 + -1) {
|
|
uVar1 = *param_1;
|
|
uVar6 = *puVar2;
|
|
*puVar3 = (short)(uVar6 + uVar1 >> iVar5);
|
|
*puVar2 = uVar6 + uVar1;
|
|
puVar2 = puVar2 + 1;
|
|
puVar3 = puVar3 + 1;
|
|
param_1 = param_1 + 1;
|
|
}
|
|
goto LAB_000268a0;
|
|
}
|
|
__aeabi_memcpy(*(undefined4 *)(this + 8),param_1,*(int *)(this + 0x14) << 1);
|
|
LAB_000268a0:
|
|
iVar5 = *(int *)(this + 0x10);
|
|
if (iVar5 == *(int *)(this + 0x18)) {
|
|
*(undefined4 *)(this + 0x10) = 0;
|
|
}
|
|
return iVar5 == *(int *)(this + 0x18);
|
|
}
|
|
|
|
|
|
|
|
### FUNC Restart @ 0002693e
|
|
|
|
/* CAccumulator::Restart() */
|
|
|
|
void __thiscall CAccumulator::Restart(CAccumulator *this)
|
|
|
|
{
|
|
if (*(int *)(this + 0x1c) != 0) {
|
|
*(undefined4 *)(this + 0x10) = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetTickCount @ 0002694c
|
|
|
|
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
|
|
/* GetTickCount() */
|
|
|
|
void GetTickCount(void)
|
|
|
|
{
|
|
int iVar1;
|
|
timespec local_1c;
|
|
int local_14;
|
|
|
|
local_14 = __stack_chk_guard;
|
|
clock_gettime(1,&local_1c);
|
|
iVar1 = __divsi3(local_1c.tv_nsec,1000000);
|
|
if (__stack_chk_guard == local_14) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail(iVar1 + local_1c.tv_sec * 1000);
|
|
}
|
|
|
|
|
|
|
|
### FUNC Sleep @ 00026998
|
|
|
|
/* Sleep(int) */
|
|
|
|
void Sleep(int param_1)
|
|
|
|
{
|
|
usleep(param_1 * 1000);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetLocalTime @ 000269a8
|
|
|
|
/* GetLocalTime(_SYSTEMTIME*) */
|
|
|
|
void GetLocalTime(_SYSTEMTIME *param_1)
|
|
|
|
{
|
|
tm *ptVar1;
|
|
int iVar2;
|
|
time_t tStack_18;
|
|
int local_14;
|
|
|
|
local_14 = __stack_chk_guard;
|
|
time(&tStack_18);
|
|
ptVar1 = localtime(&tStack_18);
|
|
*(short *)param_1 = (short)ptVar1->tm_year + 0x76c;
|
|
*(short *)(param_1 + 2) = (short)ptVar1->tm_mon + 1;
|
|
*(short *)(param_1 + 4) = (short)ptVar1->tm_wday;
|
|
*(short *)(param_1 + 6) = (short)ptVar1->tm_mday;
|
|
*(short *)(param_1 + 8) = (short)ptVar1->tm_hour;
|
|
*(short *)(param_1 + 10) = (short)ptVar1->tm_min;
|
|
iVar2 = ptVar1->tm_sec;
|
|
*(undefined2 *)(param_1 + 0xe) = 400;
|
|
*(short *)(param_1 + 0xc) = (short)iVar2;
|
|
if (__stack_chk_guard == local_14) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC CFunctions @ 00026a14
|
|
|
|
/* CFunctions::CFunctions() */
|
|
|
|
CFunctions * __thiscall CFunctions::CFunctions(CFunctions *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__CFunctions_00068c40;
|
|
MutexLock::MutexLock((MutexLock *)(this + 0xb0));
|
|
CAccumulator::CAccumulator((CAccumulator *)(this + 0x3784));
|
|
CAccumulator::CAccumulator((CAccumulator *)(this + 0x37a4));
|
|
CSmoother::CSmoother((CSmoother *)(this + 0x37c4));
|
|
__aeabi_memclr4(this + 4,0xac);
|
|
__aeabi_memclr4(this + 0xb4,0x18);
|
|
__aeabi_memclr4(this + 0x2d1c,0xa68);
|
|
__aeabi_memclr4(this + 0x37ec,0x1910);
|
|
*(undefined4 *)(this + 0x5100) = 0xffff3cb0;
|
|
*(undefined4 *)(this + 0x50fc) = 8;
|
|
*(undefined4 *)(this + 0x5104) = 3;
|
|
SetColorPalette(this,0);
|
|
gLogFile = fopen("/sdcard/magnity/Cx/log/sdklog.txt","a+");
|
|
if (gLogFile != (FILE *)0x0) {
|
|
mag::Logging::Setfp((__sFILE *)gLogFile);
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC MutexLock @ 00026b38
|
|
|
|
/* MutexLock::MutexLock() */
|
|
|
|
MutexLock * __thiscall MutexLock::MutexLock(MutexLock *this)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
pthread_mutexattr_t pStack_18;
|
|
int local_14;
|
|
|
|
local_14 = __stack_chk_guard;
|
|
iVar1 = pthread_mutexattr_init(&pStack_18);
|
|
if (iVar1 == 0) {
|
|
iVar1 = pthread_mutexattr_settype(&pStack_18,1);
|
|
if (iVar1 == 0) {
|
|
iVar1 = pthread_mutex_init((pthread_mutex_t *)this,&pStack_18);
|
|
if (iVar1 == 0) {
|
|
iVar1 = pthread_mutexattr_destroy(&pStack_18);
|
|
if (iVar1 == 0) {
|
|
if (__stack_chk_guard == local_14) {
|
|
return this;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
puVar2 = (undefined4 *)FUN_00030824(4);
|
|
*puVar2 = "pthread_mutexattr_destroy failed\n";
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)FUN_00030824(4);
|
|
*puVar2 = "pthread_mutex_init failed\n";
|
|
}
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)FUN_00030824(4);
|
|
*puVar2 = "pthread_mutexattr_settype failed\n";
|
|
}
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)FUN_00030824(4);
|
|
*puVar2 = "pthread_mutexattr_init failed\n";
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar2,&Error::typeinfo,0);
|
|
}
|
|
|
|
|
|
|
|
### FUNC SetColorPalette @ 00026c70
|
|
|
|
/* CFunctions::SetColorPalette(ColorPalette) */
|
|
|
|
void __thiscall CFunctions::SetColorPalette(CFunctions *this,undefined4 param_2)
|
|
|
|
{
|
|
CFunctions CVar1;
|
|
char cVar2;
|
|
undefined4 *puVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
CFunctions CVar6;
|
|
CFunctions *pCVar7;
|
|
CFunctions *pCVar8;
|
|
pthread_mutex_t *__mutex;
|
|
int iVar9;
|
|
uint uVar10;
|
|
int iVar11;
|
|
int iVar12;
|
|
uint uVar13;
|
|
bool bVar14;
|
|
int local_40;
|
|
int local_3c;
|
|
|
|
*(undefined4 *)(this + 0x5108) = param_2;
|
|
__mutex = (pthread_mutex_t *)(this + 0xb0);
|
|
pthread_mutex_lock(__mutex);
|
|
pCVar7 = this + 0x20cc;
|
|
iVar11 = 0xff;
|
|
local_3c = -0xe0;
|
|
pCVar8 = (CFunctions *)0xffffff20;
|
|
switch(param_2) {
|
|
case 0:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar11 = 0;
|
|
pCVar7 = (CFunctions *)0x100;
|
|
do {
|
|
CVar1 = SUB41(iVar11,0);
|
|
pCVar8[1] = CVar1;
|
|
pCVar8[2] = CVar1;
|
|
*pCVar8 = CVar1;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + 1;
|
|
} while (iVar11 != 0x100);
|
|
switchD_00026cd2::caseD_b();
|
|
default:
|
|
pthread_mutex_unlock(__mutex);
|
|
puVar3 = (undefined4 *)__errno();
|
|
*puVar3 = 0xe4ae0001;
|
|
FUN_00027744();
|
|
pCVar8 = pCVar7;
|
|
case 1:
|
|
pCVar7 = this + 0x20cc;
|
|
iVar11 = 0x100;
|
|
do {
|
|
pCVar7[3] = (CFunctions)0x0;
|
|
iVar11 = iVar11 + -1;
|
|
CVar1 = SUB41(iVar11,0);
|
|
pCVar7[1] = CVar1;
|
|
pCVar7[2] = CVar1;
|
|
*pCVar7 = CVar1;
|
|
pCVar7 = pCVar7 + 4;
|
|
} while (iVar11 != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
case 2:
|
|
pCVar8 = pCVar8 + 0x88;
|
|
iVar11 = 0;
|
|
do {
|
|
pCVar7 = this + 0x20cc + (int)pCVar8;
|
|
pCVar7[0x59] = (CFunctions)0x0;
|
|
pCVar7[0x5a] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)__udivsi3(iVar11,0x16);
|
|
pCVar7[0x58] = CVar1;
|
|
pCVar7[0x5b] = (CFunctions)0x0;
|
|
iVar11 = iVar11 + 0x75;
|
|
pCVar8 = pCVar8 + 4;
|
|
} while (pCVar8 != (CFunctions *)0x0);
|
|
pCVar8 = this + 0x2124;
|
|
iVar11 = 0x47;
|
|
iVar9 = 0;
|
|
iVar5 = 0;
|
|
do {
|
|
pCVar8[1] = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)__udivsi3(iVar5,0x47);
|
|
pCVar8[2] = CVar1;
|
|
local_40 = 0x47;
|
|
cVar2 = __udivsi3(iVar9,0x47);
|
|
*pCVar8 = (CFunctions)(cVar2 + 'u');
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar5 = iVar5 + 0xbc;
|
|
iVar9 = iVar9 + 0x25;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
iVar11 = -0x74;
|
|
iVar12 = 0;
|
|
iVar5 = 0;
|
|
iVar9 = 0;
|
|
do {
|
|
CVar1 = (CFunctions)__udivsi3(iVar5,0x94);
|
|
this[iVar11 + 0x22b5] = CVar1;
|
|
this[iVar11 + 0x22b7] = (CFunctions)0x0;
|
|
cVar2 = __udivsi3(iVar9);
|
|
this[iVar11 + 0x22b6] = (CFunctions)(cVar2 + -0x44);
|
|
cVar2 = __divsi3(iVar12,0x1d);
|
|
this[iVar11 + 0x22b4] = (CFunctions)(cVar2 + -0x66);
|
|
iVar5 = iVar5 + 0xff;
|
|
iVar9 = iVar9 + 0x27;
|
|
iVar12 = iVar12 + -0x3b;
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
iVar11 = -0x48;
|
|
iVar12 = 0;
|
|
iVar5 = 0x1ce3;
|
|
iVar9 = 0;
|
|
do {
|
|
CVar1 = (CFunctions)__udivsi3(iVar5,0x94);
|
|
this[iVar11 + 0x22fd] = CVar1;
|
|
this[iVar11 + 0x22ff] = (CFunctions)0x0;
|
|
cVar2 = __udivsi3(iVar9,0x1e);
|
|
this[iVar11 + 0x22fe] = (CFunctions)(cVar2 + -0x1d);
|
|
cVar2 = __divsi3(iVar12,0x12);
|
|
this[iVar11 + 0x22fc] = (CFunctions)(cVar2 + '_');
|
|
iVar5 = iVar5 + 0xff;
|
|
iVar9 = iVar9 + 0x1c;
|
|
iVar12 = iVar12 + -0x50;
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
iVar11 = -0x30;
|
|
iVar5 = 0x1f8;
|
|
iVar9 = 0x2ed1;
|
|
do {
|
|
CVar1 = (CFunctions)__udivsi3(iVar9,0x94);
|
|
this[iVar11 + 0x232d] = CVar1;
|
|
this[iVar11 + 0x232c] = (CFunctions)0xf;
|
|
this[iVar11 + 0x232f] = (CFunctions)0x0;
|
|
cVar2 = __udivsi3(iVar5,0x1e);
|
|
this[iVar11 + 0x232e] = (CFunctions)(cVar2 + -0x1d);
|
|
iVar9 = iVar9 + 0xff;
|
|
iVar5 = iVar5 + 0x1c;
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x232c;
|
|
iVar11 = 0x3ac5;
|
|
do {
|
|
pCVar8[2] = (CFunctions)0xff;
|
|
*pCVar8 = (CFunctions)0xf;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)__udivsi3(iVar11,0x94);
|
|
pCVar8[1] = CVar1;
|
|
iVar11 = iVar11 + 0xff;
|
|
pCVar8 = pCVar8 + 4;
|
|
local_40 = local_40 + -1;
|
|
} while (local_40 != 0);
|
|
uVar4 = 0;
|
|
iVar5 = -0x48;
|
|
iVar11 = 0x817e;
|
|
do {
|
|
CVar1 = (CFunctions)__udivsi3(iVar11,0x94);
|
|
this[iVar5 + 0x2491] = CVar1;
|
|
this[iVar5 + 0x2492] = (CFunctions)0xff;
|
|
this[iVar5 + 0x2493] = (CFunctions)0x0;
|
|
this[iVar5 + 0x2490] = (CFunctions)((char)(uVar4 >> 5) + '\x0f');
|
|
uVar4 = uVar4 + 0xf0;
|
|
iVar11 = iVar11 + 0xff;
|
|
iVar5 = iVar5 + 4;
|
|
} while (iVar5 != 0);
|
|
iVar11 = -0x3c;
|
|
uVar4 = 0xf0e0;
|
|
do {
|
|
this[iVar11 + 0x24cd] = (CFunctions)0xff;
|
|
this[iVar11 + 0x24ce] = (CFunctions)0xff;
|
|
this[iVar11 + 0x24cf] = (CFunctions)0x0;
|
|
this[iVar11 + 0x24cc] = (CFunctions)((char)(uVar4 >> 5) + '\x0f');
|
|
uVar4 = uVar4 + 0xf0;
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 3:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar11 = 0x40;
|
|
uVar4 = 0;
|
|
uVar10 = 0;
|
|
do {
|
|
pCVar8[2] = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = SUB41(uVar10 >> 7,0);
|
|
*pCVar8 = (CFunctions)((char)(uVar4 >> 6) + '2');
|
|
uVar4 = uVar4 + 0xcd;
|
|
uVar10 = uVar10 + 0xff;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x21cc;
|
|
iVar11 = 0x40;
|
|
uVar4 = 0;
|
|
iVar5 = 0;
|
|
do {
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[2] = SUB41(uVar4 >> 6,0);
|
|
pCVar8[1] = SUB41(uVar4 + 0x3fc0 >> 7,0);
|
|
*pCVar8 = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + -1);
|
|
pCVar8 = pCVar8 + 4;
|
|
uVar4 = uVar4 + 0xff;
|
|
iVar5 = iVar5 + -0xff;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x22cc;
|
|
iVar11 = 0x40;
|
|
iVar5 = 0;
|
|
uVar4 = 0;
|
|
do {
|
|
pCVar8[2] = (CFunctions)0xff;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
*pCVar8 = SUB41(uVar4 >> 7,0);
|
|
pCVar8[1] = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + -1);
|
|
iVar5 = iVar5 + -0xff;
|
|
uVar4 = uVar4 + 0xff;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
this = this + 0x23cc;
|
|
iVar11 = 0x40;
|
|
uVar4 = 0xbfc0;
|
|
do {
|
|
this[2] = (CFunctions)0xff;
|
|
this[3] = (CFunctions)0x0;
|
|
*this = SUB41(uVar4 >> 7,0);
|
|
this[1] = SUB41(uVar4 + 0x40 >> 6,0);
|
|
uVar4 = uVar4 + 0xff;
|
|
this = this + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 4:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar11 = -0x32;
|
|
do {
|
|
pCVar8[2] = (CFunctions)0x32;
|
|
*pCVar8 = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = (CFunctions)((char)iVar11 + '2');
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + 1;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x2194;
|
|
iVar5 = -0x96;
|
|
iVar11 = 0;
|
|
do {
|
|
*pCVar8 = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = (CFunctions)((char)iVar5 + -0x38);
|
|
cVar2 = __udivsi3(iVar11,0x96);
|
|
pCVar8[2] = (CFunctions)(cVar2 + '2');
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + 0xcd;
|
|
iVar5 = iVar5 + 1;
|
|
} while (iVar5 != 0);
|
|
CVar1 = (CFunctions)0xc8;
|
|
do {
|
|
this[local_3c + 0x24cd] = CVar1;
|
|
this[local_3c + 0x24ce] = (CFunctions)0xff;
|
|
this[local_3c + 0x24cc] = (CFunctions)0x0;
|
|
this[local_3c + 0x24cf] = (CFunctions)0x0;
|
|
local_3c = local_3c + 4;
|
|
CVar1 = (CFunctions)((char)CVar1 + '\x01');
|
|
} while (local_3c != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 5:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar11 = 0x40;
|
|
uVar4 = 0;
|
|
uVar10 = 0;
|
|
uVar13 = 0;
|
|
do {
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = SUB41(uVar10 >> 6,0);
|
|
pCVar8[2] = SUB41(uVar13 >> 6,0);
|
|
*pCVar8 = SUB41(uVar4 >> 6,0);
|
|
uVar4 = uVar4 + 0x24;
|
|
uVar10 = uVar10 + 0x16;
|
|
pCVar8 = pCVar8 + 4;
|
|
uVar13 = uVar13 + 0xcb;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x21cc;
|
|
iVar11 = 0x40;
|
|
uVar4 = 0;
|
|
uVar10 = 0;
|
|
iVar5 = 0;
|
|
do {
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = (CFunctions)((char)(uVar10 >> 6) + '\x16');
|
|
pCVar8[2] = (CFunctions)((char)(uVar4 >> 6) + -0x35);
|
|
*pCVar8 = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + '$');
|
|
pCVar8 = pCVar8 + 4;
|
|
uVar4 = uVar4 + 0x34;
|
|
uVar10 = uVar10 + 0x44;
|
|
iVar5 = iVar5 + -0x24;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x22cc;
|
|
uVar4 = 0;
|
|
iVar11 = 0x40;
|
|
do {
|
|
pCVar8[2] = (CFunctions)0xff;
|
|
*pCVar8 = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = (CFunctions)((char)(uVar4 >> 6) + 'Z');
|
|
uVar4 = uVar4 + 0x7c;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
this = this + 0x23cc;
|
|
iVar11 = 0x40;
|
|
uVar4 = 0;
|
|
uVar10 = 0;
|
|
do {
|
|
this[2] = (CFunctions)0xff;
|
|
this[3] = (CFunctions)0x0;
|
|
*this = SUB41(uVar10 >> 6,0);
|
|
this[1] = (CFunctions)((char)(uVar4 >> 6) + -0x2a);
|
|
uVar4 = uVar4 + 0x29;
|
|
uVar10 = uVar10 + 0xff;
|
|
this = this + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 6:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar5 = 0;
|
|
do {
|
|
pCVar8[1] = SUB41(iVar11,0);
|
|
*pCVar8 = SUB41(iVar11,0);
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
cVar2 = __divsi3(iVar5,100);
|
|
pCVar8[2] = (CFunctions)(cVar2 + -1);
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar5 = iVar5 + -0xff;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0x9b);
|
|
pCVar8 = this + 0x225c;
|
|
iVar5 = 0x9b;
|
|
iVar11 = 0;
|
|
do {
|
|
pCVar8[1] = SUB41(iVar5,0);
|
|
*pCVar8 = SUB41(iVar5,0);
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)__udivsi3(iVar11,0x69);
|
|
pCVar8[2] = CVar1;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + 0xff;
|
|
iVar5 = iVar5 + -1;
|
|
} while (iVar5 != 0x32);
|
|
this = this + 0x2400;
|
|
iVar11 = 0x33;
|
|
do {
|
|
this[2] = (CFunctions)0xff;
|
|
this[3] = (CFunctions)0x0;
|
|
iVar11 = iVar11 + -1;
|
|
this[1] = SUB41(iVar11,0);
|
|
*this = SUB41(iVar11,0);
|
|
this = this + 4;
|
|
} while (iVar11 != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 7:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar11 = 0x80;
|
|
CVar1 = (CFunctions)0x0;
|
|
do {
|
|
pCVar8[1] = (CFunctions)0x0;
|
|
pCVar8[2] = CVar1;
|
|
*pCVar8 = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8 = pCVar8 + 4;
|
|
CVar1 = (CFunctions)((char)CVar1 + '\x02');
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
this = this + 0x22cc;
|
|
iVar5 = 0x80;
|
|
iVar11 = 0;
|
|
do {
|
|
this[2] = (CFunctions)0xff;
|
|
this[3] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)__udivsi3(iVar11,0x7f);
|
|
this[1] = CVar1;
|
|
*this = CVar1;
|
|
iVar11 = iVar11 + 0xff;
|
|
this = this + 4;
|
|
iVar5 = iVar5 + -1;
|
|
} while (iVar5 != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 8:
|
|
iVar11 = -0x80;
|
|
do {
|
|
this[iVar11 + 0x214d] = (CFunctions)0x0;
|
|
this[iVar11 + 0x214e] = (CFunctions)0x0;
|
|
this[iVar11 + 0x214c] = (CFunctions)((char)iVar11 + -1);
|
|
this[iVar11 + 0x214f] = (CFunctions)0x0;
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x214c;
|
|
uVar4 = 0;
|
|
iVar11 = 0x40;
|
|
do {
|
|
pCVar8[2] = (CFunctions)0x0;
|
|
*pCVar8 = (CFunctions)0xff;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = SUB41(uVar4 >> 6,0);
|
|
uVar4 = uVar4 + 0xff;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x224c;
|
|
iVar5 = 0x40;
|
|
uVar4 = 0;
|
|
iVar11 = 0;
|
|
do {
|
|
pCVar8[1] = (CFunctions)0xff;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[2] = SUB41(uVar4 >> 6,0);
|
|
*pCVar8 = (CFunctions)((char)(iVar11 + ((uint)(iVar11 >> 0x1f) >> 0x1a) >> 6) + -1);
|
|
pCVar8 = pCVar8 + 4;
|
|
uVar4 = uVar4 + 0xff;
|
|
iVar11 = iVar11 + -0xff;
|
|
iVar5 = iVar5 + -1;
|
|
} while (iVar5 != 0);
|
|
pCVar8 = this + 0x234c;
|
|
iVar11 = 0x40;
|
|
iVar5 = 0;
|
|
do {
|
|
pCVar8[2] = (CFunctions)0xff;
|
|
*pCVar8 = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = (CFunctions)((char)(iVar5 + ((uint)(iVar5 >> 0x1f) >> 0x1a) >> 6) + -1);
|
|
iVar5 = iVar5 + -0xff;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
iVar5 = -0x80;
|
|
iVar11 = 0;
|
|
do {
|
|
this[iVar5 + 0x24cd] = (CFunctions)0x0;
|
|
this[iVar5 + 0x24cc] = (CFunctions)0x0;
|
|
this[iVar5 + 0x24cf] = (CFunctions)0x0;
|
|
this[iVar5 + 0x24ce] =
|
|
(CFunctions)((char)(iVar11 + ((uint)(iVar11 >> 0x1f) >> 0x1b) >> 5) + -1);
|
|
iVar11 = iVar11 + -0x80;
|
|
iVar5 = iVar5 + 4;
|
|
} while (iVar5 != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 9:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar5 = 0x99;
|
|
iVar11 = 0;
|
|
do {
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)__udivsi3(iVar11,200);
|
|
pCVar8[1] = CVar1;
|
|
pCVar8[2] = CVar1;
|
|
*pCVar8 = CVar1;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + 0xff;
|
|
iVar5 = iVar5 + -1;
|
|
} while (iVar5 != 0);
|
|
iVar5 = -0xbc;
|
|
iVar11 = 0x9867;
|
|
do {
|
|
this[iVar5 + 0x23ed] = (CFunctions)0xc3;
|
|
CVar1 = (CFunctions)__udivsi3(iVar11,200);
|
|
this[iVar5 + 0x23ee] = CVar1;
|
|
this[iVar5 + 0x23ec] = (CFunctions)0xc3;
|
|
this[iVar5 + 0x23ef] = (CFunctions)0x0;
|
|
iVar11 = iVar11 + 0xff;
|
|
iVar5 = iVar5 + 4;
|
|
} while (iVar5 != 0);
|
|
iVar11 = 0;
|
|
do {
|
|
this[local_3c + 0x24ce] = (CFunctions)0xff;
|
|
this[local_3c + 0x24cf] = (CFunctions)0x0;
|
|
cVar2 = __divsi3(iVar11,0x37);
|
|
this[local_3c + 0x24cd] = (CFunctions)(cVar2 + -0x3d);
|
|
this[local_3c + 0x24cc] = (CFunctions)(cVar2 + -0x3d);
|
|
iVar11 = iVar11 + -0xc3;
|
|
local_3c = local_3c + 4;
|
|
} while (local_3c != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 10:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar11 = 0;
|
|
do {
|
|
pCVar8[1] = (CFunctions)0x0;
|
|
pCVar8[2] = SUB41(iVar11,0);
|
|
*pCVar8 = SUB41(iVar11,0);
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + 7;
|
|
} while (iVar11 != 0xfc);
|
|
CVar1 = (CFunctions)0xfc;
|
|
iVar11 = -0x94;
|
|
uVar4 = 0;
|
|
do {
|
|
this[iVar11 + 0x21f1] = (CFunctions)0x0;
|
|
this[iVar11 + 0x21f2] = CVar1;
|
|
this[iVar11 + 0x21f3] = (CFunctions)0x0;
|
|
this[iVar11 + 0x21f0] = (CFunctions)(-4 - (char)(uVar4 >> 2));
|
|
uVar4 = uVar4 + 7;
|
|
CVar1 = (CFunctions)((char)CVar1 + -7);
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x21f0;
|
|
CVar1 = (CFunctions)0x0;
|
|
CVar6 = (CFunctions)0x0;
|
|
uVar4 = 0xf5;
|
|
do {
|
|
CVar1 = (CFunctions)((char)CVar1 + '\a');
|
|
pCVar8[1] = CVar1;
|
|
pCVar8[2] = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
*pCVar8 = (CFunctions)(-4 - (char)(uVar4 >> 2));
|
|
pCVar8 = pCVar8 + 4;
|
|
bVar14 = uVar4 != 0;
|
|
uVar4 = uVar4 - 7;
|
|
} while (bVar14);
|
|
pCVar8 = this + 0x2280;
|
|
uVar4 = 0;
|
|
iVar11 = 0xfc;
|
|
do {
|
|
pCVar8[2] = (CFunctions)0x0;
|
|
*pCVar8 = SUB41(iVar11,0);
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = (CFunctions)(-4 - (char)(uVar4 >> 1));
|
|
uVar4 = uVar4 + 7;
|
|
pCVar8 = pCVar8 + 4;
|
|
bVar14 = iVar11 != 0;
|
|
iVar11 = iVar11 + -7;
|
|
} while (bVar14);
|
|
pCVar8 = this + 0x2314;
|
|
CVar1 = (CFunctions)0x7;
|
|
uVar4 = 0xf5;
|
|
do {
|
|
pCVar8[2] = CVar1;
|
|
*pCVar8 = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = (CFunctions)(-4 - (char)(uVar4 >> 1));
|
|
pCVar8 = pCVar8 + 4;
|
|
CVar1 = (CFunctions)((char)CVar1 + '\a');
|
|
bVar14 = uVar4 != 0;
|
|
uVar4 = uVar4 - 7;
|
|
} while (bVar14);
|
|
uVar4 = 0;
|
|
iVar11 = -0x94;
|
|
CVar1 = (CFunctions)0xfc;
|
|
do {
|
|
this[iVar11 + 0x2439] = CVar1;
|
|
this[iVar11 + 0x2438] = (CFunctions)0x0;
|
|
this[iVar11 + 0x243b] = (CFunctions)0x0;
|
|
this[iVar11 + 0x243a] = (CFunctions)(-4 - (char)(uVar4 >> 2));
|
|
uVar4 = uVar4 + 7;
|
|
CVar1 = (CFunctions)((char)CVar1 + -7);
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
this = this + 0x2438;
|
|
uVar4 = 0xfc;
|
|
do {
|
|
this[1] = CVar6;
|
|
*this = CVar6;
|
|
this[3] = (CFunctions)0x0;
|
|
this[2] = (CFunctions)(-4 - (char)(uVar4 >> 2));
|
|
this = this + 4;
|
|
CVar6 = (CFunctions)((char)CVar6 + '\a');
|
|
bVar14 = uVar4 != 0;
|
|
uVar4 = uVar4 - 7;
|
|
} while (bVar14);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 0xc:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar11 = 0;
|
|
do {
|
|
pCVar8[1] = (CFunctions)0x0;
|
|
pCVar8[2] = (CFunctions)0x0;
|
|
*pCVar8 = SUB41(iVar11,0);
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + 7;
|
|
} while (iVar11 != 0xfc);
|
|
iVar11 = -0x94;
|
|
CVar1 = (CFunctions)0x0;
|
|
do {
|
|
this[iVar11 + 0x21f1] = CVar1;
|
|
this[iVar11 + 0x21f2] = (CFunctions)0x0;
|
|
this[iVar11 + 0x21f0] = (CFunctions)0xff;
|
|
this[iVar11 + 0x21f3] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)((char)CVar1 + '\a');
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x21f0;
|
|
iVar11 = 0;
|
|
do {
|
|
pCVar8[1] = (CFunctions)0xff;
|
|
pCVar8[2] = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
*pCVar8 = (CFunctions)((char)iVar11 + -0xb);
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -7;
|
|
} while (iVar11 != -0xfc);
|
|
iVar11 = -0x94;
|
|
CVar1 = (CFunctions)0x0;
|
|
do {
|
|
this[iVar11 + 0x2315] = (CFunctions)0xff;
|
|
this[iVar11 + 0x2316] = CVar1;
|
|
this[iVar11 + 0x2314] = (CFunctions)0x0;
|
|
this[iVar11 + 0x2317] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)((char)CVar1 + '\a');
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x2314;
|
|
iVar11 = 0;
|
|
do {
|
|
pCVar8[2] = (CFunctions)0xff;
|
|
*pCVar8 = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8[1] = (CFunctions)((char)iVar11 + -0xb);
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -7;
|
|
} while (iVar11 != -0xfc);
|
|
CVar1 = (CFunctions)0x0;
|
|
iVar11 = -0x94;
|
|
do {
|
|
this[iVar11 + 0x2439] = (CFunctions)0x0;
|
|
this[iVar11 + 0x243a] = (CFunctions)0xff;
|
|
this[iVar11 + 0x2438] = CVar1;
|
|
this[iVar11 + 0x243b] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)((char)CVar1 + '\a');
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
CVar1 = (CFunctions)0x0;
|
|
iVar11 = -0x94;
|
|
do {
|
|
this[iVar11 + 0x24cd] = CVar1;
|
|
this[iVar11 + 0x24ce] = (CFunctions)0xff;
|
|
this[iVar11 + 0x24cc] = (CFunctions)0xff;
|
|
this[iVar11 + 0x24cf] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)((char)CVar1 + '\a');
|
|
iVar11 = iVar11 + 4;
|
|
} while (iVar11 != 0);
|
|
switchD_00026cd2::caseD_b();
|
|
return;
|
|
case 0xd:
|
|
iVar11 = 0x40;
|
|
iVar5 = 0;
|
|
do {
|
|
this[iVar5 + 0x20cc] = (CFunctions)0xff;
|
|
this[iVar5 + 0x20cd] = SUB41(iVar5,0);
|
|
this[iVar5 + 0x20ce] = (CFunctions)0x0;
|
|
this[iVar5 + 0x20cf] = (CFunctions)0x0;
|
|
iVar5 = iVar5 + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x21cc;
|
|
CVar1 = (CFunctions)0xfc;
|
|
iVar11 = 0x40;
|
|
do {
|
|
pCVar8[1] = (CFunctions)0xff;
|
|
pCVar8[2] = (CFunctions)0x0;
|
|
*pCVar8 = CVar1;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
CVar1 = (CFunctions)((char)CVar1 + -4);
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
CVar1 = (CFunctions)0x0;
|
|
pCVar8 = this + 0x22cc;
|
|
iVar11 = 0x40;
|
|
CVar6 = (CFunctions)0xfc;
|
|
do {
|
|
pCVar8[1] = (CFunctions)0xff;
|
|
pCVar8[2] = CVar1;
|
|
*pCVar8 = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
pCVar8 = pCVar8 + 4;
|
|
CVar1 = (CFunctions)((char)CVar1 + '\x04');
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
pCVar8 = this + 0x23cc;
|
|
iVar11 = 0x40;
|
|
do {
|
|
pCVar8[1] = CVar6;
|
|
pCVar8[2] = (CFunctions)0xff;
|
|
*pCVar8 = (CFunctions)0x0;
|
|
pCVar8[3] = (CFunctions)0x0;
|
|
CVar6 = (CFunctions)((char)CVar6 + -4);
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
case 0xb:
|
|
pCVar8 = this + 0x20cc;
|
|
iVar11 = 0x100;
|
|
do {
|
|
CVar1 = *pCVar8;
|
|
*pCVar8 = pCVar8[2];
|
|
pCVar8[2] = CVar1;
|
|
pCVar8 = pCVar8 + 4;
|
|
iVar11 = iVar11 + -1;
|
|
} while (iVar11 != 0);
|
|
__aeabi_memcpy(this + 0x24f4,pCVar7,0x400);
|
|
__aeabi_memcpy(this + 0x291c,pCVar7,0x400);
|
|
pthread_mutex_unlock(__mutex);
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
### FUNC caseD_b @ 0002770e
|
|
|
|
void switchD_00026cd2::caseD_b(void)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
undefined1 *puVar2;
|
|
undefined4 in_stack_0000000c;
|
|
pthread_mutex_t *in_stack_00000010;
|
|
undefined4 in_stack_00000014;
|
|
undefined4 in_stack_00000018;
|
|
int in_stack_0000001c;
|
|
int in_stack_00000040;
|
|
int in_stack_00000044;
|
|
|
|
puVar2 = (undefined1 *)(in_stack_00000044 + 0x20cc);
|
|
do {
|
|
uVar1 = *puVar2;
|
|
*puVar2 = puVar2[2];
|
|
puVar2[2] = uVar1;
|
|
puVar2 = puVar2 + 4;
|
|
in_stack_00000040 = in_stack_00000040 + -1;
|
|
} while (in_stack_00000040 != 0);
|
|
__aeabi_memcpy(in_stack_00000014,in_stack_0000000c,in_stack_0000001c << 10);
|
|
__aeabi_memcpy(in_stack_00000018,in_stack_0000000c,in_stack_0000001c << 10);
|
|
pthread_mutex_unlock(in_stack_00000010);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00027744 @ 00027744
|
|
|
|
void FUN_00027744(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0002776c @ 0002776c
|
|
|
|
void FUN_0002776c(void)
|
|
|
|
{
|
|
FUN_000308d8();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_0003178c();
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~CFunctions @ 00027778
|
|
|
|
/* CFunctions::~CFunctions() */
|
|
|
|
CFunctions * __thiscall CFunctions::~CFunctions(CFunctions *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__CFunctions_00068c40;
|
|
ReleaseMemory(this);
|
|
if (gLogFile != (FILE *)0x0) {
|
|
fclose(gLogFile);
|
|
}
|
|
CSmoother::~CSmoother((CSmoother *)(this + 0x37c4));
|
|
CAccumulator::~CAccumulator((CAccumulator *)(this + 0x37a4));
|
|
CAccumulator::~CAccumulator((CAccumulator *)(this + 0x3784));
|
|
pthread_mutex_destroy((pthread_mutex_t *)(this + 0xb0));
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ReleaseMemory @ 00027810
|
|
|
|
/* CFunctions::ReleaseMemory() */
|
|
|
|
void __thiscall CFunctions::ReleaseMemory(CFunctions *this)
|
|
|
|
{
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
*(undefined4 *)(this + 0x3814) = 0;
|
|
*(undefined4 *)(this + 0xa4) = 0;
|
|
*(undefined4 *)(this + 0xa8) = 0;
|
|
*(undefined4 *)(this + 0xac) = 0;
|
|
*(undefined4 *)(this + 0x2d1c) = 0;
|
|
*(undefined4 *)(this + 0x3128) = 0;
|
|
if (*(void **)(this + 0xb4) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0xb4));
|
|
*(undefined4 *)(this + 0xb4) = 0;
|
|
}
|
|
if (*(void **)(this + 0xc0) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0xc0));
|
|
*(undefined4 *)(this + 0xc0) = 0;
|
|
}
|
|
if (*(void **)(this + 0xc4) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0xc4));
|
|
*(undefined4 *)(this + 0xc4) = 0;
|
|
}
|
|
if (*(void **)(this + 200) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 200));
|
|
*(undefined4 *)(this + 200) = 0;
|
|
}
|
|
if (*(void **)(this + 0xb8) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0xb8));
|
|
*(undefined4 *)(this + 0xb8) = 0;
|
|
}
|
|
if (*(void **)(this + 0xbc) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0xbc));
|
|
*(undefined4 *)(this + 0xbc) = 0;
|
|
}
|
|
if (*(void **)(this + 0x2f74) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0x2f74));
|
|
*(undefined4 *)(this + 0x2f74) = 0;
|
|
}
|
|
if (*(void **)(this + 0x2f78) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0x2f78));
|
|
*(undefined4 *)(this + 0x2f78) = 0;
|
|
}
|
|
if (*(void **)(this + 0x2f7c) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0x2f7c));
|
|
*(undefined4 *)(this + 0x2f7c) = 0;
|
|
}
|
|
__aeabi_memclr4(this + 0x2d1c,0x40c);
|
|
CAccumulator::Reset((CAccumulator *)(this + 0x3784),0,0,0);
|
|
CAccumulator::Reset((CAccumulator *)(this + 0x37a4),0,0,0);
|
|
CSmoother::Reset((CSmoother *)(this + 0x37c4),0,0,0,0);
|
|
__aeabi_memclr4(this + 0x3820,0x18d0);
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~CFunctions @ 00027954
|
|
|
|
/* CFunctions::~CFunctions() */
|
|
|
|
void __thiscall CFunctions::~CFunctions(CFunctions *this)
|
|
|
|
{
|
|
~CFunctions(this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Reset @ 00027974
|
|
|
|
/* CFunctions::Reset(struct_IntrinsicPara const*) */
|
|
|
|
undefined4 __thiscall CFunctions::Reset(CFunctions *this,struct_IntrinsicPara *param_1)
|
|
|
|
{
|
|
pthread_mutex_t *__mutex;
|
|
uint uVar1;
|
|
uint uVar2;
|
|
void *pvVar3;
|
|
int iVar4;
|
|
MStream *pMVar5;
|
|
undefined4 *puVar6;
|
|
Logging *this_00;
|
|
CFunctions *pCVar7;
|
|
uint uVar8;
|
|
undefined4 uVar9;
|
|
undefined4 uVar10;
|
|
undefined4 uVar11;
|
|
uint uVar12;
|
|
undefined8 uVar13;
|
|
Logging aLStack_3c [12];
|
|
Logging aLStack_30 [12];
|
|
Logging aLStack_24 [12];
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
ReleaseMemory(this);
|
|
__mutex = (pthread_mutex_t *)(this + 0xb0);
|
|
pthread_mutex_lock(__mutex);
|
|
*(undefined4 *)(this + 0x50fc) = 8;
|
|
*(undefined4 *)(this + 0x5100) = 0xffff3cb0;
|
|
*(undefined4 *)(this + 0x5104) = 3;
|
|
pCVar7 = this + 0x37ec;
|
|
uVar9 = *(undefined4 *)(param_1 + 4);
|
|
uVar10 = *(undefined4 *)(param_1 + 8);
|
|
*(undefined4 *)pCVar7 = *(undefined4 *)param_1;
|
|
*(undefined4 *)(this + 0x37f0) = uVar9;
|
|
*(undefined4 *)(this + 0x37f4) = uVar10;
|
|
uVar9 = *(undefined4 *)(param_1 + 0x10);
|
|
uVar10 = *(undefined4 *)(param_1 + 0x14);
|
|
*(undefined4 *)(this + 0x37f8) = *(undefined4 *)(param_1 + 0xc);
|
|
*(undefined4 *)(this + 0x37fc) = uVar9;
|
|
*(undefined4 *)(this + 0x3800) = uVar10;
|
|
uVar9 = *(undefined4 *)(param_1 + 0x1c);
|
|
uVar10 = *(undefined4 *)(param_1 + 0x20);
|
|
uVar11 = *(undefined4 *)(param_1 + 0x24);
|
|
*(undefined4 *)(this + 0x3804) = *(undefined4 *)(param_1 + 0x18);
|
|
*(undefined4 *)(this + 0x3808) = uVar9;
|
|
*(undefined4 *)(this + 0x380c) = uVar10;
|
|
*(undefined4 *)(this + 0x3810) = uVar11;
|
|
uVar12 = *(uint *)(this + 0x3804);
|
|
if ((((uVar12 - 4 < 0x3d) && ((uVar12 - 1 & uVar12) == 0)) &&
|
|
((*(uint *)(this + 0x3808) - 1 & (*(uint *)(this + 0x3808) | 0xffffffc0)) == 0)) &&
|
|
((*(int *)(this + 0x380c) - 1U < 2 && (*(int *)(this + 0x3810) != 0)))) {
|
|
uVar1 = *(uint *)pCVar7;
|
|
if ((3 < uVar1) && ((uVar1 & 3) == 0)) {
|
|
if (*(int *)(this + 0x37f0) != 0) {
|
|
if (3 < *(uint *)(this + 0x37fc)) {
|
|
if (*(int *)(this + 0x3800) != 0) {
|
|
uVar1 = *(int *)(this + 0x37f0) * uVar1;
|
|
*(uint *)(this + 0x50f0) = uVar1;
|
|
uVar8 = *(int *)(this + 0x3800) * *(uint *)(this + 0x37fc);
|
|
*(uint *)(this + 0x50f8) = uVar8;
|
|
*(int *)(this + 0x50f4) = *(int *)(this + 0x37f4) * *(int *)(this + 0x37f8);
|
|
uVar2 = uVar1 * 2;
|
|
if (uVar1 * 2 < uVar1) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
pvVar3 = operator_new__(uVar2);
|
|
*(void **)(this + 0xb4) = pvVar3;
|
|
pvVar3 = operator_new__(uVar2);
|
|
*(void **)(this + 0xbc) = pvVar3;
|
|
pvVar3 = operator_new__(uVar1);
|
|
*(void **)(this + 0xc0) = pvVar3;
|
|
uVar13 = __muldi3(uVar1,0,4,(int)uVar1 >> 0x1f);
|
|
uVar2 = 0xffffffff;
|
|
if ((int)((ulonglong)uVar13 >> 0x20) == 0) {
|
|
uVar2 = (uint)uVar13;
|
|
}
|
|
pvVar3 = operator_new__(uVar2);
|
|
*(void **)(this + 0xc4) = pvVar3;
|
|
pvVar3 = operator_new__(uVar1);
|
|
*(void **)(this + 0xb8) = pvVar3;
|
|
pvVar3 = operator_new__(uVar8);
|
|
*(void **)(this + 200) = pvVar3;
|
|
uVar9 = 0;
|
|
iVar4 = CAccumulator::Reset((CAccumulator *)(this + 0x3784),uVar1,uVar12,0);
|
|
if (iVar4 == 0) {
|
|
pMVar5 = (MStream *)mag::Logging::Logging(aLStack_30,4);
|
|
MStream::operator<<(pMVar5,"Failed to create baseline accmulator");
|
|
this_00 = aLStack_30;
|
|
}
|
|
else {
|
|
if ((*(uint *)(this + 0x380c) < 2) ||
|
|
(iVar4 = CSmoother::Reset((CSmoother *)(this + 0x37c4),*(uint *)(this + 0x50f0),
|
|
*(uint *)(this + 0x380c) - 1,0,0), iVar4 != 0)) {
|
|
__aeabi_memclr4(this + 0x24e0);
|
|
*(undefined4 *)(this + 0x24cc) = 0x28;
|
|
*(undefined4 *)(this + 0x24d0) = *(undefined4 *)pCVar7;
|
|
*(undefined4 *)(this + 0x24d4) = *(undefined4 *)(this + 0x37f0);
|
|
*(undefined4 *)(this + 0x24d8) = 0x80001;
|
|
*(undefined4 *)(this + 0x24dc) = 0;
|
|
__aeabi_memclr4(this + 0x2908,0x14);
|
|
*(undefined4 *)(this + 0x28f4) = 0x28;
|
|
*(undefined4 *)(this + 0x28f8) = *(undefined4 *)(this + 0x37fc);
|
|
*(undefined4 *)(this + 0x28fc) = *(undefined4 *)(this + 0x3800);
|
|
*(undefined4 *)(this + 0x2900) = 0x80001;
|
|
*(undefined4 *)(this + 0x2904) = 0;
|
|
CalTaoAtm((CFunctions *)0x2904,(struct_FixPara *)(this + 0x78));
|
|
*(undefined4 *)(this + 0xa4) = 1;
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar9 = *(undefined4 *)(this + 0xa4);
|
|
goto LAB_00027ba6;
|
|
}
|
|
pMVar5 = (MStream *)mag::Logging::Logging(aLStack_3c,4);
|
|
MStream::operator<<(pMVar5,"Failed to create temperature smoother");
|
|
this_00 = aLStack_3c;
|
|
}
|
|
mag::Logging::~Logging(this_00);
|
|
pthread_mutex_unlock(__mutex);
|
|
puVar6 = (undefined4 *)__errno();
|
|
*puVar6 = 0xe4ae0003;
|
|
goto LAB_00027ba6;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
pMVar5 = (MStream *)mag::Logging::Logging(aLStack_24,4);
|
|
MStream::operator<<(pMVar5,"Failed to configurate CFunctions due to parameter error");
|
|
mag::Logging::~Logging(aLStack_24);
|
|
pthread_mutex_unlock(__mutex);
|
|
puVar6 = (undefined4 *)__errno();
|
|
*puVar6 = 0xe4ae0001;
|
|
uVar9 = 0;
|
|
LAB_00027ba6:
|
|
if (__stack_chk_guard == local_18) {
|
|
return uVar9;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC CalTaoAtm @ 00027d20
|
|
|
|
/* CFunctions::CalTaoAtm(struct_FixPara*) */
|
|
|
|
undefined4 __thiscall CFunctions::CalTaoAtm(CFunctions *this,struct_FixPara *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined4 uVar3;
|
|
undefined4 *puVar4;
|
|
undefined4 uVar5;
|
|
undefined4 uVar6;
|
|
float __x;
|
|
float __x_00;
|
|
float __x_01;
|
|
float __x_02;
|
|
float __y;
|
|
float __y_00;
|
|
|
|
if (param_1 == (struct_FixPara *)0x0) {
|
|
puVar4 = (undefined4 *)__errno();
|
|
*puVar4 = 0xe4ae0001;
|
|
uVar6 = 0;
|
|
}
|
|
else {
|
|
iVar1 = __aeabi_fcmple(*(undefined4 *)param_1,0);
|
|
if (iVar1 == 0) {
|
|
iVar1 = __aeabi_fcmple(*(undefined4 *)(param_1 + 0x10),0);
|
|
if (iVar1 == 0) {
|
|
uVar6 = *(undefined4 *)(param_1 + 0xc);
|
|
iVar1 = __aeabi_fcmplt(uVar6);
|
|
if ((iVar1 == 0) && (iVar1 = __aeabi_fcmpgt(uVar6,0x3f800000), iVar1 == 0)) {
|
|
iVar1 = __fixsfsi(*(undefined4 *)(param_1 + 8));
|
|
if (0x22 < iVar1) {
|
|
iVar1 = 0x23;
|
|
}
|
|
if (iVar1 < -0x18) {
|
|
iVar1 = -0x19;
|
|
}
|
|
__x = (float)__mulsf3(uVar6,*(undefined4 *)(&UNK_00064928 + iVar1 * 4));
|
|
sqrtf(__x);
|
|
uVar6 = __mulsf3();
|
|
uVar6 = __addsf3(uVar6,0x3d3851ec);
|
|
uVar2 = __divsf3(0x3db851ec,*(undefined4 *)(param_1 + 0x10));
|
|
uVar5 = 0;
|
|
iVar1 = __aeabi_fcmpgt(*(undefined4 *)(param_1 + 0x14),0);
|
|
uVar3 = 0;
|
|
if (iVar1 != 0) {
|
|
powf(__x_00,__y);
|
|
uVar3 = __mulsf3();
|
|
}
|
|
iVar1 = __aeabi_fcmpgt(*(undefined4 *)(param_1 + 0x18),0);
|
|
if (iVar1 != 0) {
|
|
powf(__x_01,__y_00);
|
|
uVar5 = __mulsf3();
|
|
}
|
|
uVar3 = __addsf3(uVar3,uVar5);
|
|
uVar6 = __addsf3(uVar6,uVar2);
|
|
uVar6 = __addsf3(uVar6,uVar3);
|
|
uVar6 = __mulsf3(*(undefined4 *)param_1,uVar6);
|
|
uVar6 = __mulsf3(uVar6,0xba83126f);
|
|
expf(__x_02);
|
|
*(undefined4 *)(param_1 + 0x24) = uVar6;
|
|
return uVar6;
|
|
}
|
|
}
|
|
}
|
|
uVar6 = 0x3f800000;
|
|
*(undefined4 *)(param_1 + 0x24) = 0x3f800000;
|
|
puVar4 = (undefined4 *)__errno();
|
|
*puVar4 = 0xe4ae0001;
|
|
}
|
|
return uVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC PushBaselineRaw @ 00027e68
|
|
|
|
/* CFunctions::PushBaselineRaw(unsigned short const*, int) */
|
|
|
|
int __thiscall CFunctions::PushBaselineRaw(CFunctions *this,ushort *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
pthread_mutex_t *__mutex;
|
|
|
|
__mutex = (pthread_mutex_t *)(this + 0xb0);
|
|
pthread_mutex_lock(__mutex);
|
|
if (*(int *)(this + 0xa4) == 0) {
|
|
pthread_mutex_unlock(__mutex);
|
|
iVar1 = 0;
|
|
}
|
|
else {
|
|
if (param_2 != 0) {
|
|
*(undefined4 *)(this + 0xa8) = 0;
|
|
CAccumulator::Restart((CAccumulator *)(this + 0x3784));
|
|
CAccumulator::Restart((CAccumulator *)(this + 0x37a4));
|
|
}
|
|
iVar1 = CAccumulator::PushFrame((CAccumulator *)(this + 0x3784),param_1);
|
|
if (iVar1 != 0) {
|
|
*(undefined4 *)(this + 0xa8) = 1;
|
|
}
|
|
pthread_mutex_unlock(__mutex);
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SelectCaliCurve @ 00027edc
|
|
|
|
/* CFunctions::SelectCaliCurve() */
|
|
|
|
void __thiscall CFunctions::SelectCaliCurve(CFunctions *this)
|
|
|
|
{
|
|
CFunctions *pCVar1;
|
|
FILE *__stream;
|
|
size_t sVar2;
|
|
size_t sVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
size_t __n;
|
|
int iVar7;
|
|
CFunctions *pCVar8;
|
|
uint uVar9;
|
|
CFunctions *local_58;
|
|
int local_24;
|
|
uint local_20;
|
|
uint local_1c;
|
|
|
|
*(undefined4 *)(this + 0x2d24) = 0;
|
|
pCVar1 = this;
|
|
uVar6 = 0;
|
|
do {
|
|
uVar9 = uVar6;
|
|
pCVar8 = pCVar1;
|
|
uVar6 = uVar9 + 1;
|
|
if (*(int *)(this + 0x2e2c) - 2U <= uVar9) break;
|
|
pCVar1 = pCVar8 + 4;
|
|
} while (*(int *)(this + uVar6 * 4 + 0x2e38) < *(int *)(this + 0x38));
|
|
*(uint *)(this + 0x3108) = uVar9;
|
|
local_1c = *(uint *)(this + 0x2e30);
|
|
local_24 = *(int *)(this + 0x50f0);
|
|
iVar5 = *(int *)(this + 0x2e28);
|
|
__n = *(int *)(this + 0x2e34) + local_1c + local_24 * (iVar5 * 3 + -1) * 2;
|
|
if (uVar9 <= uVar6) {
|
|
iVar5 = 0;
|
|
local_20 = uVar9;
|
|
do {
|
|
if (*(int *)(pCVar8 + 0x2f80) == 0) {
|
|
iVar4 = access((char *)(this + 0x2d28),0);
|
|
if (iVar4 != 0) {
|
|
*(undefined4 *)(this + 0x2d1c) = 0;
|
|
return;
|
|
}
|
|
__stream = fopen((char *)(this + 0x2d28),"rb");
|
|
fseek(__stream,*(long *)(pCVar8 + 0x2fd0),0);
|
|
sVar2 = fread((void *)(*(int *)(this + 0x2f74) + *(int *)(pCVar8 + 0x3020)),1,__n,__stream);
|
|
if ((*(int *)(pCVar8 + 0x2f28) != 0) && (uVar9 + iVar5 <= *(int *)(this + 0x2e2c) - 2U)) {
|
|
fseek(__stream,*(long *)(pCVar8 + 0x3070),0);
|
|
sVar3 = fread((void *)(*(int *)(this + 0x2f7c) + *(int *)(pCVar8 + 0x30bc)),4,
|
|
*(int *)(pCVar8 + 0x2f28) * 10,__stream);
|
|
if (sVar3 * 4 + *(int *)(pCVar8 + 0x2f28) * -0x28 != 0) {
|
|
fclose(__stream);
|
|
goto LAB_000280ec;
|
|
}
|
|
}
|
|
fclose(__stream);
|
|
if (sVar2 != __n) {
|
|
LAB_000280ec:
|
|
*(undefined4 *)(this + 0x2d1c) = 0;
|
|
return;
|
|
}
|
|
*(undefined4 *)(pCVar8 + 0x2f80) = 1;
|
|
local_20 = *(uint *)(this + 0x3108);
|
|
}
|
|
iVar5 = iVar5 + 1;
|
|
pCVar8 = pCVar8 + 4;
|
|
} while (uVar9 + iVar5 <= local_20 + 1);
|
|
local_1c = *(uint *)(this + 0x2e30);
|
|
iVar5 = *(int *)(this + 0x2e28);
|
|
local_24 = *(int *)(this + 0x50f0);
|
|
uVar9 = local_20;
|
|
}
|
|
local_58 = this + 0x2f7c;
|
|
iVar4 = *(int *)(this + 0x2f74) + *(int *)(this + uVar9 * 4 + 0x3020);
|
|
*(int *)(this + 0x310c) = iVar4;
|
|
iVar7 = local_24 * (iVar5 + -1) * 2;
|
|
*(uint *)(this + 0x3118) = iVar4 + iVar7 + (local_1c & 0xfffffffe);
|
|
iVar5 = *(int *)(this + 0x2f74) + *(int *)(this + uVar9 * 4 + 0x3024);
|
|
*(int *)(this + 0x3110) = iVar5;
|
|
*(uint *)(this + 0x311c) = iVar5 + iVar7 + (local_1c & 0xfffffffe);
|
|
*(int *)(this + 0x3124) = *(int *)local_58 + *(int *)(this + uVar9 * 4 + 0x30bc);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC DoSomething @ 0002814c
|
|
|
|
/* CFunctions::DoSomething(int, unsigned int) */
|
|
|
|
void __thiscall CFunctions::DoSomething(CFunctions *this,int param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
if ((*(int *)(this + 0xa4) != 0) && (*(int *)(this + 0x2d1c) != 0)) {
|
|
if (param_1 == 0) {
|
|
SelectCaliCurve(this);
|
|
if ((*(int *)(this + 0x2d1c) != 0) && (*(int *)(this + 0x2d20) != 0)) {
|
|
GenerateVolatileLens(this);
|
|
}
|
|
}
|
|
else {
|
|
if ((param_1 == 1) && (1 < param_2)) {
|
|
DAT_0006b8f4 = 0;
|
|
DAT_0006b8f8 = 0;
|
|
DAT_0006b900 = *(int *)(this + 0x2e28) * *(int *)(this + 0x50f0) * 2;
|
|
iVar3 = *(int *)(this + 0x50f0) * (*(int *)(this + 0x2e28) + -1);
|
|
DAT_0006b8fc = iVar3;
|
|
iVar1 = __udivsi3(param_2 + DAT_0006b900 + iVar3 + -2,param_2 - 1);
|
|
DAT_0006b904 = iVar1 + 7U & 0xfffffff8;
|
|
iVar1 = 0;
|
|
}
|
|
else {
|
|
iVar1 = DAT_0006b8f4;
|
|
iVar3 = DAT_0006b8fc;
|
|
if (param_1 < 1) goto LAB_000282a8;
|
|
}
|
|
uVar2 = 0;
|
|
if (iVar1 < iVar3) {
|
|
uVar2 = iVar3 - iVar1;
|
|
if ((int)DAT_0006b904 <= iVar3 - iVar1) {
|
|
uVar2 = DAT_0006b904;
|
|
}
|
|
iVar1 = iVar1 * 2;
|
|
InterpolateShort(this,(short *)(*(int *)(this + 0x310c) + iVar1),
|
|
(short *)(*(int *)(this + 0x3110) + iVar1),
|
|
(short *)(*(int *)(this + 0x3114) + iVar1),uVar2);
|
|
DAT_0006b8f4 = DAT_0006b8f4 + uVar2;
|
|
}
|
|
if (((int)uVar2 < (int)DAT_0006b904) && (DAT_0006b8f8 < DAT_0006b900)) {
|
|
uVar4 = DAT_0006b900 - DAT_0006b8f8;
|
|
if ((int)(DAT_0006b904 - uVar2) <= DAT_0006b900 - DAT_0006b8f8) {
|
|
uVar4 = DAT_0006b904 - uVar2;
|
|
}
|
|
iVar1 = DAT_0006b8f8 * 2;
|
|
InterpolateUShort(this,(ushort *)(*(int *)(this + 0x3118) + iVar1),
|
|
(ushort *)(*(int *)(this + 0x311c) + iVar1),
|
|
(ushort *)(*(int *)(this + 0x3120) + iVar1),uVar4);
|
|
DAT_0006b8f8 = DAT_0006b8f8 + uVar4;
|
|
if (DAT_0006b8f8 == DAT_0006b900) {
|
|
*(undefined4 *)(this + 0x2d24) = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
LAB_000282a8:
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GenerateVolatileLens @ 00028314
|
|
|
|
/* CFunctions::GenerateVolatileLens() */
|
|
|
|
void __thiscall CFunctions::GenerateVolatileLens(CFunctions *this)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
CFunctions *pCVar8;
|
|
undefined4 uVar9;
|
|
int iVar10;
|
|
int local_88;
|
|
undefined4 local_78;
|
|
int local_74;
|
|
int local_70 [11];
|
|
int local_44 [11];
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
if ((*(int *)(this + 0x2d1c) != 0) && (*(int *)(this + 0x2d20) != 0)) {
|
|
iVar1 = (*(int *)(this + 0x2e38) + *(int *)(this + 0x2e3c)) / 2;
|
|
uVar9 = *(undefined4 *)(this + 0x6c);
|
|
iVar2 = __aeabi_fcmpeq(uVar9,0);
|
|
if (iVar2 == 0) {
|
|
local_88 = 0;
|
|
iVar7 = *(int *)(this + 0x38);
|
|
*(undefined4 *)(this + 0x316c) = 10;
|
|
uVar3 = __floatsisf(iVar7 - iVar1);
|
|
uVar9 = __mulsf3(uVar9,uVar3);
|
|
uVar9 = __divsf3(uVar9,0x447a0000);
|
|
uVar9 = __addsf3(uVar9,0x3f800000);
|
|
local_78 = 0x3e4ccccd;
|
|
iVar2 = __aeabi_fcmplt();
|
|
if (iVar2 == 0) {
|
|
local_78 = uVar9;
|
|
}
|
|
uVar4 = *(uint *)(this + 0x5104);
|
|
iVar5 = *(int *)(this + 0x5100);
|
|
local_74 = 0xffff;
|
|
iVar10 = 0;
|
|
iVar2 = iVar10;
|
|
do {
|
|
local_44[iVar2] = iVar10;
|
|
uVar9 = __floatsisf(iVar10 - iVar7);
|
|
__mulsf3(local_78,uVar9);
|
|
iVar6 = __fixsfsi();
|
|
iVar6 = (iVar1 - iVar5) + iVar6 >> (uVar4 & 0xff);
|
|
if (iVar6 < 1) {
|
|
iVar6 = local_88;
|
|
}
|
|
if (0xfffe < iVar6) {
|
|
iVar6 = local_74;
|
|
}
|
|
local_70[iVar2] = iVar6;
|
|
iVar10 = iVar10 + 10000;
|
|
iVar2 = iVar2 + 1;
|
|
} while (iVar2 != 0xb);
|
|
pCVar8 = this + 0x3204;
|
|
iVar7 = -0x28;
|
|
iVar1 = local_44[0];
|
|
iVar2 = local_70[0];
|
|
do {
|
|
iVar6 = *(int *)((int)local_44 + iVar7);
|
|
*(int *)(this + iVar7 + 0x3198) = iVar6;
|
|
iVar5 = *(int *)((int)&local_18 + iVar7);
|
|
iVar10 = __udivsi3((iVar5 - iVar1) + ((uint)(iVar6 - iVar2) >> 1));
|
|
*(int *)pCVar8 = iVar10;
|
|
*(int *)(pCVar8 + 4) = iVar1 - iVar10 * iVar2;
|
|
pCVar8 = pCVar8 + 8;
|
|
iVar7 = iVar7 + 4;
|
|
iVar1 = iVar5;
|
|
iVar2 = iVar6;
|
|
} while (iVar7 != 0);
|
|
}
|
|
else {
|
|
*(undefined4 *)(this + 0x316c) = 1;
|
|
*(undefined4 *)(this + 0x3204) = *(undefined4 *)(this + 0x50fc);
|
|
*(int *)(this + 0x3208) = (*(int *)(this + 0x5100) - iVar1) + *(int *)(this + 0x38);
|
|
}
|
|
}
|
|
if (__stack_chk_guard != local_18) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC InterpolateShort @ 000284c0
|
|
|
|
/* CFunctions::InterpolateShort(short const*, short const*, short*, unsigned int) */
|
|
|
|
void __thiscall
|
|
CFunctions::InterpolateShort
|
|
(CFunctions *this,short *param_1,short *param_2,short *param_3,uint param_4)
|
|
|
|
{
|
|
bool bVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
iVar2 = *(int *)(this + 0x38);
|
|
if ((iVar2 < *(int *)(this + 0x2e38)) ||
|
|
(bVar1 = true, *(int *)(this + *(int *)(this + 0x2e2c) * 4 + 0x2e34) < iVar2)) {
|
|
bVar1 = false;
|
|
}
|
|
iVar2 = __divsi3((iVar2 - *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)) * 0x1000,
|
|
*(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e3c) -
|
|
*(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38));
|
|
if (iVar2 < -0x3ffe) {
|
|
iVar2 = -0x3fff;
|
|
}
|
|
if (0x3ffe < iVar2) {
|
|
iVar2 = 0x3fff;
|
|
}
|
|
if (bVar1) {
|
|
if (param_4 != 0) {
|
|
do {
|
|
*param_3 = (short)((uint)(iVar2 * ((int)*param_2 - (int)*param_1)) >> 0xc) + *param_1;
|
|
param_4 = param_4 - 1;
|
|
param_3 = param_3 + 1;
|
|
param_2 = param_2 + 1;
|
|
param_1 = param_1 + 1;
|
|
} while (param_4 != 0);
|
|
}
|
|
}
|
|
else if (param_4 != 0) {
|
|
do {
|
|
iVar3 = (iVar2 * ((int)*param_2 - (int)*param_1) >> 0xc) + (int)*param_1;
|
|
if (iVar3 < -0x7fff) {
|
|
iVar3 = -0x8000;
|
|
}
|
|
if (0x7ffe < iVar3) {
|
|
iVar3 = 0x7fff;
|
|
}
|
|
*param_3 = (short)iVar3;
|
|
param_4 = param_4 - 1;
|
|
param_3 = param_3 + 1;
|
|
param_2 = param_2 + 1;
|
|
param_1 = param_1 + 1;
|
|
} while (param_4 != 0);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC InterpolateUShort @ 000285c4
|
|
|
|
/* CFunctions::InterpolateUShort(unsigned short const*, unsigned short const*, unsigned short*,
|
|
unsigned int) */
|
|
|
|
void __thiscall
|
|
CFunctions::InterpolateUShort
|
|
(CFunctions *this,ushort *param_1,ushort *param_2,ushort *param_3,uint param_4)
|
|
|
|
{
|
|
bool bVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
iVar2 = *(int *)(this + 0x38);
|
|
if ((iVar2 < *(int *)(this + 0x2e38)) ||
|
|
(bVar1 = true, *(int *)(this + *(int *)(this + 0x2e2c) * 4 + 0x2e34) < iVar2)) {
|
|
bVar1 = false;
|
|
}
|
|
iVar2 = __divsi3((iVar2 - *(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38)) * 0x1000,
|
|
*(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e3c) -
|
|
*(int *)(this + *(int *)(this + 0x3108) * 4 + 0x2e38));
|
|
if (iVar2 < -0x3ffe) {
|
|
iVar2 = -0x3fff;
|
|
}
|
|
if (0x3ffe < iVar2) {
|
|
iVar2 = 0x3fff;
|
|
}
|
|
if (bVar1) {
|
|
for (; param_4 != 0; param_4 = param_4 - 1) {
|
|
*param_3 = (short)(iVar2 * ((uint)*param_2 - (uint)*param_1) >> 0xc) + *param_1;
|
|
param_3 = param_3 + 1;
|
|
param_2 = param_2 + 1;
|
|
param_1 = param_1 + 1;
|
|
}
|
|
}
|
|
else if (param_4 != 0) {
|
|
do {
|
|
iVar3 = ((int)(iVar2 * ((uint)*param_2 - (uint)*param_1)) >> 0xc) + (uint)*param_1;
|
|
if (iVar3 < 1) {
|
|
iVar3 = 0;
|
|
}
|
|
if (0xfffe < iVar3) {
|
|
iVar3 = 0xffff;
|
|
}
|
|
*param_3 = (ushort)iVar3;
|
|
param_4 = param_4 - 1;
|
|
param_3 = param_3 + 1;
|
|
param_2 = param_2 + 1;
|
|
param_1 = param_1 + 1;
|
|
} while (param_4 != 0);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Raw2Temperature @ 000286a4
|
|
|
|
/* CFunctions::Raw2Temperature(unsigned short const*) */
|
|
|
|
undefined4 __thiscall CFunctions::Raw2Temperature(CFunctions *this,ushort *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (*(int *)(this + 0x3808) != 1) {
|
|
iVar1 = CAccumulator::PushFrame((CAccumulator *)(this + 0x37a4),param_1);
|
|
if (iVar1 == 0) {
|
|
return 0;
|
|
}
|
|
param_1 = (ushort *)0x0;
|
|
if (*(int *)(this + 0x37c0) != 0) {
|
|
param_1 = *(ushort **)(this + 0x37ac);
|
|
}
|
|
}
|
|
Calibration(this,param_1);
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Calibration @ 000286e8
|
|
|
|
/* CFunctions::Calibration(unsigned short const*) */
|
|
|
|
void __thiscall CFunctions::Calibration(CFunctions *this,ushort *param_1)
|
|
|
|
{
|
|
if ((*(int *)(this + 0x2d1c) != 0) && (*(int *)(this + 0x2d24) != 0)) {
|
|
CalibrationMain_RTV(this,param_1);
|
|
BlindCompensation(this,*(ushort **)(this + 0xb4));
|
|
return;
|
|
}
|
|
ConvertResponse2Temperature(this,param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC PushFrame @ 00028720
|
|
|
|
/* CFunctions::PushFrame(unsigned short const*, SrcDataType, int, int, int) */
|
|
|
|
undefined4 __thiscall
|
|
CFunctions::PushFrame
|
|
(CFunctions *this,ushort *param_1,int param_3,undefined4 param_4,int param_5,int param_6)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
pthread_mutex_t *__mutex;
|
|
CFunctions *local_20;
|
|
|
|
__mutex = (pthread_mutex_t *)(this + 0xb0);
|
|
pthread_mutex_lock(__mutex);
|
|
iVar1 = GetTickCount();
|
|
if ((param_1 == (ushort *)0x0) || (*(int *)(this + 0xa4) == 0)) {
|
|
LAB_0002880c:
|
|
pthread_mutex_unlock(__mutex);
|
|
return 0;
|
|
}
|
|
if (param_3 == 0) {
|
|
if (*(int *)(this + 0xa8) == 0) goto LAB_0002880c;
|
|
*(undefined4 *)(this + 0x3868) = 0;
|
|
*(undefined4 *)(this + 0x3864) = 0;
|
|
*(undefined4 *)(this + 0x386c) = 0;
|
|
iVar3 = Raw2Temperature(this,param_1);
|
|
if (iVar3 == 0) goto LAB_00028816;
|
|
}
|
|
else {
|
|
*(undefined4 *)(this + 0x3868) = 0;
|
|
*(undefined4 *)(this + 0x3864) = 0;
|
|
*(undefined4 *)(this + 0x386c) = 0;
|
|
if (param_3 != 1) {
|
|
LAB_00028816:
|
|
pthread_mutex_unlock(__mutex);
|
|
return 0;
|
|
}
|
|
__aeabi_memcpy(*(undefined4 *)(this + 0xb4),param_1,*(int *)(this + 0x50f0) << 1);
|
|
}
|
|
local_20 = this + 0x3864;
|
|
if (*(uint *)(this + 0x70) != 0) {
|
|
Mirror(this,*(uint *)(this + 0x70));
|
|
}
|
|
uVar2 = 0;
|
|
if ((param_5 == 0) && (1 < *(uint *)(this + 0x380c))) {
|
|
uVar4 = *(uint *)(this + 0x34) >> (*(uint *)(this + 0x5104) & 0xff);
|
|
if (0xfffe < uVar4) {
|
|
uVar4 = 0xffff;
|
|
}
|
|
CSmoother::PushFrameAve((CSmoother *)(this + 0x37c4),*(ushort **)(this + 0xb4),uVar4);
|
|
uVar2 = 1;
|
|
}
|
|
*(undefined4 *)(this + 0x3860) = uVar2;
|
|
if (param_6 == 0) goto switchD_000287fe_default;
|
|
switch(*(undefined4 *)(this + 0x3814)) {
|
|
case 1:
|
|
FilterE2X(this);
|
|
goto switchD_000287fe_default;
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
FilterE2X(this);
|
|
break;
|
|
case 4:
|
|
FilterE4X(this);
|
|
break;
|
|
default:
|
|
goto switchD_000287fe_default;
|
|
}
|
|
FilterE4X(this);
|
|
switchD_000287fe_default:
|
|
TempRangeStat(this,*(ushort **)(this + 0xb4));
|
|
GrayEnlarge(this);
|
|
if (((*(int *)local_20 != 0) && (*(int *)(this + 0x28) != 0)) &&
|
|
((*(int *)(this + 0x24) == 0 || (*(int *)(this + 0xc) != 0)))) {
|
|
uVar4 = *(int *)(this + 0x28) << 3;
|
|
if (*(int *)(this + 0x58) == 0) {
|
|
FilterDetailEnhancement(this,uVar4);
|
|
}
|
|
else {
|
|
FilterDetailEnhancement_Simple(this,uVar4);
|
|
}
|
|
}
|
|
iVar3 = GetTickCount();
|
|
*(int *)(this + 0x3870) = iVar3 - iVar1;
|
|
CopyState(this);
|
|
*(undefined4 *)(this + 0xac) = 1;
|
|
pthread_mutex_unlock(__mutex);
|
|
return 3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Mirror @ 000288c4
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
/* CFunctions::Mirror(unsigned int) */
|
|
|
|
void __thiscall CFunctions::Mirror(CFunctions *this,uint param_1)
|
|
|
|
{
|
|
bool bVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
int iVar10;
|
|
int iVar11;
|
|
int iVar12;
|
|
uint uVar13;
|
|
undefined1 auStack_818 [2052];
|
|
|
|
iVar2 = __stack_chk_guard;
|
|
iVar9 = *(int *)(this + 0x37f0);
|
|
iVar11 = *(int *)(this + 0x37ec);
|
|
if ((*(int *)(this + 0x74) == 0xb4) || (*(int *)(this + 0x74) == 0)) {
|
|
uVar8 = param_1 & 1;
|
|
uVar6 = 2;
|
|
}
|
|
else {
|
|
uVar6 = 1;
|
|
uVar8 = param_1 >> 1 & 1;
|
|
}
|
|
if (((param_1 & uVar6) != 0) && (iVar7 = iVar9 / 2, 1 < iVar9)) {
|
|
iVar10 = iVar11 * (iVar9 + -1) * 2;
|
|
iVar3 = iVar11 * 2;
|
|
iVar12 = 0;
|
|
do {
|
|
iVar4 = *(int *)(this + 0xb4);
|
|
iVar5 = iVar4 + iVar12;
|
|
__aeabi_memcpy(auStack_818,iVar5,iVar3);
|
|
iVar4 = iVar4 + iVar10;
|
|
__aeabi_memcpy(iVar5,iVar4,iVar3);
|
|
__aeabi_memcpy(iVar4,auStack_818,iVar3);
|
|
iVar12 = iVar12 + iVar3;
|
|
iVar10 = iVar10 + iVar11 * -2;
|
|
iVar7 = iVar7 + -1;
|
|
} while (iVar7 != 0);
|
|
}
|
|
if ((uVar8 != 0) && (0 < iVar9)) {
|
|
iVar3 = iVar11 * (iVar9 + -1);
|
|
iVar7 = *(int *)(this + 0xb4) + iVar3 * 2;
|
|
uVar6 = iVar11 + ((uint)(iVar11 >> 0x1f) >> 0x1e);
|
|
iVar3 = *(int *)(this + 0xb4) + (iVar3 + (uVar6 & 0x7ffffffc)) * 2 + -4;
|
|
do {
|
|
if (6 < iVar11 + 3U) {
|
|
iVar10 = 0;
|
|
do {
|
|
uVar13 = *(uint *)(iVar3 + iVar10 * -4);
|
|
uVar8 = *(uint *)(iVar7 + iVar10 * 4);
|
|
*(uint *)(iVar3 + iVar10 * -4) = uVar8 >> 0x10 | uVar8 << 0x10;
|
|
*(uint *)(iVar7 + iVar10 * 4) = uVar13 >> 0x10 | uVar13 << 0x10;
|
|
iVar10 = iVar10 + 1;
|
|
} while ((int)uVar6 >> 2 != iVar10);
|
|
}
|
|
iVar7 = iVar7 + iVar11 * -2;
|
|
iVar3 = iVar3 + iVar11 * -2;
|
|
bVar1 = 1 < iVar9;
|
|
iVar9 = iVar9 + -1;
|
|
} while (bVar1);
|
|
}
|
|
if (__stack_chk_guard != iVar2) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ConvertDeltamC2InnerTemp @ 00028a20
|
|
|
|
/* CFunctions::ConvertDeltamC2InnerTemp(unsigned int) const */
|
|
|
|
uint __thiscall CFunctions::ConvertDeltamC2InnerTemp(CFunctions *this,uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = param_1 >> (*(uint *)(this + 0x5104) & 0xff);
|
|
if (0xfffe < uVar1) {
|
|
uVar1 = 0xffff;
|
|
}
|
|
return uVar1 & 0xffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FilterE2X @ 00028a3c
|
|
|
|
/* CFunctions::FilterE2X() */
|
|
|
|
void __thiscall CFunctions::FilterE2X(CFunctions *this)
|
|
|
|
{
|
|
ushort uVar1;
|
|
ushort *puVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
CFunctions *pCVar6;
|
|
int iVar7;
|
|
ushort *puVar8;
|
|
uint uVar9;
|
|
int iVar10;
|
|
int iVar11;
|
|
uint uVar12;
|
|
uint *puVar13;
|
|
uint *local_18;
|
|
|
|
uVar5 = *(uint *)(this + 0x37ec);
|
|
iVar10 = *(int *)(this + 0xb4) + uVar5 * *(int *)(this + 0x381c) * 2 + *(int *)(this + 0x3818) * 2
|
|
;
|
|
iVar11 = *(int *)(this + 0xbc);
|
|
pCVar6 = this + 0x37ec;
|
|
iVar7 = -1 - (*(uint *)(this + 0x37f0) >> 1);
|
|
do {
|
|
__aeabi_memcpy(iVar11,iVar10,uVar5 + 4 & 0xfffffffe);
|
|
uVar5 = *(uint *)pCVar6;
|
|
iVar10 = iVar10 + uVar5 * 2;
|
|
iVar11 = iVar11 + (uVar5 & 0xfffffffe) + 4;
|
|
iVar7 = iVar7 + 1;
|
|
} while (iVar7 != 0);
|
|
uVar3 = *(uint *)(this + 0x37f0) >> 1;
|
|
if (uVar3 != 0) {
|
|
puVar8 = *(ushort **)(this + 0xbc);
|
|
local_18 = *(uint **)(this + 0xb4);
|
|
while( true ) {
|
|
uVar12 = uVar5 >> 1;
|
|
if (uVar12 != 0) {
|
|
iVar11 = -uVar12;
|
|
puVar2 = puVar8 + uVar12;
|
|
uVar5 = (uint)*puVar8;
|
|
puVar13 = local_18;
|
|
do {
|
|
puVar8 = puVar8 + 1;
|
|
uVar1 = *puVar8;
|
|
*puVar13 = (uVar1 + uVar5) * 0x8000 & 0xffff0000 | uVar5;
|
|
puVar13 = puVar13 + 1;
|
|
iVar11 = iVar11 + 1;
|
|
uVar5 = (uint)uVar1;
|
|
} while (iVar11 != 0);
|
|
local_18 = local_18 + uVar12;
|
|
uVar5 = *(uint *)pCVar6;
|
|
puVar8 = puVar2;
|
|
}
|
|
uVar5 = uVar5 >> 1;
|
|
puVar2 = puVar8 + -uVar5;
|
|
iVar11 = -uVar5;
|
|
if (uVar5 != 0) {
|
|
uVar12 = (uint)puVar8[2];
|
|
uVar9 = (uint)*puVar2;
|
|
iVar7 = 0;
|
|
do {
|
|
uVar4 = uVar12 + uVar9;
|
|
uVar9 = (uint)*(ushort *)((int)puVar8 + -iVar7 + uVar5 * -2 + 2);
|
|
uVar12 = (uint)*(ushort *)((int)puVar8 + -iVar7 + 6);
|
|
*(uint *)((int)local_18 + iVar7 * -2) =
|
|
uVar4 >> 1 | (uVar4 + uVar9 + uVar12) * 0x4000 & 0xffff0000;
|
|
iVar11 = iVar11 + 1;
|
|
iVar7 = iVar7 + -2;
|
|
} while (iVar11 != 0);
|
|
local_18 = local_18 + uVar5;
|
|
puVar2 = puVar8;
|
|
}
|
|
uVar3 = uVar3 - 1;
|
|
if (uVar3 == 0) break;
|
|
uVar5 = *(uint *)pCVar6;
|
|
puVar8 = puVar2 + 2;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FilterE4X @ 00028ba0
|
|
|
|
/* CFunctions::FilterE4X() */
|
|
|
|
void __thiscall CFunctions::FilterE4X(CFunctions *this)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
CFunctions *pCVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
uint *puVar10;
|
|
ushort *puVar11;
|
|
uint uVar12;
|
|
ushort *puVar13;
|
|
ushort *puVar14;
|
|
int local_58;
|
|
int local_20;
|
|
uint *local_18;
|
|
|
|
uVar6 = *(uint *)(this + 0x37ec);
|
|
iVar9 = *(int *)(this + 0xb4) + uVar6 * *(int *)(this + 0x381c) * 2 + *(int *)(this + 0x3818) * 2;
|
|
iVar5 = *(int *)(this + 0xbc);
|
|
pCVar3 = this + 0x37ec;
|
|
uVar7 = ~(*(uint *)(this + 0x37f0) >> 2);
|
|
local_58 = 0;
|
|
do {
|
|
__aeabi_memcpy(iVar5,iVar9,(uVar6 >> 1 & 0x7ffffffe) + 4);
|
|
uVar6 = *(uint *)pCVar3;
|
|
iVar9 = iVar9 + uVar6 * 2;
|
|
iVar5 = iVar5 + (uVar6 >> 1 & 0x7ffffffe) + 4;
|
|
uVar7 = uVar7 + 1;
|
|
} while (uVar7 != 0);
|
|
uVar7 = *(uint *)(this + 0x37f0) >> 2;
|
|
if (uVar7 != 0) {
|
|
puVar11 = *(ushort **)(this + 0xbc);
|
|
local_18 = *(uint **)(this + 0xb4);
|
|
while( true ) {
|
|
uVar4 = uVar6 >> 2;
|
|
if (uVar4 != 0) {
|
|
iVar5 = -uVar4;
|
|
uVar6 = (uint)*puVar11;
|
|
puVar10 = local_18;
|
|
puVar13 = puVar11;
|
|
do {
|
|
puVar13 = puVar13 + 1;
|
|
uVar8 = (uint)*puVar13;
|
|
*puVar10 = (uVar6 * 3 + uVar8) * 0x4000 & 0xffff0000 | uVar6;
|
|
puVar10[1] = uVar8 + uVar6 >> 1 | (uVar8 * 3 + uVar6) * 0x4000 & 0xffff0000;
|
|
puVar10 = puVar10 + 2;
|
|
iVar5 = iVar5 + 1;
|
|
uVar6 = uVar8;
|
|
} while (iVar5 != 0);
|
|
local_18 = local_18 + uVar4 * 2;
|
|
puVar11 = puVar11 + uVar4;
|
|
uVar6 = *(uint *)pCVar3;
|
|
}
|
|
uVar4 = uVar6 >> 2;
|
|
puVar13 = puVar11 + -uVar4;
|
|
local_20 = -uVar4;
|
|
if (uVar4 != 0) {
|
|
iVar5 = local_58;
|
|
uVar6 = (uint)*puVar13;
|
|
uVar8 = (uint)puVar11[2];
|
|
do {
|
|
uVar12 = (uint)*(ushort *)((int)puVar11 + -iVar5 + 6);
|
|
uVar1 = (uint)*(ushort *)((int)puVar11 + -iVar5 + uVar4 * -2 + 2);
|
|
local_18[-iVar5] =
|
|
uVar6 * 3 + uVar8 >> 2 |
|
|
(uVar6 * 9 + uVar12 + (uVar1 + uVar8) * 3) * 0x1000 & 0xffff0000;
|
|
local_18[1 - iVar5] =
|
|
(uVar1 + uVar6) * 3 + uVar8 + uVar12 >> 3 |
|
|
(uVar1 * 9 + uVar8 + (uVar12 + uVar6) * 3) * 0x1000 & 0xffff0000;
|
|
local_20 = local_20 + 1;
|
|
iVar5 = iVar5 + -2;
|
|
uVar6 = uVar1;
|
|
uVar8 = uVar12;
|
|
} while (local_20 != 0);
|
|
local_18 = local_18 + uVar4 * 2;
|
|
uVar6 = *(uint *)pCVar3;
|
|
puVar13 = puVar11;
|
|
}
|
|
uVar4 = uVar6 >> 2;
|
|
puVar14 = puVar13 + -uVar4;
|
|
iVar5 = -uVar4;
|
|
if (uVar4 != 0) {
|
|
iVar9 = 0;
|
|
uVar6 = (uint)puVar13[2];
|
|
uVar8 = (uint)*puVar14;
|
|
do {
|
|
uVar1 = uVar6 + uVar8;
|
|
uVar12 = (uint)*(ushort *)((int)puVar13 + -iVar9 + uVar4 * -2 + 2);
|
|
uVar2 = (uint)*(ushort *)((int)puVar13 + -iVar9 + 6);
|
|
local_18[-iVar9] = uVar1 >> 1 | (uVar1 * 3 + uVar12 + uVar2) * 0x2000 & 0xffff0000;
|
|
local_18[1 - iVar9] =
|
|
uVar12 + uVar8 + uVar6 + uVar2 >> 2 |
|
|
(uVar1 + (uVar2 + uVar12) * 3) * 0x2000 & 0xffff0000;
|
|
iVar5 = iVar5 + 1;
|
|
iVar9 = iVar9 + -2;
|
|
uVar6 = uVar2;
|
|
uVar8 = uVar12;
|
|
} while (iVar5 != 0);
|
|
local_18 = local_18 + uVar4 * 2;
|
|
uVar6 = *(uint *)pCVar3;
|
|
puVar14 = puVar13;
|
|
}
|
|
uVar6 = uVar6 >> 2;
|
|
puVar11 = puVar14 + -uVar6;
|
|
local_20 = -uVar6;
|
|
if (uVar6 != 0) {
|
|
iVar5 = 0;
|
|
uVar4 = (uint)*puVar11;
|
|
uVar8 = (uint)puVar14[2];
|
|
do {
|
|
uVar1 = (uint)*(ushort *)((int)puVar14 + -iVar5 + uVar6 * -2 + 2);
|
|
uVar12 = (uint)*(ushort *)((int)puVar14 + -iVar5 + 6);
|
|
local_18[-iVar5] =
|
|
uVar8 * 3 + uVar4 >> 2 |
|
|
(uVar8 * 9 + uVar1 + (uVar12 + uVar4) * 3) * 0x1000 & 0xffff0000;
|
|
local_18[1 - iVar5] =
|
|
((uVar8 + uVar1) * 3 + uVar4 + uVar12 * 9) * 0x1000 & 0xffff0000 |
|
|
uVar1 + uVar4 + (uVar12 + uVar8) * 3 >> 3;
|
|
local_20 = local_20 + 1;
|
|
iVar5 = iVar5 + -2;
|
|
uVar4 = uVar1;
|
|
uVar8 = uVar12;
|
|
} while (local_20 != 0);
|
|
local_18 = local_18 + uVar6 * 2;
|
|
puVar11 = puVar14;
|
|
}
|
|
uVar7 = uVar7 - 1;
|
|
if (uVar7 == 0) break;
|
|
uVar6 = *(uint *)pCVar3;
|
|
puVar11 = puVar11 + 2;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC TempRangeStat @ 00028eec
|
|
|
|
/* CFunctions::TempRangeStat(unsigned short const*) */
|
|
|
|
void __thiscall CFunctions::TempRangeStat(CFunctions *this,ushort *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
ushort *puVar9;
|
|
bool bVar10;
|
|
int local_34;
|
|
uint local_28;
|
|
uint local_24;
|
|
int local_20;
|
|
uint local_1c;
|
|
int local_18;
|
|
|
|
uVar4 = *(uint *)(this + 0x50f0);
|
|
local_24 = (uint)*param_1;
|
|
local_34 = 0;
|
|
local_28 = local_24;
|
|
if (uVar4 == 0) {
|
|
iVar6 = 0;
|
|
local_1c = 0;
|
|
local_18 = 0;
|
|
}
|
|
else {
|
|
uVar7 = 1;
|
|
local_1c = 0;
|
|
local_18 = 0;
|
|
local_20 = 0;
|
|
local_34 = 0;
|
|
uVar8 = local_24;
|
|
puVar9 = param_1 + 1;
|
|
while( true ) {
|
|
bVar10 = CARRY4(local_1c,uVar8);
|
|
local_1c = local_1c + uVar8;
|
|
local_18 = local_18 + (uint)bVar10;
|
|
iVar6 = local_20;
|
|
iVar1 = uVar7 - 1;
|
|
uVar2 = local_28;
|
|
uVar3 = uVar8;
|
|
if ((uVar8 <= local_24) &&
|
|
(iVar6 = uVar7 - 1, iVar1 = local_34, uVar2 = uVar8, uVar3 = local_24, local_28 <= uVar8))
|
|
{
|
|
iVar6 = local_20;
|
|
uVar2 = local_28;
|
|
}
|
|
local_24 = uVar3;
|
|
local_28 = uVar2;
|
|
local_34 = iVar1;
|
|
if (uVar4 <= uVar7) break;
|
|
uVar7 = uVar7 + 1;
|
|
uVar8 = (uint)*puVar9;
|
|
puVar9 = puVar9 + 1;
|
|
local_20 = iVar6;
|
|
}
|
|
}
|
|
*(int *)(this + 0x3848) = local_34;
|
|
*(int *)(this + 0x384c) = iVar6;
|
|
*(uint *)(this + 0x383c) = local_28;
|
|
*(uint *)(this + 0x3838) = local_24;
|
|
uVar5 = __aeabi_ldivmod(local_1c,local_18,uVar4,0);
|
|
*(undefined4 *)(this + 0x3840) = uVar5;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GrayEnlarge @ 00028fbc
|
|
|
|
/* CFunctions::GrayEnlarge() */
|
|
|
|
void __thiscall CFunctions::GrayEnlarge(CFunctions *this)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
|
|
uVar4 = *(uint *)(this + 0x3838);
|
|
uVar5 = *(uint *)(this + 0x383c);
|
|
if (uVar5 == uVar4) {
|
|
*(uint *)(this + 0x3854) = uVar5;
|
|
*(uint *)(this + 0x3858) = uVar5;
|
|
__aeabi_memset4(this + 0x4074,0x400,0x80);
|
|
__aeabi_memset(*(undefined4 *)(this + 0xc0),*(undefined4 *)(this + 0x50f0),0x80);
|
|
__aeabi_memclr4(this + 0x3874,0x400);
|
|
*(undefined4 *)(this + 0x3a74) = *(undefined4 *)(this + 0x50f0);
|
|
__aeabi_memset(*(undefined4 *)(this + 200),*(undefined4 *)(this + 0x50f8),0x80);
|
|
*(undefined4 *)(this + 0x3864) = 1;
|
|
return;
|
|
}
|
|
if (*(int *)(this + 0xc) == 0) {
|
|
iVar1 = 0x3840;
|
|
if (*(int *)(this + 0x5c) != 0) {
|
|
SearchSeparateLine(this);
|
|
iVar1 = 0x447c;
|
|
uVar4 = *(uint *)(this + 0x3838);
|
|
uVar5 = *(uint *)(this + 0x383c);
|
|
}
|
|
iVar1 = *(int *)(this + iVar1);
|
|
uVar2 = CalContrastOffsetedAutoEnlargeRange(this);
|
|
uVar3 = iVar1 - (uVar2 >> 1);
|
|
if (uVar5 <= uVar3) {
|
|
uVar3 = uVar5;
|
|
}
|
|
*(uint *)(this + 0x3858) = uVar3;
|
|
uVar5 = (uVar2 >> 1) + iVar1;
|
|
if (uVar5 <= uVar4) {
|
|
uVar5 = uVar4;
|
|
}
|
|
*(uint *)(this + 0x3854) = uVar5;
|
|
if ((int)uVar3 < 0) {
|
|
*(undefined4 *)(this + 0x3858) = 0;
|
|
}
|
|
if (0xffff < (int)uVar5) {
|
|
*(undefined4 *)(this + 0x3854) = 0xffff;
|
|
}
|
|
HistDeRedundance(this);
|
|
if (*(int *)(this + 0x24) != 0) {
|
|
IsothermalPalette(this);
|
|
*(undefined4 *)(this + 0x4474) = 1;
|
|
goto LAB_000290e4;
|
|
}
|
|
if (*(int *)(this + 0x5108) == 0xb) {
|
|
DynamicRedPalette(this);
|
|
goto LAB_000290e4;
|
|
}
|
|
}
|
|
else {
|
|
SubSectionEnlarge(this);
|
|
}
|
|
if (*(int *)(this + 0x4474) != 0) {
|
|
__aeabi_memcpy(this + 0x24f4,this + 0x20cc,0x400);
|
|
__aeabi_memcpy(this + 0x291c,this + 0x20cc,0x400);
|
|
*(undefined4 *)(this + 0x4474) = 0;
|
|
}
|
|
LAB_000290e4:
|
|
MapTemperature((int)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FilterDetailEnhancement_Simple @ 00029134
|
|
|
|
/* CFunctions::FilterDetailEnhancement_Simple(unsigned int) */
|
|
|
|
void __thiscall CFunctions::FilterDetailEnhancement_Simple(CFunctions *this,uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
CFunctions *pCVar2;
|
|
CFunctions *pCVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
byte *pbVar6;
|
|
CFunctions *pCVar7;
|
|
ushort *puVar8;
|
|
int *piVar9;
|
|
int iVar10;
|
|
uint local_20;
|
|
|
|
if (param_1 != 0) {
|
|
uVar1 = (uint)(*(int *)(this + 0x20) * 1000) >> (*(uint *)(this + 0x5104) & 0xff);
|
|
if (0xfffe < uVar1) {
|
|
uVar1 = 0xffff;
|
|
}
|
|
uVar1 = param_1 * uVar1 * 2 >> 8;
|
|
pCVar2 = this + 0x37ec;
|
|
pCVar3 = this + 0x37f0;
|
|
pCVar7 = this + 0xc4;
|
|
local_20 = 0;
|
|
do {
|
|
iVar4 = *(int *)pCVar2;
|
|
if (iVar4 != 6) {
|
|
iVar10 = 6 - iVar4;
|
|
puVar8 = (ushort *)(*(int *)(this + 0xb4) + iVar4 * local_20 * 2);
|
|
piVar9 = (int *)(*(int *)pCVar7 + iVar4 * (local_20 + 3) * 4 + 0xc);
|
|
do {
|
|
LocalMap7x7_Simple(this,piVar9,puVar8,uVar1);
|
|
iVar10 = iVar10 + 1;
|
|
puVar8 = puVar8 + 1;
|
|
piVar9 = piVar9 + 1;
|
|
} while (iVar10 != 0);
|
|
}
|
|
local_20 = local_20 + 2;
|
|
iVar4 = *(int *)pCVar3;
|
|
} while (local_20 <= iVar4 - 7U);
|
|
iVar10 = 7;
|
|
if (iVar4 != 7) {
|
|
uVar5 = 1;
|
|
do {
|
|
iVar10 = *(int *)pCVar2;
|
|
if (iVar10 != 6) {
|
|
iVar4 = 6 - iVar10;
|
|
puVar8 = (ushort *)(*(int *)(this + 0xb4) + iVar10 * uVar5 * 2);
|
|
piVar9 = (int *)(*(int *)pCVar7 + iVar10 * (uVar5 + 3) * 4 + 0xc);
|
|
do {
|
|
LocalMap7x7_Simple(this,piVar9,puVar8,uVar1);
|
|
iVar4 = iVar4 + 1;
|
|
puVar8 = puVar8 + 1;
|
|
piVar9 = piVar9 + 1;
|
|
} while (iVar4 != 0);
|
|
iVar4 = *(int *)pCVar3;
|
|
}
|
|
uVar5 = uVar5 + 2;
|
|
} while (uVar5 <= iVar4 - 7U);
|
|
iVar10 = iVar4;
|
|
if (iVar4 - 3U < 4) {
|
|
return;
|
|
}
|
|
}
|
|
uVar1 = 3;
|
|
do {
|
|
iVar4 = *(int *)pCVar2;
|
|
if (iVar4 != 6) {
|
|
iVar10 = 6 - iVar4;
|
|
piVar9 = (int *)(*(int *)pCVar7 + iVar4 * uVar1 * 4 + 0xc);
|
|
pbVar6 = (byte *)(*(int *)(this + 0xc0) + iVar4 * uVar1 + 3);
|
|
do {
|
|
iVar4 = *piVar9;
|
|
piVar9 = piVar9 + 1;
|
|
iVar4 = ((int)(param_1 * iVar4 + ((uint)((int)(param_1 * iVar4) >> 0x1f) >> 0x11)) >> 0xf)
|
|
+ (uint)*pbVar6;
|
|
if (iVar4 < 1) {
|
|
iVar4 = 0;
|
|
}
|
|
if (0xfe < iVar4) {
|
|
iVar4 = 0xff;
|
|
}
|
|
*pbVar6 = (byte)iVar4;
|
|
iVar10 = iVar10 + 1;
|
|
pbVar6 = pbVar6 + 1;
|
|
} while (iVar10 != 0);
|
|
iVar10 = *(int *)pCVar3;
|
|
}
|
|
uVar1 = uVar1 + 1;
|
|
} while (uVar1 < iVar10 - 3U);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FilterDetailEnhancement @ 000292a0
|
|
|
|
/* CFunctions::FilterDetailEnhancement(unsigned int) */
|
|
|
|
void __thiscall CFunctions::FilterDetailEnhancement(CFunctions *this,uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
CFunctions *pCVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
int *piVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
int iVar10;
|
|
uint local_34;
|
|
int local_30;
|
|
uint local_24;
|
|
int local_20;
|
|
|
|
if (param_1 != 0) {
|
|
__aeabi_memclr4(*(undefined4 *)(this + 0xc4),*(int *)(this + 0x50f0) << 2);
|
|
uVar1 = (uint)(*(int *)(this + 0x20) * 1000) >> (*(uint *)(this + 0x5104) & 0xff);
|
|
if (0xfffe < uVar1) {
|
|
uVar1 = 0xffff;
|
|
}
|
|
pCVar3 = this + 0x37ec;
|
|
uVar4 = *(uint *)(this + 0x37f0);
|
|
uVar8 = 6;
|
|
if (uVar4 != 6) {
|
|
iVar9 = 0;
|
|
local_30 = 0;
|
|
local_34 = 0;
|
|
do {
|
|
iVar5 = *(int *)pCVar3;
|
|
if (iVar5 != 6) {
|
|
iVar7 = iVar5 * iVar9;
|
|
iVar10 = iVar5 * local_30;
|
|
iVar5 = 6 - iVar5;
|
|
do {
|
|
LocalMap7x7(this,(int *)(*(int *)(this + 0xc4) + iVar10),
|
|
(ushort *)(*(int *)(this + 0xb4) + iVar7),param_1 * uVar1 * 2 >> 8);
|
|
iVar7 = iVar7 + 2;
|
|
iVar10 = iVar10 + 4;
|
|
iVar5 = iVar5 + 1;
|
|
} while (iVar5 != 0);
|
|
uVar4 = *(uint *)(this + 0x37f0);
|
|
}
|
|
iVar9 = iVar9 + 2;
|
|
local_30 = local_30 + 4;
|
|
local_34 = local_34 + 1;
|
|
} while (local_34 < uVar4 - 6);
|
|
uVar8 = uVar4;
|
|
if (uVar4 == 0) {
|
|
return;
|
|
}
|
|
}
|
|
local_20 = *(int *)(this + 0xc0);
|
|
piVar6 = *(int **)(this + 0xc4);
|
|
uVar1 = 0;
|
|
do {
|
|
if (uVar1 < 6) {
|
|
local_24 = (uVar1 >> 1) + 1;
|
|
}
|
|
else {
|
|
local_24 = 4;
|
|
if (uVar8 < uVar1 + 7) {
|
|
local_24 = (1 - uVar1) + uVar8 >> 1;
|
|
}
|
|
}
|
|
uVar4 = *(uint *)pCVar3;
|
|
if (uVar4 != 0) {
|
|
uVar8 = 0;
|
|
iVar9 = 1;
|
|
do {
|
|
if (uVar8 < 6) {
|
|
uVar2 = (uVar8 >> 1) + 1;
|
|
}
|
|
else {
|
|
uVar2 = 4;
|
|
if (uVar4 < uVar8 + 7) {
|
|
uVar2 = uVar4 + iVar9 >> 1;
|
|
}
|
|
}
|
|
iVar5 = 0x80000;
|
|
if (local_24 * uVar2 != 0x10) {
|
|
iVar5 = local_24 * uVar2 * 0x8000;
|
|
}
|
|
iVar7 = *piVar6;
|
|
piVar6 = piVar6 + 1;
|
|
iVar5 = __divsi3(param_1 * iVar7,iVar5);
|
|
iVar5 = iVar5 + (uint)*(byte *)(local_20 + uVar8);
|
|
if (iVar5 < 1) {
|
|
iVar5 = 0;
|
|
}
|
|
if (0xfe < iVar5) {
|
|
iVar5 = 0xff;
|
|
}
|
|
*(byte *)(local_20 + uVar8) = (byte)iVar5;
|
|
iVar9 = iVar9 + -1;
|
|
uVar8 = uVar8 + 1;
|
|
uVar4 = *(uint *)pCVar3;
|
|
} while (uVar8 < uVar4);
|
|
local_20 = local_20 + uVar8;
|
|
uVar8 = *(uint *)(this + 0x37f0);
|
|
}
|
|
uVar1 = uVar1 + 1;
|
|
} while (uVar1 < uVar8);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC CopyState @ 00029418
|
|
|
|
/* CFunctions::CopyState() */
|
|
|
|
void __thiscall CFunctions::CopyState(CFunctions *this)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
float extraout_s0;
|
|
float extraout_s0_00;
|
|
float extraout_s0_01;
|
|
|
|
__aeabi_memcpy4(this + 0x4488,this + 0x3820,0xc68);
|
|
*(uint *)(this + 0x44c4) = (uint)*(ushort *)(this + 0x385c) << (*(uint *)(this + 0x5104) & 0xff);
|
|
*(uint *)(this + 0x44ac) = (uint)*(ushort *)(this + 0x3844) << (*(uint *)(this + 0x5104) & 0xff);
|
|
uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3840),
|
|
(*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1));
|
|
*(undefined4 *)(this + 0x44a8) = uVar1;
|
|
uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3854),
|
|
(*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1));
|
|
*(undefined4 *)(this + 0x44bc) = uVar1;
|
|
uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3838),*(uint *)(this + 0x44b0));
|
|
*(undefined4 *)(this + 0x44a0) = uVar1;
|
|
uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x3858),
|
|
(*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1));
|
|
*(undefined4 *)(this + 0x44c0) = uVar1;
|
|
uVar1 = ReviseTemperature(this,*(ushort *)(this + 0x383c),*(uint *)(this + 0x44b4));
|
|
*(undefined4 *)(this + 0x44a4) = uVar1;
|
|
if (*(int *)(this + 0x50) != 0) {
|
|
uVar1 = CorrectTemperature((int)this,extraout_s0,*(uint *)(this + 0x44a8));
|
|
*(undefined4 *)(this + 0x44a8) = uVar1;
|
|
uVar1 = CorrectTemperature((int)this,extraout_s0_00,*(uint *)(this + 0x44a4));
|
|
*(undefined4 *)(this + 0x44a4) = uVar1;
|
|
uVar1 = CorrectTemperature((int)this,extraout_s0_01,*(uint *)(this + 0x44a0));
|
|
*(undefined4 *)(this + 0x44a0) = uVar1;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ConvertDeltaInnerTemp2mC @ 0002954c
|
|
|
|
/* CFunctions::ConvertDeltaInnerTemp2mC(unsigned short) const */
|
|
|
|
int __thiscall CFunctions::ConvertDeltaInnerTemp2mC(CFunctions *this,ushort param_1)
|
|
|
|
{
|
|
return (uint)param_1 << (*(uint *)(this + 0x5104) & 0xff);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ReviseTemperature @ 0002955c
|
|
|
|
/* CFunctions::ReviseTemperature(unsigned short, unsigned int) */
|
|
|
|
int __thiscall CFunctions::ReviseTemperature(CFunctions *this,ushort param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
undefined4 uVar6;
|
|
CFunctions *this_00;
|
|
int iVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
CFunctions *pCVar10;
|
|
int iVar11;
|
|
uint uVar12;
|
|
int iVar13;
|
|
int iVar14;
|
|
uint uVar15;
|
|
undefined4 uVar16;
|
|
float __x;
|
|
undefined8 uVar17;
|
|
int local_28;
|
|
|
|
uVar15 = (uint)param_1;
|
|
if (*(int *)(this + 0x3128) == 0) {
|
|
iVar7 = (uVar15 << (*(uint *)(this + 0x5104) & 0xff)) + *(int *)(this + 0x5100);
|
|
}
|
|
else {
|
|
uVar1 = 0;
|
|
if (*(uint *)(this + 0x68) < *(uint *)(this + 0x312c)) {
|
|
uVar1 = *(uint *)(this + 0x68);
|
|
}
|
|
uVar16 = *(undefined4 *)(this + uVar1 * 0x21c + 0x3334);
|
|
iVar2 = __aeabi_fcmpgt(uVar16,0x3c23d70a);
|
|
iVar3 = __aeabi_fcmplt(uVar16,0x3f7d70a4);
|
|
local_28 = 0x111;
|
|
if (iVar2 != 0 && iVar3 != 0) {
|
|
iVar8 = *(int *)(this + 0x5100);
|
|
uVar4 = *(uint *)(this + 0x5104);
|
|
iVar13 = (uVar15 << (uVar4 & 0xff)) + iVar8;
|
|
iVar9 = iVar13 + 50000;
|
|
iVar7 = 0;
|
|
if (-0xe350 < iVar13) {
|
|
iVar7 = 0x111;
|
|
if (iVar13 < 0x217cb0) {
|
|
iVar7 = (int)(iVar9 + ((uint)(iVar9 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
iVar14 = *(int *)(T2E + iVar7 * 4);
|
|
iVar9 = (*(int *)(T2E + iVar7 * 4 + 4) - iVar14) * (iVar9 + iVar7 * -0x2000);
|
|
iVar11 = *(int *)(this + 0x40);
|
|
iVar13 = iVar11 + 50000;
|
|
iVar7 = 0;
|
|
if (-0xe350 < iVar11) {
|
|
iVar7 = 0x111;
|
|
if (iVar11 < 0x217cb0) {
|
|
iVar7 = (int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
iVar13 = (*(int *)(T2E + iVar7 * 4 + 4) - *(int *)(T2E + iVar7 * 4)) *
|
|
(iVar13 + iVar7 * -0x2000);
|
|
uVar5 = __floatsisf(((int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd) +
|
|
*(int *)(T2E + iVar7 * 4));
|
|
uVar6 = __subsf3(0x3f800000,uVar16);
|
|
uVar5 = __mulsf3(uVar6,uVar5);
|
|
uVar6 = __floatsisf(((int)(iVar9 + ((uint)(iVar9 >> 0x1f) >> 0x13)) >> 0xd) + iVar14);
|
|
uVar5 = __subsf3(uVar6,uVar5);
|
|
__divsf3(uVar5,uVar16);
|
|
this_00 = (CFunctions *)__fixsfsi();
|
|
pCVar10 = (CFunctions *)T2E._0_4_;
|
|
if ((int)T2E._0_4_ <= (int)this_00) {
|
|
pCVar10 = this_00;
|
|
}
|
|
iVar7 = Energe2Temp(this_00,(int)pCVar10);
|
|
uVar15 = iVar7 - iVar8 >> (uVar4 & 0xff);
|
|
}
|
|
uVar4 = 0;
|
|
if (*(int *)(this + uVar1 * 0x21c + 0x316c) != 1) {
|
|
uVar4 = 0;
|
|
do {
|
|
if ((int)uVar15 <= *(int *)(this + uVar4 * 4 + uVar1 * 0x21c + 0x3170)) break;
|
|
uVar4 = uVar4 + 1;
|
|
} while (uVar4 < *(int *)(this + uVar1 * 0x21c + 0x316c) - 1U);
|
|
}
|
|
iVar7 = uVar1 * 0x21c + 0x3204;
|
|
uVar17 = __muldi3(*(int *)(this + uVar4 * 8 + iVar7),*(int *)(this + uVar4 * 8 + iVar7) >> 0x1f,
|
|
uVar15,(int)uVar15 >> 0x1f);
|
|
iVar8 = (int)((ulonglong)uVar17 >> 0x20);
|
|
uVar12 = *(uint *)(this + uVar1 * 0x21c + 0x3160);
|
|
uVar15 = iVar8 >> (uVar12 - 0x20 & 0xff);
|
|
if ((int)(uVar12 - 0x20) < 0) {
|
|
uVar15 = (uint)uVar17 >> (uVar12 & 0xff) | iVar8 << (0x20 - uVar12 & 0xff);
|
|
}
|
|
iVar7 = *(int *)(this + (uVar4 * 8 | 4) + iVar7) + uVar15;
|
|
iVar8 = 0;
|
|
if (iVar2 == 0 || iVar3 == 0) {
|
|
iVar3 = *(int *)(this + 0x3c);
|
|
iVar2 = 0;
|
|
if (-0xe350 < iVar3) {
|
|
iVar2 = 0x111;
|
|
if (iVar3 < 0x217cb0) {
|
|
iVar2 = (int)(iVar3 + 50000 + ((uint)(iVar3 + 50000 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
iVar2 = (*(int *)(T2E + iVar2 * 4 + 4) - *(int *)(T2E + iVar2 * 4)) *
|
|
(((*(int *)(this + uVar1 * 0x21c + 0x3168) - *(int *)(this + uVar1 * 0x21c + 0x3164))
|
|
+ *(int *)(this + 0x38)) - iVar3);
|
|
iVar8 = (int)(iVar2 + ((uint)(iVar2 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
iVar2 = __aeabi_fcmpeq(*(undefined4 *)(this + uVar1 * 0x21c + 0x3344));
|
|
if (iVar2 == 0) {
|
|
uVar15 = *(uint *)(this + 0x37ec);
|
|
iVar2 = __udivsi3(param_2,uVar15);
|
|
iVar3 = iVar2 - (*(uint *)(this + 0x37f0) >> 1);
|
|
iVar2 = (param_2 - uVar15 * iVar2) - (uVar15 >> 1);
|
|
__x = (float)__floatsisf(iVar2 * iVar2 + iVar3 * iVar3);
|
|
sqrtf(__x);
|
|
uVar16 = __mulsf3();
|
|
iVar3 = iVar7 + 50000;
|
|
iVar2 = 0;
|
|
if (-0xe350 < iVar7) {
|
|
iVar2 = 0x111;
|
|
if (iVar7 < 0x217cb0) {
|
|
iVar2 = (int)(iVar3 + ((uint)(iVar3 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
iVar9 = (*(int *)(T2E + iVar2 * 4 + 4) - *(int *)(T2E + iVar2 * 4)) *
|
|
(iVar3 + iVar2 * -0x2000);
|
|
iVar11 = *(int *)(this + 0x40);
|
|
iVar13 = iVar11 + 50000;
|
|
iVar3 = 0;
|
|
if (-0xe350 < iVar11) {
|
|
iVar3 = 0x111;
|
|
if (iVar11 < 0x217cb0) {
|
|
iVar3 = (int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
iVar13 = (*(int *)(T2E + iVar3 * 4 + 4) - *(int *)(T2E + iVar3 * 4)) *
|
|
(iVar13 + iVar3 * -0x2000);
|
|
uVar5 = __floatsisf(((((int)(iVar9 + ((uint)(iVar9 >> 0x1f) >> 0x13)) >> 0xd) +
|
|
*(int *)(T2E + iVar2 * 4)) - *(int *)(T2E + iVar3 * 4)) -
|
|
((int)(iVar13 + ((uint)(iVar13 >> 0x1f) >> 0x13)) >> 0xd));
|
|
__mulsf3(uVar16,uVar5);
|
|
iVar2 = __fixsfsi();
|
|
iVar8 = iVar8 + iVar2;
|
|
}
|
|
iVar2 = 0;
|
|
if ((-0xe350 < iVar7) && (iVar2 = local_28, iVar7 < 0x217cb0)) {
|
|
iVar2 = (int)(iVar7 + 50000 + ((uint)(iVar7 + 50000 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
iVar7 = (*(int *)(E2TAccQ10 + iVar2 * 4) * -iVar8 >> 10) + iVar7;
|
|
}
|
|
return iVar7;
|
|
}
|
|
|
|
|
|
|
|
### FUNC CorrectTemperature @ 000298f0
|
|
|
|
/* CFunctions::CorrectTemperature(int, float, unsigned int) const */
|
|
|
|
uint CFunctions::CorrectTemperature(int param_1,float param_2,uint param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
CFunctions *this;
|
|
uint uVar5;
|
|
undefined4 *puVar6;
|
|
int iVar7;
|
|
undefined4 in_r2;
|
|
int iVar8;
|
|
undefined4 uVar9;
|
|
int local_20;
|
|
|
|
uVar9 = *(undefined4 *)(param_1 + 0x9c);
|
|
iVar1 = __aeabi_fcmple(uVar9,0);
|
|
if ((iVar1 == 0) && (iVar1 = __aeabi_fcmpgt(), iVar1 == 0)) {
|
|
local_20 = 0;
|
|
iVar1 = __aeabi_fcmple();
|
|
if ((iVar1 == 0) && (iVar1 = __aeabi_fcmpgt(uVar9,0x3f800000), iVar1 == 0)) {
|
|
iVar2 = param_3 + 50000;
|
|
iVar1 = 0;
|
|
if (-0xe350 < (int)param_3) {
|
|
iVar1 = 0x111;
|
|
if ((int)param_3 < 0x217cb0) {
|
|
iVar1 = (int)(iVar2 + ((uint)(iVar2 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
iVar8 = *(int *)(T2E + iVar1 * 4);
|
|
iVar1 = (*(int *)(T2E + iVar1 * 4 + 4) - iVar8) * (iVar2 + iVar1 * -0x2000);
|
|
__mulsf3(*(undefined4 *)(param_1 + 0x80),0x447a0000);
|
|
iVar2 = __fixsfsi();
|
|
iVar7 = iVar2 + 50000;
|
|
if (-0xe350 < iVar2) {
|
|
local_20 = 0x111;
|
|
if (iVar2 < 0x217cb0) {
|
|
local_20 = (int)(iVar7 + ((uint)(iVar7 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
iVar2 = (*(int *)(T2E + local_20 * 4 + 4) - *(int *)(T2E + local_20 * 4)) *
|
|
(iVar7 + local_20 * -0x2000);
|
|
uVar3 = __floatsisf(((int)(iVar2 + ((uint)(iVar2 >> 0x1f) >> 0x13)) >> 0xd) +
|
|
*(int *)(T2E + local_20 * 4));
|
|
uVar9 = __mulsf3(uVar9,*(undefined4 *)(param_1 + 0xa0));
|
|
uVar9 = __mulsf3(uVar9,in_r2);
|
|
uVar4 = __subsf3(0x3f800000,uVar9);
|
|
uVar3 = __mulsf3(uVar4,uVar3);
|
|
uVar4 = __floatsisf(((int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd) + iVar8);
|
|
uVar3 = __subsf3(uVar4,uVar3);
|
|
__divsf3(uVar3,uVar9);
|
|
this = (CFunctions *)__fixsfsi();
|
|
uVar5 = Energe2Temp(this,(int)this);
|
|
if (-0x42afe < (int)uVar5) {
|
|
return uVar5;
|
|
}
|
|
return 0xfffbd502;
|
|
}
|
|
}
|
|
puVar6 = (undefined4 *)__errno();
|
|
*puVar6 = 0xe4ae0001;
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC length @ 00029a64
|
|
|
|
/* length(__sFILE*) */
|
|
|
|
long length(__sFILE *param_1)
|
|
|
|
{
|
|
long __off;
|
|
long lVar1;
|
|
|
|
__off = ftell((FILE *)param_1);
|
|
fseek((FILE *)param_1,0,2);
|
|
lVar1 = ftell((FILE *)param_1);
|
|
fseek((FILE *)param_1,__off,0);
|
|
return lVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC LoadCalibrationTable @ 00029a98
|
|
|
|
/* CFunctions::LoadCalibrationTable(char const*) */
|
|
|
|
void __thiscall CFunctions::LoadCalibrationTable(CFunctions *this,char *param_1)
|
|
|
|
{
|
|
pthread_mutex_t *__mutex;
|
|
int iVar1;
|
|
MStream *pMVar2;
|
|
Logging *pLVar3;
|
|
FILE *__stream;
|
|
CFunctions *pCVar4;
|
|
CFunctions *pCVar5;
|
|
CFunctions *__ptr;
|
|
CFunctions *__ptr_00;
|
|
int iVar6;
|
|
int iVar7;
|
|
void *pvVar8;
|
|
void *pvVar9;
|
|
int iVar10;
|
|
long lVar11;
|
|
CFunctions *pCVar12;
|
|
CFunctions *pCVar13;
|
|
int iVar14;
|
|
uint uVar15;
|
|
size_t __n;
|
|
uint uVar16;
|
|
uint uVar17;
|
|
undefined4 uVar18;
|
|
CFunctions *pCVar19;
|
|
int iVar20;
|
|
CFunctions *pCVar21;
|
|
undefined4 local_98;
|
|
int local_94;
|
|
CFunctions *local_88;
|
|
int local_84;
|
|
Logging aLStack_80 [12];
|
|
Logging aLStack_74 [12];
|
|
Logging aLStack_68 [12];
|
|
Logging aLStack_5c [12];
|
|
int local_50;
|
|
Logging aLStack_4c [12];
|
|
Logging aLStack_40 [12];
|
|
Logging aLStack_34 [12];
|
|
undefined4 local_28;
|
|
uint local_24;
|
|
int local_20;
|
|
int local_1c;
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
__mutex = (pthread_mutex_t *)(this + 0xb0);
|
|
pthread_mutex_lock(__mutex);
|
|
pCVar12 = this + 0x2d1c;
|
|
if (*(void **)(this + 0x2f74) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0x2f74));
|
|
*(undefined4 *)(this + 0x2f74) = 0;
|
|
}
|
|
if (*(void **)(this + 0x2f78) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0x2f78));
|
|
*(undefined4 *)(this + 0x2f78) = 0;
|
|
}
|
|
if (*(void **)(this + 0x2f7c) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0x2f7c));
|
|
*(undefined4 *)(this + 0x2f7c) = 0;
|
|
}
|
|
__aeabi_memclr4(pCVar12,0xa68);
|
|
pCVar13 = this + 0x3128;
|
|
if ((*(int *)(this + 0xa4) != 0) && (*param_1 != '\0')) {
|
|
iVar1 = access(param_1,0);
|
|
if (iVar1 == 0) {
|
|
__stream = fopen(param_1,"rb");
|
|
if (__stream == (FILE *)0x0) {
|
|
pthread_mutex_unlock(__mutex);
|
|
pMVar2 = (MStream *)mag::Logging::Logging(aLStack_4c,4);
|
|
MStream::operator<<(pMVar2,"x3");
|
|
pLVar3 = aLStack_4c;
|
|
}
|
|
else {
|
|
strncpy((char *)(this + 0x2d28),param_1,0x100);
|
|
this[0x2e27] = (CFunctions)0x0;
|
|
local_50 = 0;
|
|
fread(&local_50,4,1,__stream);
|
|
fread(&local_1c,4,1,__stream);
|
|
fread(&local_20,4,1,__stream);
|
|
pCVar4 = this + 0x2e2c;
|
|
fread(pCVar4,4,1,__stream);
|
|
pCVar5 = this + 0x2e28;
|
|
fread(pCVar5,4,1,__stream);
|
|
fread(&local_24,4,1,__stream);
|
|
fread(&local_28,4,1,__stream);
|
|
__ptr = this + 0x2e30;
|
|
fread(__ptr,4,1,__stream);
|
|
fread(this + 0x2e34,4,1,__stream);
|
|
if ((((local_50 == 0x5aa50003) && (*(size_t *)pCVar4 - 2 < 0x12)) && (*(int *)pCVar5 != 0))
|
|
&& ((local_24 != 0 && ((local_24 - 1 & local_24) == 0)))) {
|
|
if ((local_1c == *(int *)(this + 0x37ec)) && (local_20 == *(int *)(this + 0x37f0))) {
|
|
__ptr_00 = this + 0x2e38;
|
|
fread(__ptr_00,4,*(size_t *)pCVar4,__stream);
|
|
fread(this + 0x2e88,4,*(size_t *)pCVar4,__stream);
|
|
fread(this + 0x2ed8,4,*(size_t *)pCVar4,__stream);
|
|
fread(this + 0x2f28,4,*(int *)pCVar4 - 1,__stream);
|
|
std::ostream::_M_put_nowiden((ostream *)std::cout,"LoadCalibrationTable");
|
|
std::ostream::_M_put_nowiden((ostream *)std::cout,":");
|
|
std::ostream::_M_put_nowiden((ostream *)std::cout,"read stage 2\n");
|
|
pCVar19 = this + 0x50f0;
|
|
iVar1 = *(int *)pCVar4;
|
|
uVar15 = 0;
|
|
pCVar21 = __ptr_00;
|
|
LAB_00029d24:
|
|
if (uVar15 < iVar1 - 1U) {
|
|
if (*(uint *)(pCVar21 + 0xf0) < *(uint *)pCVar19) goto code_r0x00029d32;
|
|
goto LAB_00029d3c;
|
|
}
|
|
iVar7 = *(int *)(this + 0x2e34) + *(int *)__ptr +
|
|
(*(int *)pCVar5 * 3 + -1) * *(int *)pCVar19 * 2;
|
|
uVar15 = 0;
|
|
iVar6 = 1;
|
|
if (iVar1 != 1) {
|
|
uVar16 = 0;
|
|
uVar15 = 0;
|
|
do {
|
|
uVar15 = *(int *)(this + uVar16 * 4 + 0x2f28) * 0x28 + uVar15;
|
|
uVar16 = uVar16 + 1;
|
|
iVar6 = iVar1;
|
|
} while (uVar16 < iVar1 - 1U);
|
|
}
|
|
iVar6 = uVar15 + iVar6 * (iVar7 + 0x10) + 0x20;
|
|
iVar1 = length((__sFILE *)__stream);
|
|
if (iVar1 < iVar6) {
|
|
std::ostream::_M_put_nowiden
|
|
((ostream *)std::cout,"The calibration table length is not correct.\n");
|
|
fclose(__stream);
|
|
pthread_mutex_unlock(__mutex);
|
|
pMVar2 = (MStream *)mag::Logging::Logging(aLStack_80,4);
|
|
MStream::operator<<(pMVar2,"x7");
|
|
pLVar3 = aLStack_80;
|
|
goto LAB_00029b50;
|
|
}
|
|
iVar1 = length((__sFILE *)__stream);
|
|
pvVar8 = operator_new__(iVar7 * *(int *)pCVar4 + 3U & 0xfffffffc);
|
|
*(void **)(this + 0x2f74) = pvVar8;
|
|
pvVar8 = operator_new__(iVar7 + 3U & 0xfffffffc);
|
|
*(void **)(this + 0x2f78) = pvVar8;
|
|
if (uVar15 != 0) {
|
|
pvVar9 = operator_new__((uVar15 | 4) - 1 & 0xfffffff8);
|
|
*(void **)(this + 0x2f7c) = pvVar9;
|
|
}
|
|
*(void **)(this + 0x3114) = pvVar8;
|
|
*(uint *)(this + 0x3120) =
|
|
(int)pvVar8 +
|
|
(*(uint *)__ptr & 0xfffffffe) + *(int *)pCVar19 * (*(int *)pCVar5 + -1) * 2;
|
|
iVar10 = ftell(__stream);
|
|
*(int *)(this + 0x2fd0) = iVar10;
|
|
*(undefined4 *)(this + 0x3020) = 0;
|
|
uVar16 = *(uint *)pCVar4;
|
|
if (1 < uVar16) {
|
|
pCVar5 = this + 0x2fd4;
|
|
uVar17 = 1;
|
|
iVar20 = iVar7;
|
|
do {
|
|
*(int *)(pCVar5 + 0x50) = iVar20;
|
|
*(int *)pCVar5 = iVar10 + iVar20;
|
|
iVar20 = iVar20 + iVar7;
|
|
pCVar5 = pCVar5 + 4;
|
|
uVar17 = uVar17 + 1;
|
|
uVar16 = *(uint *)pCVar4;
|
|
} while (uVar17 < uVar16);
|
|
iVar10 = *(int *)(this + 0x2fd0);
|
|
}
|
|
*(undefined4 *)(this + 0x30bc) = 0;
|
|
iVar10 = iVar10 + uVar16 * iVar7;
|
|
*(int *)(this + 0x3070) = iVar10;
|
|
if (1 < uVar16 - 1) {
|
|
local_88 = this + 0x2f28;
|
|
pCVar5 = this + 0x30c0;
|
|
iVar20 = 0;
|
|
uVar17 = 1;
|
|
do {
|
|
iVar14 = *(int *)local_88;
|
|
local_88 = local_88 + 4;
|
|
iVar10 = iVar14 * 0x28 + iVar10;
|
|
*(int *)(pCVar5 + -0x4c) = iVar10;
|
|
iVar20 = iVar14 * 0x28 + iVar20;
|
|
*(int *)pCVar5 = iVar20;
|
|
pCVar5 = pCVar5 + 4;
|
|
uVar17 = uVar17 + 1;
|
|
uVar16 = *(uint *)pCVar4;
|
|
} while (uVar17 < uVar16 - 1);
|
|
}
|
|
if (iVar6 < iVar1) {
|
|
fseek(__stream,uVar16 * iVar7 + uVar15,1);
|
|
iVar1 = length((__sFILE *)__stream);
|
|
lVar11 = ftell(__stream);
|
|
*(undefined4 *)(this + 0x312c) = 0;
|
|
pCVar4 = this + 0x312c;
|
|
local_88 = (CFunctions *)(iVar1 - lVar11);
|
|
if (0x43 < (int)local_88) {
|
|
while( true ) {
|
|
local_84 = 0;
|
|
fread(&local_84,4,1,__stream);
|
|
if (local_84 != 0x6bb60001) break;
|
|
iVar1 = *(int *)pCVar4;
|
|
fread(this + iVar1 * 0x21c + 0x3130,1,0x20,__stream);
|
|
this[iVar1 * 0x21c + 0x314e] = (CFunctions)0x0;
|
|
this[iVar1 * 0x21c + 0x314f] = (CFunctions)0x0;
|
|
fread(this + iVar1 * 0x21c + 0x3150,4,1,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3154,4,1,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3158,4,1,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x315c,4,1,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3160,4,1,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3168,4,1,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3164,4,1,__stream);
|
|
pCVar5 = this + iVar1 * 0x21c + 0x316c;
|
|
fread(pCVar5,4,1,__stream);
|
|
if (0xf < *(uint *)(this + iVar1 * 0x21c + 0x3160)) break;
|
|
__n = *(uint *)pCVar5 - 1;
|
|
if (0x18 < __n) break;
|
|
if ((int)local_88 < 0x21c) {
|
|
iVar6 = 1;
|
|
if (1 < *(uint *)pCVar5) {
|
|
fread(this + iVar1 * 0x21c + 0x3170,4,__n,__stream);
|
|
iVar6 = *(int *)pCVar5;
|
|
}
|
|
fread(this + iVar1 * 0x21c + 0x3204,4,iVar6 << 1,__stream);
|
|
uVar18 = 0x3f800000;
|
|
*(undefined4 *)(this + iVar1 * 0x21c + 0x3334) = 0x3f800000;
|
|
local_88 = (CFunctions *)((int)local_88 + *(int *)pCVar5 * -0xc + -0x40);
|
|
}
|
|
else {
|
|
fread(this + iVar1 * 0x21c + 0x3170,4,0x19,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x31d4,4,2,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x31dc,4,10,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3204,4,0x32,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x32cc,4,0x1a,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3334,4,1,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3338,4,2,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3340,4,1,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3344,4,1,__stream);
|
|
fread(this + iVar1 * 0x21c + 0x3348,4,1,__stream);
|
|
local_88 = (CFunctions *)((int)local_88 + -0x220);
|
|
uVar18 = *(undefined4 *)(this + iVar1 * 0x21c + 0x3334);
|
|
}
|
|
iVar6 = __aeabi_fcmple(uVar18);
|
|
if ((iVar6 != 0) || (iVar6 = __aeabi_fcmpgt(uVar18,0x3f800000), iVar6 != 0)) {
|
|
*(undefined4 *)(this + iVar1 * 0x21c + 0x3334) = 0x3f800000;
|
|
}
|
|
uVar18 = *(undefined4 *)(this + iVar1 * 0x21c + 0x3344);
|
|
iVar6 = __aeabi_fcmplt(uVar18,0xbba3d70a);
|
|
if ((iVar6 != 0) || (iVar6 = __aeabi_fcmpgt(uVar18,0x3ba3d70a), iVar6 != 0)) {
|
|
*(undefined4 *)(this + iVar1 * 0x21c + 0x3344) = 0;
|
|
}
|
|
*(int *)pCVar4 = *(int *)pCVar4 + 1;
|
|
*(undefined4 *)pCVar13 = 1;
|
|
std::ostream::_M_put_nowiden((ostream *)std::cout,"Found Lens: ");
|
|
std::ostream::_M_put_nowiden
|
|
((ostream *)std::cout,(char *)(this + iVar1 * 0x21c + 0x3130));
|
|
std::ostream::put((ostream *)std::cout,'\n');
|
|
std::ostream::flush((ostream *)std::cout);
|
|
if (((int)local_88 < 0x44) || (2 < *(uint *)pCVar4)) break;
|
|
}
|
|
}
|
|
}
|
|
else if (uVar16 == 2) {
|
|
local_88 = *(CFunctions **)(this + 0x2e3c);
|
|
local_94 = *(int *)__ptr_00;
|
|
if ((int)local_88 - local_94 == 50000) goto LAB_0002a320;
|
|
}
|
|
else if (uVar16 == 1) {
|
|
local_88 = *(CFunctions **)(this + 0x2e3c);
|
|
local_94 = *(int *)__ptr_00;
|
|
LAB_0002a320:
|
|
*(undefined4 *)(this + 0x2d20) = 1;
|
|
__aeabi_memclr4(pCVar13,0x65c);
|
|
*(undefined4 *)pCVar13 = 1;
|
|
*(undefined4 *)(this + 0x312c) = 1;
|
|
__aeabi_memcpy(this + 0x3130,"Default Lens",0xd);
|
|
*(undefined4 *)(this + 0x3150) = 0x3e99999a;
|
|
*(undefined4 *)(this + 0x3154) = 0x3f800000;
|
|
*(undefined4 *)(this + 0x3158) = 0x40000000;
|
|
*(undefined4 *)(this + 0x315c) = 0x3fc00000;
|
|
iVar1 = (local_94 + (int)local_88) / 2;
|
|
*(int *)(this + 0x3164) = iVar1;
|
|
*(int *)(this + 0x3168) = iVar1 + -500;
|
|
*(undefined4 *)(this + 0x316c) = 1;
|
|
*(undefined4 *)(this + 0x3334) = 0x3f800000;
|
|
*(undefined4 *)(this + 0x3204) = *(undefined4 *)(this + 0x50fc);
|
|
*(undefined4 *)(this + 0x3208) = *(undefined4 *)(this + 0x5100);
|
|
*(char **)(this + 0x333c) = "NKSt6localeeqERKS_";
|
|
*(undefined4 *)(this + 0x3338) = 0;
|
|
}
|
|
*(uint *)(this + 0x50fc) = local_24;
|
|
*(undefined4 *)(this + 0x5100) = local_28;
|
|
uVar15 = 0;
|
|
do {
|
|
if (1 << (uVar15 & 0xff) == local_24) {
|
|
*(uint *)(this + 0x5104) = uVar15;
|
|
break;
|
|
}
|
|
uVar15 = uVar15 + 1;
|
|
} while (uVar15 < 0x20);
|
|
*(undefined4 *)pCVar12 = 1;
|
|
fclose(__stream);
|
|
pthread_mutex_unlock(__mutex);
|
|
local_98 = *(undefined4 *)pCVar12;
|
|
goto LAB_00029c82;
|
|
}
|
|
std::ostream::_M_put_nowiden
|
|
((ostream *)std::cout,"The calibration table size mismatch FPA.\n");
|
|
fclose(__stream);
|
|
pthread_mutex_unlock(__mutex);
|
|
pMVar2 = (MStream *)mag::Logging::Logging(aLStack_68,4);
|
|
MStream::operator<<(pMVar2,"x5");
|
|
pLVar3 = aLStack_68;
|
|
}
|
|
else {
|
|
std::ostream::_M_put_nowiden
|
|
((ostream *)std::cout,"The calibration table data is not correct.\n");
|
|
fclose(__stream);
|
|
pthread_mutex_unlock(__mutex);
|
|
pMVar2 = (MStream *)mag::Logging::Logging(aLStack_5c,4);
|
|
MStream::operator<<(pMVar2,"x4");
|
|
pLVar3 = aLStack_5c;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
pthread_mutex_unlock(__mutex);
|
|
pMVar2 = (MStream *)mag::Logging::Logging(aLStack_40,4);
|
|
MStream::operator<<(pMVar2,"x2");
|
|
pLVar3 = aLStack_40;
|
|
}
|
|
local_98 = 0;
|
|
mag::Logging::~Logging(pLVar3);
|
|
goto LAB_00029c82;
|
|
}
|
|
pthread_mutex_unlock(__mutex);
|
|
pMVar2 = (MStream *)mag::Logging::Logging(aLStack_34,4);
|
|
MStream::operator<<(pMVar2,"x1");
|
|
pLVar3 = aLStack_34;
|
|
LAB_00029b50:
|
|
mag::Logging::~Logging(pLVar3);
|
|
local_98 = 0;
|
|
LAB_00029c82:
|
|
if (__stack_chk_guard == local_18) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail(local_98);
|
|
code_r0x00029d32:
|
|
uVar15 = uVar15 + 1;
|
|
iVar6 = *(int *)pCVar21;
|
|
pCVar21 = pCVar21 + 4;
|
|
if (*(int *)pCVar21 <= iVar6) goto LAB_00029d3c;
|
|
goto LAB_00029d24;
|
|
LAB_00029d3c:
|
|
std::ostream::_M_put_nowiden((ostream *)std::cout,"The calibration table data is not correct.\n");
|
|
fclose(__stream);
|
|
pthread_mutex_unlock(__mutex);
|
|
pMVar2 = (MStream *)mag::Logging::Logging(aLStack_74,4);
|
|
MStream::operator<<(pMVar2,"x6");
|
|
pLVar3 = aLStack_74;
|
|
goto LAB_00029b50;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ConvertmC2InnerTemp @ 0002a4e8
|
|
|
|
/* CFunctions::ConvertmC2InnerTemp(int) const */
|
|
|
|
uint __thiscall CFunctions::ConvertmC2InnerTemp(CFunctions *this,int param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = param_1 - *(int *)(this + 0x5100) >> (*(uint *)(this + 0x5104) & 0xff);
|
|
if ((int)uVar1 < 1) {
|
|
uVar1 = 0;
|
|
}
|
|
if (0xfffe < (int)uVar1) {
|
|
uVar1 = 0xffff;
|
|
}
|
|
return uVar1 & 0xffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FindMaxTemperature @ 0002a514
|
|
|
|
/* CFunctions::FindMaxTemperature() */
|
|
|
|
void __thiscall CFunctions::FindMaxTemperature(CFunctions *this)
|
|
|
|
{
|
|
ushort uVar1;
|
|
ushort uVar2;
|
|
int iVar3;
|
|
ushort *puVar4;
|
|
|
|
iVar3 = *(int *)(this + 0x50f0);
|
|
puVar4 = *(ushort **)(this + 0xb4);
|
|
uVar2 = *puVar4;
|
|
if ((iVar3 != 0) && (iVar3 != 1)) {
|
|
iVar3 = 1 - iVar3;
|
|
do {
|
|
puVar4 = puVar4 + 1;
|
|
uVar1 = *puVar4;
|
|
if (*puVar4 <= uVar2) {
|
|
uVar1 = uVar2;
|
|
}
|
|
uVar2 = uVar1;
|
|
iVar3 = iVar3 + 1;
|
|
} while (iVar3 != 0);
|
|
}
|
|
*(uint *)(this + 0x3838) = (uint)uVar2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC CalContrastOffsetedAutoEnlargeRange @ 0002a560
|
|
|
|
/* CFunctions::CalContrastOffsetedAutoEnlargeRange() */
|
|
|
|
int __thiscall CFunctions::CalContrastOffsetedAutoEnlargeRange(CFunctions *this)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
undefined4 uVar6;
|
|
|
|
iVar3 = *(int *)(this + 0x30);
|
|
iVar1 = iVar3;
|
|
if (99 < iVar3) {
|
|
iVar1 = 100;
|
|
}
|
|
iVar4 = iVar3;
|
|
if (iVar3 < -99) {
|
|
iVar4 = -100;
|
|
}
|
|
if (iVar3 < 0) {
|
|
iVar1 = iVar4;
|
|
}
|
|
uVar5 = (uint)(*(int *)(this + 0x20) * 1000) >> (*(uint *)(this + 0x5104) & 0xff);
|
|
if (0xfffe < uVar5) {
|
|
uVar5 = 0xffff;
|
|
}
|
|
iVar1 = __divsi3(uVar5 * iVar1,(iVar3 >> 0x1f & 0xffffff9cU) + 0x96);
|
|
iVar1 = uVar5 - iVar1;
|
|
if (*(int *)(this + 0x2d1c) != 0) {
|
|
uVar6 = *(undefined4 *)(this + 0x6c);
|
|
iVar3 = __aeabi_fcmpgt(uVar6,0);
|
|
if (iVar3 != 0) {
|
|
if (*(int *)(this + 0x2e2c) == 2) {
|
|
iVar3 = *(int *)(this + 0x2e38);
|
|
iVar4 = *(int *)(this + 0x2e3c);
|
|
if (iVar4 - iVar3 != 50000) goto LAB_0002a610;
|
|
}
|
|
else {
|
|
if (*(int *)(this + 0x2e2c) != 1) goto LAB_0002a610;
|
|
iVar3 = *(int *)(this + 0x2e38);
|
|
iVar4 = *(int *)(this + 0x2e3c);
|
|
}
|
|
uVar2 = __floatsisf(iVar1 * (*(int *)(this + 0x38) - (iVar3 + iVar4) / 2));
|
|
uVar6 = __mulsf3(uVar6,uVar2);
|
|
__divsf3(uVar6,0x447a0000);
|
|
iVar3 = __fixsfsi();
|
|
iVar1 = iVar1 + iVar3;
|
|
}
|
|
}
|
|
LAB_0002a610:
|
|
if (iVar1 < 0x81) {
|
|
iVar1 = 0x80;
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SubSectionEnlarge @ 0002a640
|
|
|
|
/* CFunctions::SubSectionEnlarge() */
|
|
|
|
void __thiscall CFunctions::SubSectionEnlarge(CFunctions *this)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
CFunctions CVar8;
|
|
int iVar9;
|
|
uint uVar10;
|
|
bool bVar11;
|
|
int local_30;
|
|
int local_28;
|
|
int local_1c;
|
|
|
|
if ((*(uint *)(this + 0x18) < *(uint *)(this + 0x1c)) &&
|
|
(*(int *)(this + 0x10) < *(int *)(this + 0x14))) {
|
|
iVar2 = SearchInnerTemp(this,*(int *)(this + 0x10));
|
|
iVar3 = SearchInnerTemp(this,*(int *)(this + 0x14));
|
|
iVar7 = iVar3;
|
|
if (iVar3 <= *(int *)(this + 0x3838)) {
|
|
iVar7 = *(int *)(this + 0x3838);
|
|
}
|
|
*(int *)(this + 0x3854) = iVar7;
|
|
iVar9 = iVar2;
|
|
if (*(int *)(this + 0x383c) <= iVar2) {
|
|
iVar9 = *(int *)(this + 0x383c);
|
|
}
|
|
*(int *)(this + 0x3858) = iVar9;
|
|
uVar10 = iVar7 - iVar9;
|
|
uVar4 = (iVar2 - iVar9) * 0x3ff;
|
|
uVar5 = __udivsi3(uVar4,uVar10);
|
|
uVar6 = __udivsi3((iVar3 - iVar9) * 0x3ff,uVar10);
|
|
iVar7 = *(int *)(this + 0x18);
|
|
iVar2 = *(int *)(this + 0x1c);
|
|
iVar3 = iVar2 * 4;
|
|
iVar9 = 0;
|
|
local_1c = 0;
|
|
if (uVar10 <= uVar4) {
|
|
local_1c = __udivsi3(iVar7 << 0x18,uVar5);
|
|
}
|
|
local_28 = 0;
|
|
if (uVar5 < uVar6) {
|
|
local_28 = __udivsi3((iVar3 + iVar7 * -4) * 0x400000,uVar6 - uVar5);
|
|
}
|
|
local_30 = 0;
|
|
if (uVar6 < 0x3ff) {
|
|
local_30 = __udivsi3((iVar2 * -4 + 0x3ff) * 0x400000,0x3ff - uVar6);
|
|
}
|
|
uVar4 = 0;
|
|
do {
|
|
if (uVar5 < uVar4) {
|
|
uVar10 = uVar5;
|
|
iVar2 = local_28;
|
|
iVar1 = iVar7 * 4;
|
|
if (uVar6 <= uVar4) {
|
|
uVar10 = uVar6;
|
|
iVar2 = local_30;
|
|
iVar1 = iVar3;
|
|
}
|
|
CVar8 = SUB41(((uVar4 - uVar10) * iVar2 >> 0x16) + iVar1 >> 2,0);
|
|
}
|
|
else {
|
|
CVar8 = SUB41((uint)iVar9 >> 0x18,0);
|
|
}
|
|
this[uVar4 + 0x4074] = CVar8;
|
|
iVar9 = iVar9 + local_1c;
|
|
bVar11 = uVar4 != 0x3ff;
|
|
uVar4 = uVar4 + 1;
|
|
} while (bVar11);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SearchSeparateLine @ 0002a768
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
/* CFunctions::SearchSeparateLine() */
|
|
|
|
void __thiscall CFunctions::SearchSeparateLine(CFunctions *this)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
undefined4 uVar5;
|
|
undefined4 uVar6;
|
|
int iVar7;
|
|
undefined4 uVar8;
|
|
int iVar9;
|
|
ushort *puVar10;
|
|
uint uVar11;
|
|
int *piVar12;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
uint uVar15;
|
|
ushort *puVar16;
|
|
uint uVar17;
|
|
bool bVar18;
|
|
int local_2030;
|
|
uint local_202c;
|
|
int *local_2028;
|
|
int aiStack_2018 [1024];
|
|
int local_1018 [1025];
|
|
|
|
iVar1 = __stack_chk_guard;
|
|
uVar15 = *(uint *)(this + 0x37f0);
|
|
uVar17 = 0;
|
|
uVar13 = 0;
|
|
uVar14 = uVar13;
|
|
if (uVar15 != 0) {
|
|
puVar16 = *(ushort **)(this + 0xb4);
|
|
uVar13 = *(uint *)(this + 0x37ec);
|
|
uVar14 = 0;
|
|
local_2030 = 0;
|
|
do {
|
|
iVar2 = local_2030;
|
|
if (uVar13 >> 2 != 0) {
|
|
iVar2 = 0;
|
|
iVar9 = -(uVar13 >> 2);
|
|
puVar10 = puVar16;
|
|
do {
|
|
iVar2 = iVar2 + (uint)*puVar10 + (uint)puVar10[1] + (uint)puVar10[2] + (uint)puVar10[3];
|
|
puVar10 = puVar10 + 4;
|
|
iVar9 = iVar9 + 1;
|
|
} while (iVar9 != 0);
|
|
puVar16 = puVar16 + (uVar13 & 0xfffffffc);
|
|
}
|
|
iVar2 = __udivsi3(iVar2,uVar13);
|
|
local_1018[uVar14] = iVar2;
|
|
uVar14 = uVar14 + 1;
|
|
} while (uVar14 < uVar15);
|
|
uVar17 = uVar15 * 7 >> 3;
|
|
uVar13 = 0;
|
|
for (uVar11 = uVar15 >> 2; uVar14 = uVar13, uVar11 != 0; uVar11 = uVar11 - 1) {
|
|
uVar13 = uVar15 >> 2;
|
|
}
|
|
}
|
|
for (; uVar13 < uVar15; uVar13 = uVar13 + 1) {
|
|
}
|
|
if (uVar17 < uVar14) {
|
|
LAB_0002aa1c:
|
|
*(uint *)(this + 0x4478) = uVar15 - 1;
|
|
}
|
|
else {
|
|
local_2028 = aiStack_2018 + uVar14;
|
|
uVar13 = uVar15 - 1;
|
|
local_202c = uVar13 - uVar14;
|
|
uVar8 = __floatunsisf(uVar15);
|
|
iVar2 = 0;
|
|
do {
|
|
uVar3 = __floatunsisf(uVar14 + iVar2 + 1);
|
|
uVar4 = __divsf3(uVar3,uVar8);
|
|
uVar5 = __floatunsisf();
|
|
uVar3 = __divsf3(uVar5,uVar3);
|
|
uVar5 = __floatunsisf();
|
|
uVar6 = __floatunsisf(local_202c);
|
|
uVar5 = __divsf3(uVar5,uVar6);
|
|
uVar6 = __subsf3(0x3f800000,uVar4);
|
|
uVar4 = __mulsf3(uVar4,uVar6);
|
|
uVar3 = __subsf3(uVar3,uVar5);
|
|
uVar4 = __mulsf3(uVar4,uVar3);
|
|
iVar9 = __mulsf3(uVar3,uVar4);
|
|
*local_2028 = iVar9;
|
|
local_2028 = local_2028 + 1;
|
|
iVar2 = iVar2 + 1;
|
|
local_202c = local_202c + -1;
|
|
} while (uVar14 + ~uVar17 + iVar2 != 0);
|
|
if (uVar17 < uVar14) goto LAB_0002aa1c;
|
|
local_202c = uVar14;
|
|
if (uVar14 != uVar17) {
|
|
iVar2 = aiStack_2018[uVar14];
|
|
iVar9 = __unordsf2(iVar2,iVar2);
|
|
bVar18 = iVar9 != 0;
|
|
piVar12 = local_1018 + (uVar14 - 0x3ff);
|
|
uVar11 = uVar14;
|
|
local_2028 = (int *)iVar2;
|
|
do {
|
|
if (!bVar18) {
|
|
local_2028 = (int *)iVar2;
|
|
}
|
|
iVar2 = *piVar12;
|
|
piVar12 = piVar12 + 1;
|
|
iVar9 = __aeabi_fcmple(local_2028,iVar2);
|
|
iVar7 = __aeabi_fcmple(local_2028,iVar2);
|
|
uVar11 = uVar11 + 1;
|
|
if (iVar7 != 0) {
|
|
local_202c = uVar11;
|
|
}
|
|
bVar18 = iVar9 == 0;
|
|
} while (uVar17 != uVar11);
|
|
}
|
|
if ((local_202c == uVar14) || (local_202c == uVar17)) goto LAB_0002aa1c;
|
|
uVar17 = 0;
|
|
iVar2 = 0;
|
|
do {
|
|
iVar2 = local_1018[uVar17] + iVar2;
|
|
uVar17 = uVar17 + 1;
|
|
} while (uVar17 <= local_202c);
|
|
uVar17 = local_202c + 1;
|
|
iVar9 = 0;
|
|
if (uVar17 < uVar15) {
|
|
iVar9 = 0;
|
|
do {
|
|
iVar9 = local_1018[uVar17] + iVar9;
|
|
uVar17 = uVar17 + 1;
|
|
} while (uVar17 < uVar15);
|
|
}
|
|
iVar2 = __udivsi3(iVar2);
|
|
iVar9 = __udivsi3(iVar9,uVar15 + (local_202c ^ 0xffffffff));
|
|
uVar17 = iVar2 - iVar9 >> 0x1f;
|
|
if ((iVar9 <= iVar2) && (iVar9 + iVar2 <= (int)(((iVar2 - iVar9) + uVar17 ^ uVar17) * 0x80))) {
|
|
*(int *)(this + 0x4480) = local_1018[local_202c];
|
|
uVar17 = *(uint *)(this + 0x4478);
|
|
if ((uVar14 < uVar17) && (uVar17 <= uVar13)) {
|
|
uVar15 = uVar15 >> 7;
|
|
if (uVar15 < 2) {
|
|
uVar15 = 1;
|
|
}
|
|
uVar13 = uVar15 + uVar17;
|
|
if (local_202c <= uVar15 + uVar17) {
|
|
uVar13 = local_202c;
|
|
}
|
|
local_202c = uVar17 - uVar15;
|
|
if (uVar17 - uVar15 <= uVar13) {
|
|
local_202c = uVar13;
|
|
}
|
|
}
|
|
uVar13 = 0;
|
|
iVar2 = 0;
|
|
do {
|
|
iVar2 = local_1018[uVar13] + iVar2;
|
|
uVar13 = uVar13 + 1;
|
|
} while (uVar13 <= local_202c);
|
|
*(uint *)(this + 0x4478) = local_202c;
|
|
uVar8 = __udivsi3(iVar2,local_202c + 1);
|
|
goto LAB_0002aa34;
|
|
}
|
|
*(uint *)(this + 0x4478) = uVar13;
|
|
}
|
|
*(undefined4 *)(this + 0x4480) = 0;
|
|
uVar8 = *(undefined4 *)(this + 0x3840);
|
|
LAB_0002aa34:
|
|
*(undefined4 *)(this + 0x447c) = uVar8;
|
|
if (__stack_chk_guard == iVar1) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC HistDeRedundance @ 0002aaa0
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
/* CFunctions::HistDeRedundance() */
|
|
|
|
void __thiscall CFunctions::HistDeRedundance(CFunctions *this)
|
|
|
|
{
|
|
int iVar1;
|
|
CFunctions *pCVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
CFunctions *pCVar5;
|
|
int iVar6;
|
|
ushort *puVar7;
|
|
uint *puVar8;
|
|
uint uVar9;
|
|
int iVar10;
|
|
uint uVar11;
|
|
int iVar12;
|
|
int iVar13;
|
|
uint uVar14;
|
|
uint uVar15;
|
|
uint uVar16;
|
|
uint uVar17;
|
|
bool bVar18;
|
|
uint local_1034;
|
|
uint local_1024;
|
|
uint local_1018 [1025];
|
|
|
|
iVar1 = __stack_chk_guard;
|
|
uVar15 = *(uint *)(this + 0x50f0);
|
|
pCVar2 = this + 0xcc;
|
|
iVar6 = *(int *)(this + 0x5c);
|
|
if ((iVar6 != 0) && (*(int *)(this + 0xc) == 0)) {
|
|
uVar15 = *(int *)(this + 0x37ec) * (*(int *)(this + 0x4478) + 1);
|
|
}
|
|
iVar3 = *(int *)(this + 0x3854);
|
|
iVar13 = *(int *)(this + 0x3858);
|
|
__aeabi_memclr4(pCVar2,0x1000);
|
|
iVar4 = __udivsi3(0xffc00000);
|
|
local_1024 = uVar15 >> 0xc;
|
|
if (local_1024 < 2) {
|
|
local_1024 = 1;
|
|
}
|
|
if (uVar15 != 0) {
|
|
puVar7 = *(ushort **)(this + 0xb4);
|
|
do {
|
|
uVar11 = iVar4 * ((uint)*puVar7 - iVar13) >> 0x14 & 0xffc;
|
|
*(int *)(this + uVar11 + 0xcc) = *(int *)(this + uVar11 + 0xcc) + 1;
|
|
uVar15 = uVar15 - 1;
|
|
puVar7 = puVar7 + 1;
|
|
} while (uVar15 != 0);
|
|
}
|
|
if (((iVar6 != 0) && (*(int *)(this + 0xc) == 0)) &&
|
|
(*(uint *)(this + 0x4478) < *(int *)(this + 0x37f0) - 1U)) {
|
|
iVar12 = *(int *)(this + 0x447c) * 0x1f;
|
|
iVar10 = *(int *)(this + 0x4480);
|
|
iVar4 = iVar12 + iVar10 * -0x20;
|
|
if (iVar4 == 0 || iVar4 < 0 != SBORROW4(iVar12,iVar10 * 0x20)) {
|
|
iVar3 = *(int *)(this + 0x447c) * 0x21;
|
|
if (iVar3 + iVar10 * -0x20 < 0 == SBORROW4(iVar3,iVar10 * 0x20)) goto LAB_0002abbe;
|
|
iVar3 = 0x1000;
|
|
}
|
|
else {
|
|
uVar15 = (iVar10 - iVar13) * 0x3ff;
|
|
uVar11 = __udivsi3(uVar15,iVar3 - iVar13);
|
|
if (uVar15 < (uint)(iVar3 - iVar13)) goto LAB_0002abbe;
|
|
if (uVar11 < 2) {
|
|
uVar11 = 1;
|
|
}
|
|
iVar3 = uVar11 << 2;
|
|
}
|
|
__aeabi_memclr4(pCVar2,iVar3);
|
|
}
|
|
LAB_0002abbe:
|
|
pCVar5 = this + 0x447c;
|
|
if (iVar6 == 0) {
|
|
pCVar5 = this + 0x3840;
|
|
}
|
|
iVar6 = *(int *)(this + 0x3858);
|
|
uVar14 = (*(int *)pCVar5 - iVar6) * 0x3ff;
|
|
uVar16 = *(int *)(this + 0x3854) - iVar6;
|
|
uVar11 = __udivsi3(uVar14,uVar16);
|
|
uVar15 = uVar11;
|
|
if (*(int *)(this + 0x60) != 0) {
|
|
iVar6 = 0;
|
|
iVar3 = 0;
|
|
if (uVar16 <= uVar14) {
|
|
uVar14 = 0;
|
|
iVar3 = 0;
|
|
iVar6 = 0;
|
|
do {
|
|
iVar3 = *(int *)(pCVar2 + uVar14 * 4) + iVar3;
|
|
iVar6 = uVar14 * *(int *)(pCVar2 + uVar14 * 4) + iVar6;
|
|
uVar14 = uVar14 + 1;
|
|
} while (uVar14 < uVar11);
|
|
}
|
|
if ((int)(uVar11 + 1) < 0x400) {
|
|
iVar10 = 0;
|
|
iVar13 = 0;
|
|
iVar4 = uVar11 + 1;
|
|
do {
|
|
iVar10 = *(int *)(this + iVar4 * 4 + 0xcc) + iVar10;
|
|
iVar13 = iVar4 * *(int *)(this + iVar4 * 4 + 0xcc) + iVar13;
|
|
bVar18 = iVar4 != 0x3ff;
|
|
iVar4 = iVar4 + 1;
|
|
} while (bVar18);
|
|
if ((iVar3 != 0) && (iVar10 != 0)) {
|
|
iVar6 = __udivsi3(iVar6);
|
|
iVar3 = __udivsi3(iVar13,iVar10);
|
|
uVar15 = (uint)(iVar3 + iVar6) >> 1;
|
|
if (uVar15 <= uVar11) {
|
|
uVar15 = uVar11;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
iVar6 = *(int *)(this + 0x2c);
|
|
if (99 < iVar6) {
|
|
iVar6 = 100;
|
|
}
|
|
if (iVar6 < -99) {
|
|
iVar6 = -100;
|
|
}
|
|
iVar4 = 0;
|
|
iVar3 = *(int *)pCVar2;
|
|
do {
|
|
iVar13 = iVar4 * -4;
|
|
*(uint *)(this + iVar4 * -4 + 0xcc) = (uint)(*(int *)(this + iVar13 + 0xd0) + iVar3) >> 1;
|
|
iVar4 = iVar4 + -1;
|
|
iVar3 = *(int *)(this + iVar13 + 0xd0);
|
|
} while (iVar4 != -0x3ff);
|
|
*(undefined4 *)(this + 0x10c8) = *(undefined4 *)(this + 0x10c4);
|
|
iVar6 = __divsi3(iVar6 * 0x1bf);
|
|
local_1034 = 1;
|
|
iVar3 = __udivsi3(0x10000,local_1024);
|
|
if (-1 < (int)uVar15) {
|
|
iVar4 = 0;
|
|
uVar14 = 0;
|
|
uVar11 = uVar15;
|
|
do {
|
|
uVar16 = *(int *)(this + uVar11 * 4 + 0xcc) + uVar14;
|
|
uVar14 = uVar16;
|
|
if (local_1024 <= uVar16) {
|
|
uVar14 = 0;
|
|
}
|
|
iVar4 = iVar4 + (uVar16 < local_1024 ^ 1);
|
|
*(uint *)(this + uVar11 * 4 + 0x10cc) = iVar4 * 0x100 + (uVar14 * iVar3 >> 8);
|
|
bVar18 = 0 < (int)uVar11;
|
|
uVar11 = uVar11 - 1;
|
|
} while (bVar18);
|
|
}
|
|
iVar4 = 0x400;
|
|
if ((int)(uVar15 + 1) < 0x400) {
|
|
uVar14 = 0;
|
|
iVar13 = 0;
|
|
uVar11 = uVar15;
|
|
do {
|
|
uVar14 = *(int *)(this + uVar11 * 4 + 0xd0) + uVar14;
|
|
if (uVar14 < local_1024 << 3) {
|
|
iVar13 = iVar13 + (uVar14 < local_1024 ^ 1);
|
|
if (local_1024 <= uVar14) {
|
|
uVar14 = 0;
|
|
}
|
|
}
|
|
else {
|
|
iVar13 = iVar13 + 2;
|
|
uVar14 = 0;
|
|
}
|
|
*(uint *)(this + uVar11 * 4 + 0x10d0) = (uVar14 * iVar3 >> 8) + iVar13 * 0x100;
|
|
uVar11 = uVar11 + 1;
|
|
} while ((int)uVar11 < 0x3ff);
|
|
}
|
|
uVar14 = CalContrastOffsetedAutoEnlargeRange(this);
|
|
uVar16 = (*(int *)(this + 0x3854) - *(int *)(this + 0x3858)) * 0x10;
|
|
uVar11 = __udivsi3(uVar16,uVar14);
|
|
if (0x1ff < uVar11) {
|
|
uVar11 = 0x200;
|
|
}
|
|
if (uVar14 <= uVar16) {
|
|
local_1034 = uVar11;
|
|
}
|
|
puVar8 = local_1018;
|
|
uVar11 = local_1034 * 0x1800;
|
|
do {
|
|
uVar14 = uVar11 >> 0xd;
|
|
if (uVar14 == 0) {
|
|
uVar14 = 1;
|
|
}
|
|
*puVar8 = uVar14;
|
|
puVar8 = puVar8 + 1;
|
|
iVar4 = iVar4 + -1;
|
|
uVar11 = uVar11 + local_1034 * 4;
|
|
} while (iVar4 != 0);
|
|
if (*(int *)(this + 0x10cc) != 0) {
|
|
iVar3 = __udivsi3((iVar6 + 0x1c0) * 0x40000);
|
|
uVar16 = (iVar6 + 0x1c0) * 0x10;
|
|
uVar11 = uVar15;
|
|
uVar14 = uVar16;
|
|
if (-1 < (int)uVar15) {
|
|
do {
|
|
uVar9 = uVar16 - ((uint)(iVar3 * *(int *)(this + uVar11 * 4 + 0x10cc)) >> 0xe);
|
|
uVar17 = uVar14 - local_1018[uVar11];
|
|
if (uVar14 - uVar9 <= local_1018[uVar11]) {
|
|
uVar17 = uVar9;
|
|
}
|
|
this[uVar11 + 0x4074] = SUB41(uVar17 >> 6,0);
|
|
bVar18 = 0 < (int)uVar11;
|
|
uVar11 = uVar11 - 1;
|
|
uVar14 = uVar17;
|
|
} while (bVar18);
|
|
}
|
|
}
|
|
if (*(int *)(this + 0x20c8) != 0) {
|
|
iVar3 = __udivsi3((0x240 - iVar6) * 0x40000);
|
|
uVar14 = iVar6 * 0x10 + 0x1bf0;
|
|
uVar11 = uVar14;
|
|
if ((int)(uVar15 + 1) < 0x400) {
|
|
do {
|
|
uVar17 = ((uint)(iVar3 * *(int *)(this + uVar15 * 4 + 0x10d0)) >> 0xe) + uVar14;
|
|
uVar16 = local_1018[uVar15 + 1] + uVar11;
|
|
if (uVar17 - uVar11 <= local_1018[uVar15 + 1]) {
|
|
uVar16 = uVar17;
|
|
}
|
|
this[uVar15 + 0x4075] = SUB41(uVar16 >> 6,0);
|
|
uVar15 = uVar15 + 1;
|
|
uVar11 = uVar16;
|
|
} while ((int)uVar15 < 0x3ff);
|
|
}
|
|
}
|
|
if (__stack_chk_guard != iVar1) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC IsothermalPalette @ 0002af54
|
|
|
|
/* CFunctions::IsothermalPalette() */
|
|
|
|
void __thiscall CFunctions::IsothermalPalette(CFunctions *this)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
CFunctions *pCVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
|
|
uVar1 = *(uint *)(this + 0x3858);
|
|
uVar6 = *(uint *)(this + 0x3854);
|
|
uVar2 = SearchInnerTemp(this,*(int *)(this + 0x14));
|
|
uVar3 = SearchInnerTemp(this,*(int *)(this + 0x10));
|
|
uVar7 = 0x100;
|
|
if ((uVar2 <= uVar6) && (uVar7 = 0xffffffff, uVar1 <= uVar2)) {
|
|
iVar4 = __udivsi3((uVar2 - uVar1) * 0x3ff,uVar6 - uVar1);
|
|
uVar7 = (uint)(byte)this[iVar4 + 0x4074];
|
|
}
|
|
uVar2 = 0x100;
|
|
if ((uVar3 <= uVar6) && (uVar2 = 0xffffffff, uVar1 <= uVar3)) {
|
|
iVar4 = __udivsi3((uVar3 - uVar1) * 0x3ff,uVar6 - uVar1);
|
|
uVar2 = (uint)(byte)this[iVar4 + 0x4074];
|
|
}
|
|
__aeabi_memcpy(this + 0x24f4,this + 0x20cc);
|
|
if (0xfe < (int)uVar7) {
|
|
uVar7 = 0xff;
|
|
}
|
|
if ((int)uVar2 < 1) {
|
|
uVar2 = 0;
|
|
}
|
|
if ((int)uVar2 <= (int)uVar7) {
|
|
pCVar5 = this + uVar2 * 4 + 0x24f7;
|
|
iVar4 = uVar2 - 1;
|
|
do {
|
|
pCVar5[-3] = (CFunctions)0x0;
|
|
pCVar5[-2] = (CFunctions)0xff;
|
|
pCVar5[-1] = (CFunctions)0x0;
|
|
*pCVar5 = (CFunctions)0x0;
|
|
pCVar5 = pCVar5 + 4;
|
|
iVar4 = iVar4 + 1;
|
|
} while (iVar4 < (int)uVar7);
|
|
}
|
|
__aeabi_memcpy(this + 0x291c,this + 0x24f4,0x400);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC DynamicRedPalette @ 0002b060
|
|
|
|
/* CFunctions::DynamicRedPalette() */
|
|
|
|
void __thiscall CFunctions::DynamicRedPalette(CFunctions *this)
|
|
|
|
{
|
|
bool bVar1;
|
|
CFunctions CVar2;
|
|
char cVar3;
|
|
undefined4 uVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
uint uVar10;
|
|
CFunctions *pCVar11;
|
|
int iVar12;
|
|
uint local_38;
|
|
|
|
uVar10 = *(uint *)(this + 0x50f0);
|
|
uVar4 = __floatunsisf(uVar10);
|
|
__mulsf3(uVar4,0x3cf5c28f);
|
|
uVar5 = __fixsfsi();
|
|
uVar8 = 0;
|
|
iVar6 = 0x432;
|
|
do {
|
|
uVar8 = *(int *)(this + iVar6 * 4) + uVar8;
|
|
iVar9 = iVar6;
|
|
if (uVar10 >> 4 <= uVar8) break;
|
|
iVar9 = iVar6 + -1;
|
|
iVar12 = iVar6 + -0x33;
|
|
iVar6 = iVar9;
|
|
} while (1 < iVar12);
|
|
iVar6 = __udivsi3((1000U >> (*(uint *)(this + 0x5104) & 0xff) & 0xffff) * 0x3ff,
|
|
*(int *)(this + 0x3854) - *(int *)(this + 0x3858));
|
|
iVar6 = iVar6 + iVar9 + -0x33;
|
|
uVar8 = 0;
|
|
iVar9 = 0x432;
|
|
do {
|
|
uVar8 = *(int *)(this + iVar9 * 4) + uVar8;
|
|
uVar10 = 0x100;
|
|
if (uVar5 <= uVar8) {
|
|
if (iVar6 <= iVar9 + -0x33) {
|
|
iVar6 = iVar9 + -0x33;
|
|
}
|
|
break;
|
|
}
|
|
iVar12 = iVar9 + -0x33;
|
|
iVar9 = iVar9 + -1;
|
|
} while (1 < iVar12);
|
|
if (iVar6 < 0x400) {
|
|
uVar10 = (uint)(byte)this[iVar6 + 0x4074];
|
|
uVar7 = 0x100 - uVar10;
|
|
local_38 = uVar7 >> 1;
|
|
uVar8 = local_38 + uVar10;
|
|
uVar5 = 0;
|
|
if (uVar10 == 0) goto LAB_0002b148;
|
|
}
|
|
else {
|
|
uVar7 = 0;
|
|
local_38 = 0;
|
|
uVar8 = uVar10;
|
|
}
|
|
iVar6 = 0;
|
|
do {
|
|
iVar9 = iVar6 * 4;
|
|
CVar2 = SUB41(iVar6,0);
|
|
this[iVar9 + 0x24f4] = CVar2;
|
|
this[iVar9 + 0x24f5] = CVar2;
|
|
this[iVar9 + 0x24f6] = CVar2;
|
|
this[iVar9 + 0x24f7] = (CFunctions)0x0;
|
|
iVar6 = iVar6 + 1;
|
|
uVar5 = uVar10;
|
|
} while (iVar6 < (int)uVar10);
|
|
LAB_0002b148:
|
|
pCVar11 = this + 0x24f4;
|
|
CVar2 = SUB41(uVar5,0);
|
|
if (1 < (int)uVar7) {
|
|
iVar6 = 0;
|
|
uVar10 = uVar5;
|
|
do {
|
|
cVar3 = __divsi3(iVar6,local_38);
|
|
iVar9 = uVar10 * 4;
|
|
pCVar11[iVar9] = (CFunctions)(cVar3 + (char)CVar2);
|
|
pCVar11[iVar9 + 1] = CVar2;
|
|
pCVar11[iVar9 + 2] = CVar2;
|
|
pCVar11[iVar9 + 3] = (CFunctions)0x0;
|
|
iVar6 = iVar6 + (0xff - uVar5);
|
|
uVar10 = uVar10 + 1;
|
|
} while ((int)uVar10 < (int)uVar8);
|
|
}
|
|
if ((int)uVar8 < 0x100) {
|
|
iVar6 = 0;
|
|
uVar10 = uVar8;
|
|
do {
|
|
iVar9 = uVar10 * 4;
|
|
pCVar11[iVar9] = (CFunctions)0xff;
|
|
cVar3 = __divsi3(iVar6,0x100 - uVar8);
|
|
pCVar11[iVar9 + 1] = (CFunctions)(cVar3 + (char)CVar2);
|
|
pCVar11[iVar9 + 2] = (CFunctions)(cVar3 + (char)CVar2);
|
|
pCVar11[iVar9 + 3] = (CFunctions)0x0;
|
|
iVar6 = iVar6 - uVar5;
|
|
bVar1 = (int)uVar10 < 0xff;
|
|
uVar10 = uVar10 + 1;
|
|
} while (bVar1);
|
|
}
|
|
__aeabi_memcpy(this + 0x291c,pCVar11,0x400);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC MapTemperature @ 0002b204
|
|
|
|
/* CFunctions::MapTemperature(int) */
|
|
|
|
void CFunctions::MapTemperature(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
undefined1 *puVar8;
|
|
ushort *puVar9;
|
|
int local_24;
|
|
|
|
puVar9 = *(ushort **)(param_1 + 0xb4);
|
|
puVar8 = *(undefined1 **)(param_1 + 0xc0);
|
|
iVar1 = *(int *)(param_1 + 0x3858);
|
|
iVar2 = *(int *)(param_1 + 0x3854);
|
|
__aeabi_memclr4(param_1 + 0x3874,0x400);
|
|
iVar3 = __udivsi3(0xffc00000,iVar2 - iVar1);
|
|
for (iVar2 = *(int *)(param_1 + 0x50f0); iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
uVar6 = iVar3 * ((uint)*puVar9 - iVar1) >> 0x16;
|
|
*puVar8 = *(undefined1 *)(param_1 + 0x3820 + uVar6 + 0x854);
|
|
iVar4 = param_1 + 0x3820 + (uVar6 & 0x3fc);
|
|
*(int *)(iVar4 + 0x54) = *(int *)(iVar4 + 0x54) + 1;
|
|
puVar8 = puVar8 + 1;
|
|
puVar9 = puVar9 + 1;
|
|
}
|
|
*(undefined4 *)(param_1 + 0x3864) = 1;
|
|
iVar1 = *(int *)(param_1 + 200);
|
|
iVar2 = *(int *)(param_1 + 0x37fc);
|
|
if (*(int *)(param_1 + 100) == 0) {
|
|
iVar4 = *(uint *)(param_1 + 0x3800) - 1;
|
|
iVar3 = 0;
|
|
if (1 < *(uint *)(param_1 + 0x3800)) {
|
|
iVar3 = __udivsi3(0xff0000,iVar4);
|
|
}
|
|
if (-1 < iVar4) {
|
|
uVar6 = iVar3 * iVar4;
|
|
iVar1 = iVar1 + iVar2 * iVar4;
|
|
do {
|
|
__aeabi_memset(iVar1,iVar2,uVar6 >> 0x10 & 0xff);
|
|
iVar1 = iVar1 - iVar2;
|
|
uVar6 = uVar6 - iVar3;
|
|
iVar4 = iVar4 + -1;
|
|
} while (-1 < iVar4);
|
|
}
|
|
}
|
|
else {
|
|
iVar3 = *(int *)(param_1 + 0x3858);
|
|
local_24 = 0;
|
|
if ((*(int *)(param_1 + 0x383c) != iVar3) &&
|
|
(iVar4 = *(int *)(param_1 + 0x3854), iVar4 != iVar3)) {
|
|
local_24 = __divsi3((*(int *)(param_1 + 0x383c) - iVar3) * 0x3ff,iVar4 - iVar3);
|
|
}
|
|
iVar4 = 0x3ff;
|
|
if (*(int *)(param_1 + 0x3838) != iVar3) {
|
|
iVar7 = *(int *)(param_1 + 0x3854);
|
|
iVar4 = 0x3ff;
|
|
if (iVar7 != iVar3) {
|
|
iVar4 = __divsi3((*(int *)(param_1 + 0x3838) - iVar3) * 0x3ff,iVar7 - iVar3);
|
|
}
|
|
}
|
|
uVar6 = *(uint *)(param_1 + 0x3800);
|
|
if (uVar6 < 2) {
|
|
iVar3 = 0;
|
|
}
|
|
else {
|
|
iVar3 = __udivsi3((iVar4 - local_24) * 0x10000,uVar6 - 1);
|
|
}
|
|
iVar4 = uVar6 - 1;
|
|
if (-1 < iVar4) {
|
|
uVar6 = iVar4 * iVar3;
|
|
iVar1 = iVar1 + iVar4 * iVar2;
|
|
do {
|
|
uVar5 = (uVar6 >> 0x10) + local_24;
|
|
if (0x3fe < uVar5) {
|
|
uVar5 = 0x3ff;
|
|
}
|
|
__aeabi_memset(iVar1,iVar2,*(undefined1 *)(param_1 + uVar5 + 0x4074));
|
|
iVar1 = iVar1 - iVar2;
|
|
uVar6 = uVar6 - iVar3;
|
|
iVar4 = iVar4 + -1;
|
|
} while (-1 < iVar4);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SearchInnerTemp @ 0002b3e0
|
|
|
|
/* CFunctions::SearchInnerTemp(int) */
|
|
|
|
uint __thiscall CFunctions::SearchInnerTemp(CFunctions *this,int param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
float extraout_s0;
|
|
uint local_18;
|
|
|
|
uVar3 = *(uint *)(this + 0x50f0);
|
|
uVar4 = *(uint *)(this + 0x37ec);
|
|
uVar5 = 0xffff;
|
|
local_18 = 0;
|
|
uVar6 = 0x7fff;
|
|
do {
|
|
uVar2 = ReviseTemperature(this,(ushort)uVar6,(uVar4 >> 1) + (uVar3 >> 1));
|
|
if ((*(int *)(this + 0x4c) != 0) || (*(int *)(this + 0x50) != 0)) {
|
|
uVar2 = CorrectTemperature((int)this,extraout_s0,uVar2);
|
|
}
|
|
uVar1 = uVar6;
|
|
if ((int)uVar2 <= param_1) {
|
|
uVar1 = uVar5;
|
|
local_18 = uVar6;
|
|
}
|
|
uVar5 = uVar1;
|
|
uVar6 = local_18 + uVar5 >> 1;
|
|
} while (local_18 + 1 < uVar5);
|
|
return uVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetOriginalBMPDataPointer @ 0002b46c
|
|
|
|
/* CFunctions::GetOriginalBMPDataPointer() */
|
|
|
|
undefined4 __thiscall CFunctions::GetOriginalBMPDataPointer(CFunctions *this)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = 0;
|
|
if ((*(int *)(this + 0xa4) != 0) && (*(int *)(this + 0xac) != 0)) {
|
|
if (*(int *)(this + 0x3864) == 0) {
|
|
MapTemperature((int)this);
|
|
}
|
|
uVar1 = *(undefined4 *)(this + 0xc0);
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SaveBMP @ 0002b49c
|
|
|
|
/* CFunctions::SaveBMP(CacheData, char const*) */
|
|
|
|
undefined4 __thiscall CFunctions::SaveBMP(CFunctions *this,int param_2,char *param_3)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
void *pvVar4;
|
|
char *pcVar5;
|
|
pthread_mutex_t *__mutex;
|
|
undefined4 uVar6;
|
|
ushort local_44;
|
|
ushort local_42;
|
|
ushort local_3e;
|
|
ushort local_3c;
|
|
ushort local_3a;
|
|
ushort local_38;
|
|
undefined2 local_34;
|
|
undefined2 local_32;
|
|
undefined2 local_2e;
|
|
undefined2 local_2c;
|
|
undefined2 local_2a;
|
|
undefined2 local_28;
|
|
MStream aMStack_24 [12];
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
MStream::MStream(aMStack_24,0x100);
|
|
__mutex = (pthread_mutex_t *)(this + 0xb0);
|
|
pthread_mutex_lock(__mutex);
|
|
if ((*(int *)(this + 0xa4) == 0) || (*(int *)(this + 0xac) == 0)) {
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar6 = 0xe4ae0006;
|
|
LAB_0002b4f8:
|
|
puVar1 = (undefined4 *)__errno();
|
|
*puVar1 = uVar6;
|
|
}
|
|
else {
|
|
if (param_2 == 0) {
|
|
uVar2 = *(uint *)(this + 0x50f0);
|
|
iVar3 = GetOriginalBMPDataPointer(this);
|
|
if (iVar3 != 0) {
|
|
pvVar4 = operator_new__(uVar2);
|
|
__aeabi_memcpy(pvVar4,iVar3,uVar2);
|
|
pthread_mutex_unlock(__mutex);
|
|
if (param_3 == (char *)0x0) {
|
|
GetLocalTime((_SYSTEMTIME *)&local_44);
|
|
MStream::Fmt((char *)aMStack_24,"%d-%d-%d %d-%d-%d.bmp",(uint)local_44,(uint)local_42,
|
|
(uint)local_3e,(uint)local_3c,(uint)local_3a,(uint)local_38);
|
|
}
|
|
else {
|
|
MStream::operator<<(aMStack_24,param_3);
|
|
}
|
|
local_28 = 0;
|
|
local_34 = 0x4d42;
|
|
local_2e = 0;
|
|
local_2c = 0;
|
|
local_2a = 0x436;
|
|
local_32 = (undefined2)(uVar2 + 0x436);
|
|
*(short *)(((uint)&local_34 | 2) + 2) = (short)(uVar2 + 0x436 >> 0x10);
|
|
pcVar5 = (char *)MStream::Get(aMStack_24);
|
|
OFStream::OFStream((OFStream *)&local_44,pcVar5,false);
|
|
OFStream::Write((OFStream *)&local_44,&local_34,0xe,1);
|
|
OFStream::Write((OFStream *)&local_44,this + 0x24cc,0x428,1);
|
|
uVar6 = 1;
|
|
OFStream::Write((OFStream *)&local_44,pvVar4,uVar2,1);
|
|
IFStream::~IFStream((IFStream *)&local_44);
|
|
operator_delete__(pvVar4);
|
|
goto LAB_0002b500;
|
|
}
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar6 = 0xe4ae0003;
|
|
goto LAB_0002b4f8;
|
|
}
|
|
pthread_mutex_unlock(__mutex);
|
|
puVar1 = (undefined4 *)__errno();
|
|
*puVar1 = 0xe4ae0001;
|
|
}
|
|
uVar6 = 0;
|
|
LAB_0002b500:
|
|
MStream::~MStream(aMStack_24);
|
|
if (__stack_chk_guard == local_18) {
|
|
return uVar6;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC SaveRaw @ 0002b668
|
|
|
|
/* CFunctions::SaveRaw(CacheData, char const*) */
|
|
|
|
undefined4 __thiscall CFunctions::SaveRaw(CFunctions *this,int param_2,char *param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
void *pvVar2;
|
|
undefined4 *puVar3;
|
|
char *pcVar4;
|
|
int iVar5;
|
|
undefined4 uVar6;
|
|
pthread_mutex_t *__mutex;
|
|
undefined4 local_4c;
|
|
ushort local_48;
|
|
ushort local_46;
|
|
ushort local_42;
|
|
ushort local_40;
|
|
ushort local_3e;
|
|
ushort local_3c;
|
|
undefined4 local_38;
|
|
undefined4 local_34;
|
|
undefined4 local_2c;
|
|
undefined4 local_28;
|
|
MStream aMStack_24 [12];
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
MStream::MStream(aMStack_24,0x100);
|
|
local_34 = 0;
|
|
local_4c = 0;
|
|
local_38 = 0;
|
|
__mutex = (pthread_mutex_t *)(this + 0xb0);
|
|
pthread_mutex_lock(__mutex);
|
|
if ((*(int *)(this + 0xa4) == 0) || (*(int *)(this + 0xac) == 0)) {
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar6 = 0xe4ae0006;
|
|
}
|
|
else {
|
|
if (param_2 != 4) {
|
|
pthread_mutex_unlock(__mutex);
|
|
puVar3 = (undefined4 *)__errno();
|
|
*puVar3 = 0xe4ae0001;
|
|
goto LAB_0002b7b2;
|
|
}
|
|
local_28 = *(undefined4 *)(this + 0x37ec);
|
|
local_2c = *(undefined4 *)(this + 0x37f0);
|
|
local_34 = *(undefined4 *)(this + 0x40);
|
|
local_38 = *(undefined4 *)(this + 0x44);
|
|
iVar5 = *(int *)(this + 0xb4);
|
|
uVar1 = *(int *)(this + 0x50f0) << 1;
|
|
if (iVar5 != 0) {
|
|
pvVar2 = operator_new__(uVar1);
|
|
__aeabi_memcpy(pvVar2,iVar5,uVar1);
|
|
pthread_mutex_unlock(__mutex);
|
|
if (param_3 == (char *)0x0) {
|
|
GetLocalTime((_SYSTEMTIME *)&local_48);
|
|
MStream::Fmt((char *)aMStack_24,"%d-%02d-%02d %02d-%02d-%02d.raw",(uint)local_48,
|
|
(uint)local_46,(uint)local_42,(uint)local_40,(uint)local_3e,(uint)local_3c);
|
|
}
|
|
else {
|
|
MStream::operator<<(aMStack_24,param_3);
|
|
}
|
|
pcVar4 = (char *)MStream::Get(aMStack_24);
|
|
OFStream::OFStream((OFStream *)&local_48,pcVar4,false);
|
|
OFStream::Write((OFStream *)&local_48,&local_28,4,1);
|
|
OFStream::Write((OFStream *)&local_48,&local_2c,4,1);
|
|
OFStream::Write((OFStream *)&local_48,&local_38,4,1);
|
|
OFStream::Write((OFStream *)&local_48,(void *)((uint)&local_38 | 4),4,1);
|
|
OFStream::Write((OFStream *)&local_48,pvVar2,uVar1,1);
|
|
IFStream::~IFStream((IFStream *)&local_48);
|
|
operator_delete__(pvVar2);
|
|
local_4c = 1;
|
|
goto LAB_0002b7b2;
|
|
}
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar6 = 0xe4ae0003;
|
|
}
|
|
puVar3 = (undefined4 *)__errno();
|
|
*puVar3 = uVar6;
|
|
LAB_0002b7b2:
|
|
MStream::~MStream(aMStack_24);
|
|
if (__stack_chk_guard == local_18) {
|
|
return local_4c;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetRectTemperatureInfo @ 0002b848
|
|
|
|
/* CFunctions::GetRectTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, int*,
|
|
int) */
|
|
|
|
undefined4 __thiscall
|
|
CFunctions::GetRectTemperatureInfo
|
|
(CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5,
|
|
int param_6)
|
|
|
|
{
|
|
uint uVar1;
|
|
ushort uVar2;
|
|
undefined4 *puVar3;
|
|
ushort *puVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
undefined4 uVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
bool bVar13;
|
|
float extraout_s0;
|
|
float extraout_s0_00;
|
|
float extraout_s0_01;
|
|
undefined8 uVar14;
|
|
int local_30;
|
|
uint local_2c;
|
|
uint local_28;
|
|
int local_24;
|
|
uint local_20;
|
|
uint local_1c;
|
|
uint local_18;
|
|
|
|
if (param_6 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
if (((((param_3 < param_1) || (*(int *)(this + 0xac) == 0)) || (param_4 < param_2)) ||
|
|
((uVar7 = *(uint *)(this + 0x37ec), uVar7 <= param_3 || (param_5 == (int *)0x0)))) ||
|
|
(*(uint *)(this + 0x37f0) <= param_4)) {
|
|
uVar10 = 0xe4ae0005;
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
uVar10 = 0xe4ae0001;
|
|
}
|
|
puVar3 = (undefined4 *)__errno();
|
|
*puVar3 = uVar10;
|
|
local_2c = 0;
|
|
if (param_6 != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
}
|
|
else {
|
|
if (((param_2 == 0 && param_1 == 0) && (uVar7 - 1 == param_3)) &&
|
|
(*(uint *)(this + 0x37f0) - 1 == param_4)) {
|
|
uVar14 = __muldi3(*(undefined4 *)(this + 0x50f0),0,*(int *)(this + 0x3840),
|
|
*(int *)(this + 0x3840) >> 0x1f);
|
|
local_18 = *(uint *)(this + 0x3848);
|
|
local_1c = *(uint *)(this + 0x384c);
|
|
uVar2 = (ushort)*(undefined4 *)(this + 0x3838);
|
|
uVar8 = *(uint *)(this + 0x383c);
|
|
}
|
|
else {
|
|
local_30 = uVar7 * param_2;
|
|
uVar9 = 0;
|
|
uVar8 = 0xffffffff;
|
|
local_24 = 0;
|
|
local_28 = 0;
|
|
local_2c = 0;
|
|
local_20 = 0;
|
|
uVar6 = param_2;
|
|
do {
|
|
puVar4 = (ushort *)(*(int *)(this + 0xb4) + uVar7 * uVar6 * 2 + param_1 * 2);
|
|
uVar11 = param_1;
|
|
do {
|
|
local_18 = local_30 + uVar11;
|
|
uVar12 = (uint)*puVar4;
|
|
local_1c = local_18;
|
|
if (uVar8 <= uVar12) {
|
|
local_1c = local_2c;
|
|
}
|
|
if (uVar12 <= uVar9) {
|
|
local_18 = local_28;
|
|
}
|
|
bVar13 = CARRY4(local_20,uVar12);
|
|
local_20 = local_20 + uVar12;
|
|
local_24 = local_24 + (uint)bVar13;
|
|
uVar14 = CONCAT44(local_24,local_20);
|
|
uVar1 = uVar12;
|
|
if (uVar8 <= uVar12) {
|
|
uVar1 = uVar8;
|
|
}
|
|
uVar8 = uVar1;
|
|
if (uVar12 <= uVar9) {
|
|
uVar12 = uVar9;
|
|
}
|
|
uVar9 = uVar12;
|
|
uVar2 = (ushort)uVar9;
|
|
uVar11 = uVar11 + 1;
|
|
puVar4 = puVar4 + 1;
|
|
local_28 = local_18;
|
|
local_2c = local_1c;
|
|
} while (uVar11 <= param_3);
|
|
local_30 = local_30 + uVar7;
|
|
uVar6 = uVar6 + 1;
|
|
} while (uVar6 <= param_4);
|
|
}
|
|
local_24 = (int)((ulonglong)uVar14 >> 0x20);
|
|
local_20 = (uint)uVar14;
|
|
iVar5 = ReviseTemperature(this,(ushort)uVar8,local_1c);
|
|
*param_5 = iVar5;
|
|
iVar5 = ReviseTemperature(this,uVar2,local_18);
|
|
param_5[1] = iVar5;
|
|
local_2c = 1;
|
|
uVar2 = __aeabi_ldivmod(local_20,local_24,((1 - param_1) + param_3) * ((1 - param_2) + param_4),
|
|
0);
|
|
iVar5 = ReviseTemperature(this,uVar2,
|
|
(uVar7 * (param_4 + param_2) >> 1) + (param_3 + param_1 >> 1));
|
|
param_5[2] = iVar5;
|
|
param_5[3] = local_1c;
|
|
param_5[4] = local_18;
|
|
if (*(int *)(this + 0x50) != 0) {
|
|
iVar5 = CorrectTemperature((int)this,extraout_s0,*param_5);
|
|
*param_5 = iVar5;
|
|
iVar5 = CorrectTemperature((int)this,extraout_s0_00,param_5[1]);
|
|
param_5[1] = iVar5;
|
|
iVar5 = CorrectTemperature((int)this,extraout_s0_01,param_5[2]);
|
|
param_5[2] = iVar5;
|
|
}
|
|
if (param_6 != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
}
|
|
return local_2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetEllipseTemperatureInfo @ 0002ba84
|
|
|
|
/* CFunctions::GetEllipseTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int,
|
|
int*, int) */
|
|
|
|
undefined4 __thiscall
|
|
CFunctions::GetEllipseTemperatureInfo
|
|
(CFunctions *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5,
|
|
int param_6)
|
|
|
|
{
|
|
ushort uVar1;
|
|
undefined4 uVar2;
|
|
undefined4 uVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
undefined4 *puVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
int iVar12;
|
|
CFunctions *pCVar13;
|
|
int iVar14;
|
|
uint uVar15;
|
|
uint uVar16;
|
|
uint uVar17;
|
|
uint uVar18;
|
|
uint uVar19;
|
|
uint uVar20;
|
|
bool bVar21;
|
|
float __x;
|
|
float __x_00;
|
|
float __x_01;
|
|
float __x_02;
|
|
float __x_03;
|
|
float __x_04;
|
|
float __x_05;
|
|
float __x_06;
|
|
float extraout_s0;
|
|
float extraout_s0_00;
|
|
float extraout_s0_01;
|
|
int local_78;
|
|
uint local_60;
|
|
uint local_5c;
|
|
uint local_58;
|
|
uint local_4c;
|
|
uint local_44;
|
|
int local_40;
|
|
ushort *local_3c;
|
|
uint local_34;
|
|
ushort *local_2c;
|
|
uint local_28;
|
|
int local_24;
|
|
uint local_20;
|
|
uint local_1c;
|
|
uint local_18;
|
|
|
|
if (param_6 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
if ((((param_3 <= param_1) || (*(int *)(this + 0xac) == 0)) ||
|
|
(pCVar13 = this + 0x37ec, param_4 <= param_2)) ||
|
|
(((*(uint *)(this + 0x37ec) <= param_3 || (param_5 == (int *)0x0)) ||
|
|
(*(uint *)(this + 0x37f0) <= param_4)))) {
|
|
uVar2 = 0xe4ae0005;
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
uVar2 = 0xe4ae0001;
|
|
}
|
|
puVar6 = (undefined4 *)__errno();
|
|
*puVar6 = uVar2;
|
|
uVar2 = 0;
|
|
goto joined_r0x0002bf22;
|
|
}
|
|
uVar18 = param_4 - param_2;
|
|
uVar16 = param_3 - param_1;
|
|
local_1c = 0xffffffff;
|
|
if (uVar16 < uVar18) {
|
|
uVar2 = __floatunsisf();
|
|
uVar3 = __floatsisf(uVar18 * uVar18 - uVar16 * uVar16);
|
|
sqrtf(__x);
|
|
__subsf3(uVar2,uVar3);
|
|
iVar4 = __fixsfsi();
|
|
sqrtf(__x_00);
|
|
__addsf3();
|
|
iVar5 = __fixsfsi();
|
|
if (param_2 <= param_4) {
|
|
local_18 = 0;
|
|
local_5c = 0;
|
|
local_58 = 0;
|
|
local_20 = 0;
|
|
local_34 = 0;
|
|
local_24 = 0;
|
|
local_1c = 0xffffffff;
|
|
local_4c = param_2;
|
|
do {
|
|
if (param_1 <= param_3) {
|
|
local_2c = (ushort *)
|
|
(*(int *)(this + 0xb4) + local_4c * *(int *)pCVar13 * 2 + param_1 * 2);
|
|
iVar7 = local_4c - iVar5 / 2;
|
|
iVar8 = local_4c - iVar4 / 2;
|
|
local_3c = (ushort *)0x0;
|
|
iVar12 = param_3 - param_1;
|
|
iVar14 = param_1 - param_3;
|
|
uVar16 = param_1;
|
|
local_28 = param_1 << 1;
|
|
do {
|
|
local_40 = iVar12;
|
|
if (-1 < iVar14) {
|
|
local_40 = iVar14;
|
|
}
|
|
if ((int)local_3c < local_40) {
|
|
uVar2 = __floatunsisf(iVar14 * iVar14 + iVar8 * iVar8 * 4);
|
|
sqrtf(__x_03);
|
|
uVar3 = __floatunsisf(iVar14 * iVar14 + iVar7 * iVar7 * 4);
|
|
sqrtf(__x_04);
|
|
__addsf3(uVar2,uVar3);
|
|
iVar9 = __fixsfsi();
|
|
if (iVar9 <= (int)(uVar18 * 2)) goto LAB_0002bcb6;
|
|
if (param_3 + param_1 <= local_28) break;
|
|
}
|
|
else {
|
|
local_40 = (int)local_3c;
|
|
LAB_0002bcb6:
|
|
uVar10 = (uint)*local_2c;
|
|
bVar21 = CARRY4(local_20,uVar10);
|
|
local_20 = local_20 + uVar10;
|
|
local_24 = local_24 + (uint)bVar21;
|
|
local_18 = local_18 + 1;
|
|
if (local_34 < uVar10) {
|
|
local_58 = uVar16 + local_4c * *(int *)pCVar13;
|
|
local_34 = uVar10;
|
|
}
|
|
if (uVar10 < local_1c) {
|
|
local_5c = uVar16 + local_4c * *(int *)pCVar13;
|
|
local_1c = uVar10;
|
|
}
|
|
local_3c = (ushort *)local_40;
|
|
}
|
|
local_2c = local_2c + 1;
|
|
local_28 = local_28 + 2;
|
|
iVar12 = iVar12 + -2;
|
|
iVar14 = iVar14 + 2;
|
|
uVar16 = uVar16 + 1;
|
|
} while (uVar16 <= param_3);
|
|
}
|
|
local_4c = local_4c + 1;
|
|
} while (local_4c <= param_4);
|
|
goto LAB_0002be94;
|
|
}
|
|
LAB_0002bbd0:
|
|
local_24 = 0;
|
|
local_58 = 0;
|
|
local_5c = 0;
|
|
local_18 = 0;
|
|
local_20 = 0;
|
|
local_34._0_2_ = 0;
|
|
uVar1 = 0xffff;
|
|
}
|
|
else {
|
|
local_34 = 0;
|
|
uVar2 = __floatunsisf();
|
|
uVar3 = __floatsisf(uVar16 * uVar16 - uVar18 * uVar18);
|
|
sqrtf(__x_01);
|
|
__subsf3(uVar2,uVar3);
|
|
iVar4 = __fixsfsi();
|
|
sqrtf(__x_02);
|
|
__addsf3();
|
|
iVar5 = __fixsfsi();
|
|
if (param_4 < param_2) goto LAB_0002bbd0;
|
|
local_18 = 0;
|
|
local_5c = 0;
|
|
local_20 = 0;
|
|
local_24 = 0;
|
|
uVar18 = param_2;
|
|
local_58 = local_18;
|
|
do {
|
|
iVar12 = uVar18 * 2 - (param_4 + param_2);
|
|
iVar12 = iVar12 * iVar12;
|
|
if (param_1 <= param_3) {
|
|
local_3c = (ushort *)(*(int *)(this + 0xb4) + uVar18 * *(int *)pCVar13 * 2 + param_1 * 2);
|
|
local_44 = 0;
|
|
uVar10 = uVar16;
|
|
uVar15 = param_1;
|
|
uVar17 = param_1 << 1;
|
|
uVar20 = param_1 - param_3;
|
|
local_2c = (ushort *)(param_1 * 4 + (iVar4 / 2) * -4);
|
|
local_28 = param_1 * 4 + (iVar5 / 2) * -4;
|
|
do {
|
|
uVar11 = uVar10;
|
|
if (-1 < (int)uVar20) {
|
|
uVar11 = uVar20;
|
|
}
|
|
uVar19 = local_44;
|
|
if ((int)local_44 < (int)uVar11) {
|
|
uVar2 = __floatunsisf((int)local_2c * (uVar15 - iVar4 / 2) + iVar12);
|
|
sqrtf(__x_05);
|
|
uVar3 = __floatunsisf(local_28 * (uVar15 - iVar5 / 2) + iVar12);
|
|
sqrtf(__x_06);
|
|
__addsf3(uVar2,uVar3);
|
|
iVar14 = __fixsfsi();
|
|
uVar19 = uVar11;
|
|
if (iVar14 <= (int)(uVar16 * 2)) goto LAB_0002be10;
|
|
if (param_3 + param_1 <= uVar17) break;
|
|
}
|
|
else {
|
|
LAB_0002be10:
|
|
uVar11 = (uint)*local_3c;
|
|
bVar21 = CARRY4(local_20,uVar11);
|
|
local_20 = local_20 + uVar11;
|
|
local_24 = local_24 + (uint)bVar21;
|
|
local_18 = local_18 + 1;
|
|
if (local_34 < uVar11) {
|
|
local_58 = uVar15 + uVar18 * *(int *)pCVar13;
|
|
local_34 = uVar11;
|
|
}
|
|
local_44 = uVar19;
|
|
if (uVar11 < local_1c) {
|
|
local_5c = uVar15 + uVar18 * *(int *)pCVar13;
|
|
local_1c = uVar11;
|
|
}
|
|
}
|
|
local_3c = local_3c + 1;
|
|
uVar17 = uVar17 + 2;
|
|
uVar10 = uVar10 - 2;
|
|
uVar20 = uVar20 + 2;
|
|
local_28 = local_28 + 4;
|
|
local_2c = (ushort *)((int)local_2c + 4);
|
|
uVar15 = uVar15 + 1;
|
|
} while (uVar15 <= param_3);
|
|
}
|
|
uVar18 = uVar18 + 1;
|
|
} while (uVar18 <= param_4);
|
|
LAB_0002be94:
|
|
uVar1 = (ushort)local_1c;
|
|
}
|
|
local_60 = param_3 + param_1;
|
|
local_78 = param_4 + param_2;
|
|
iVar4 = *(int *)pCVar13;
|
|
iVar5 = ReviseTemperature(this,uVar1,local_5c);
|
|
*param_5 = iVar5;
|
|
iVar5 = ReviseTemperature(this,(ushort)local_34,local_58);
|
|
param_5[1] = iVar5;
|
|
uVar1 = __aeabi_ldivmod(local_20,local_24,local_18,0);
|
|
iVar4 = ReviseTemperature(this,uVar1,((uint)(local_78 * iVar4) >> 1) + (local_60 >> 1));
|
|
param_5[2] = iVar4;
|
|
param_5[3] = local_5c;
|
|
param_5[4] = local_58;
|
|
if (*(int *)(this + 0x50) != 0) {
|
|
iVar4 = CorrectTemperature((int)this,extraout_s0,*param_5);
|
|
*param_5 = iVar4;
|
|
iVar4 = CorrectTemperature((int)this,extraout_s0_00,param_5[1]);
|
|
param_5[1] = iVar4;
|
|
iVar4 = CorrectTemperature((int)this,extraout_s0_01,param_5[2]);
|
|
param_5[2] = iVar4;
|
|
}
|
|
uVar2 = 1;
|
|
joined_r0x0002bf22:
|
|
if (param_6 != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetLineTemperatureInfo @ 0002bf34
|
|
|
|
/* CFunctions::GetLineTemperatureInfo(unsigned short*, unsigned int, int*, unsigned int, unsigned
|
|
int, int, int) */
|
|
|
|
uint __thiscall
|
|
CFunctions::GetLineTemperatureInfo
|
|
(CFunctions *this,ushort *param_1,uint param_2,int *param_3,uint param_4,uint param_5,
|
|
int param_6,int param_7)
|
|
|
|
{
|
|
ushort uVar1;
|
|
uint uVar2;
|
|
undefined4 *puVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
ushort *puVar8;
|
|
uint uVar9;
|
|
ushort *puVar10;
|
|
uint uVar11;
|
|
undefined4 uVar12;
|
|
uint uVar13;
|
|
float extraout_s0;
|
|
float extraout_s0_00;
|
|
float extraout_s0_01;
|
|
CFunctions *local_38;
|
|
int local_20;
|
|
uint local_1c;
|
|
int local_18;
|
|
|
|
if (param_7 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
local_1c = 0xffffffff;
|
|
if (param_6 == 0) {
|
|
uVar6 = *(uint *)(this + 0x37ec);
|
|
if (((param_4 < uVar6) && (param_5 < *(uint *)(this + 0x37f0))) &&
|
|
((1 < param_2 && ((param_1 != (ushort *)0x0 && (param_3 != (int *)0x0)))))) {
|
|
uVar13 = *(int *)(this + 0x37f0) - param_5;
|
|
if (param_2 >> 1 <= *(int *)(this + 0x37f0) - param_5) {
|
|
uVar13 = param_2 >> 1;
|
|
}
|
|
uVar5 = uVar13 + param_5;
|
|
if (param_5 < uVar5) {
|
|
puVar8 = (ushort *)(*(int *)(this + 0xb4) + (param_4 + uVar6 * param_5) * 2);
|
|
puVar10 = param_1;
|
|
do {
|
|
*puVar10 = *puVar8;
|
|
puVar8 = puVar8 + uVar6;
|
|
puVar10 = puVar10 + 1;
|
|
param_5 = param_5 + 1;
|
|
} while (param_5 < uVar5);
|
|
}
|
|
LAB_0002c048:
|
|
local_38 = this + 0x37ec;
|
|
uVar6 = 0;
|
|
if (uVar13 == 0) {
|
|
uVar5 = 0xffffffff;
|
|
local_20 = 0;
|
|
uVar7 = uVar6;
|
|
}
|
|
else {
|
|
local_20 = 0;
|
|
uVar6 = 0;
|
|
uVar2 = uVar13;
|
|
uVar9 = 0;
|
|
do {
|
|
uVar11 = (uint)*param_1;
|
|
uVar7 = uVar2;
|
|
if (uVar11 <= uVar6) {
|
|
uVar7 = uVar9;
|
|
}
|
|
uVar5 = uVar11;
|
|
if (local_1c <= uVar11) {
|
|
uVar5 = local_1c;
|
|
}
|
|
uVar9 = uVar11;
|
|
if (uVar11 <= uVar6) {
|
|
uVar9 = uVar6;
|
|
}
|
|
uVar6 = uVar9;
|
|
local_20 = local_20 + uVar11;
|
|
uVar2 = uVar2 - 1;
|
|
param_1 = param_1 + 1;
|
|
uVar9 = uVar7;
|
|
local_1c = uVar5;
|
|
} while (uVar2 != 0);
|
|
}
|
|
if (param_6 == 0) {
|
|
local_18 = *(uint *)local_38 * (uVar13 - uVar7) + (*(uint *)local_38 >> 1);
|
|
uVar7 = *(uint *)(this + 0x50f0) >> 1;
|
|
}
|
|
else {
|
|
local_18 = (uVar13 - uVar7) + (*(uint *)(this + 0x50f0) >> 1);
|
|
uVar7 = *(uint *)local_38 * param_4;
|
|
param_4 = *(uint *)local_38 >> 1;
|
|
}
|
|
uVar7 = uVar7 + param_4;
|
|
iVar4 = ReviseTemperature(this,(ushort)uVar5,uVar7);
|
|
*param_3 = iVar4;
|
|
iVar4 = ReviseTemperature(this,(ushort)uVar6,uVar7);
|
|
param_3[1] = iVar4;
|
|
uVar1 = __udivsi3(local_20,uVar13);
|
|
iVar4 = ReviseTemperature(this,uVar1,uVar7);
|
|
param_3[2] = iVar4;
|
|
param_3[3] = uVar5;
|
|
param_3[4] = uVar6;
|
|
param_3[5] = local_18;
|
|
if (*(int *)(this + 0x50) != 0) {
|
|
iVar4 = CorrectTemperature((int)this,extraout_s0,*param_3);
|
|
*param_3 = iVar4;
|
|
iVar4 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]);
|
|
param_3[1] = iVar4;
|
|
iVar4 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]);
|
|
param_3[2] = iVar4;
|
|
}
|
|
goto joined_r0x0002c184;
|
|
}
|
|
}
|
|
else if ((((param_4 < *(uint *)(this + 0x37f0)) && (1 < param_2)) && (param_1 != (ushort *)0x0))
|
|
&& ((param_3 != (int *)0x0 && (param_5 < *(uint *)(this + 0x37ec))))) {
|
|
uVar13 = *(int *)(this + 0x37ec) - param_5;
|
|
if (param_2 >> 1 <= *(int *)(this + 0x37ec) - param_5) {
|
|
uVar13 = param_2 >> 1;
|
|
}
|
|
__aeabi_memcpy(param_1,*(int *)(this + 0xb4) + param_4 * *(uint *)(this + 0x37ec) * 2 +
|
|
param_5 * 2,uVar13 << 1);
|
|
goto LAB_0002c048;
|
|
}
|
|
}
|
|
uVar12 = 0xe4ae0005;
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
uVar12 = 0xe4ae0001;
|
|
}
|
|
puVar3 = (undefined4 *)__errno();
|
|
*puVar3 = uVar12;
|
|
uVar13 = 0;
|
|
joined_r0x0002c184:
|
|
if (param_7 != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
return uVar13;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetLineTemperatureInfo2 @ 0002c1a0
|
|
|
|
/* CFunctions::GetLineTemperatureInfo2(unsigned short*, unsigned int, int*, unsigned int, unsigned
|
|
int, unsigned int, unsigned int, int) */
|
|
|
|
uint __thiscall
|
|
CFunctions::GetLineTemperatureInfo2
|
|
(CFunctions *this,ushort *param_1,uint param_2,int *param_3,uint param_4,uint param_5,
|
|
uint param_6,uint param_7,int param_8)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
ushort uVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
undefined4 *puVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
uint uVar15;
|
|
undefined4 uVar16;
|
|
ushort *puVar17;
|
|
int iVar18;
|
|
uint uVar19;
|
|
float extraout_s0;
|
|
float extraout_s0_00;
|
|
float extraout_s0_01;
|
|
uint local_18;
|
|
|
|
if (param_8 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
if ((((*(int *)(this + 0xac) == 0) || (uVar13 = *(uint *)(this + 0x37ec), uVar13 <= param_4)) ||
|
|
(uVar13 <= param_6)) ||
|
|
((*(uint *)(this + 0x37f0) <= param_5 || (*(uint *)(this + 0x37f0) <= param_7)))) {
|
|
LAB_0002c316:
|
|
uVar16 = 0xe4ae0005;
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
uVar16 = 0xe4ae0001;
|
|
}
|
|
puVar7 = (undefined4 *)__errno();
|
|
*puVar7 = uVar16;
|
|
uVar19 = 0;
|
|
}
|
|
else {
|
|
if (param_4 == param_6) {
|
|
if (((param_2 < 2) || (param_1 == (ushort *)0x0)) ||
|
|
((param_3 == (int *)0x0 || (param_5 == param_7)))) goto LAB_0002c316;
|
|
}
|
|
else if (((param_2 < 2) || (param_1 == (ushort *)0x0)) || (param_3 == (int *)0x0))
|
|
goto LAB_0002c316;
|
|
iVar5 = param_5 - param_7;
|
|
uVar14 = iVar5 + (iVar5 >> 0x1f) ^ iVar5 >> 0x1f;
|
|
iVar9 = param_4 - param_6;
|
|
uVar15 = iVar9 + (iVar9 >> 0x1f) ^ iVar9 >> 0x1f;
|
|
if ((int)uVar15 < (int)uVar14) {
|
|
iVar9 = iVar5;
|
|
}
|
|
uVar10 = iVar9 + (iVar9 >> 0x1f) ^ iVar9 >> 0x1f;
|
|
uVar19 = uVar10 + 1;
|
|
uVar11 = param_2 >> 1;
|
|
if ((int)uVar11 <= (int)uVar19) {
|
|
uVar19 = uVar11;
|
|
}
|
|
uVar12 = param_4;
|
|
uVar1 = param_5;
|
|
uVar2 = param_6;
|
|
uVar3 = param_7;
|
|
if (param_4 <= param_6) {
|
|
uVar12 = param_6;
|
|
uVar1 = param_7;
|
|
uVar2 = param_4;
|
|
uVar3 = param_5;
|
|
}
|
|
if ((int)uVar15 < (int)uVar14) {
|
|
if ((int)uVar3 < (int)uVar1) {
|
|
uVar14 = (uVar3 + uVar19) - 1;
|
|
if ((int)uVar1 <= (int)uVar14) {
|
|
uVar14 = uVar1;
|
|
}
|
|
if ((int)uVar3 <= (int)uVar14) {
|
|
local_18 = -param_6 - 1;
|
|
if (-param_6 - 1 <= -param_4 - 1) {
|
|
local_18 = -param_4 - 1;
|
|
}
|
|
local_18 = (uVar3 * uVar13 + -1) - local_18;
|
|
iVar9 = *(int *)(this + 0xb4);
|
|
iVar5 = uVar3 - 1;
|
|
iVar18 = 0;
|
|
puVar17 = param_1;
|
|
do {
|
|
iVar6 = __divsi3(iVar18,uVar1 - uVar3);
|
|
*puVar17 = *(ushort *)(iVar9 + (local_18 + iVar6) * 2);
|
|
local_18 = local_18 + uVar13;
|
|
iVar18 = iVar18 + (uVar12 - uVar2);
|
|
puVar17 = puVar17 + 1;
|
|
iVar5 = iVar5 + 1;
|
|
} while (iVar5 < (int)uVar14);
|
|
}
|
|
}
|
|
else {
|
|
uVar14 = (uVar3 - uVar19) + 1;
|
|
if ((int)uVar14 <= (int)uVar1) {
|
|
uVar14 = uVar1;
|
|
}
|
|
if ((int)uVar14 <= (int)uVar3) {
|
|
uVar15 = -param_6 - 1;
|
|
if (-param_6 - 1 <= -param_4 - 1) {
|
|
uVar15 = -param_4 - 1;
|
|
}
|
|
iVar18 = (uVar3 * uVar13 + -1) - uVar15;
|
|
iVar9 = *(int *)(this + 0xb4);
|
|
iVar6 = uVar3 + 1;
|
|
iVar5 = 0;
|
|
puVar17 = param_1;
|
|
do {
|
|
iVar8 = __divsi3(iVar5,uVar1 - uVar3);
|
|
*puVar17 = *(ushort *)(iVar9 + (iVar18 + iVar8) * 2);
|
|
iVar18 = iVar18 - uVar13;
|
|
iVar5 = iVar5 + ((-1 - uVar12) - uVar15);
|
|
puVar17 = puVar17 + 1;
|
|
iVar6 = iVar6 + -1;
|
|
} while ((int)uVar14 < iVar6);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
uVar14 = (uVar2 + uVar19) - 1;
|
|
if ((int)uVar12 <= (int)uVar14) {
|
|
uVar14 = uVar12;
|
|
}
|
|
if ((int)uVar2 <= (int)uVar14) {
|
|
uVar15 = -param_6 - 1;
|
|
if (-param_6 - 1 <= -param_4 - 1) {
|
|
uVar15 = -param_4 - 1;
|
|
}
|
|
iVar5 = -2 - uVar15;
|
|
iVar9 = *(int *)(this + 0xb4);
|
|
iVar18 = 0;
|
|
puVar17 = param_1;
|
|
do {
|
|
iVar6 = __divsi3(iVar18,uVar12 - uVar2);
|
|
*puVar17 = *(ushort *)(iVar9 + (iVar5 + uVar13 * (iVar6 + uVar3)) * 2 + 2);
|
|
iVar18 = iVar18 + (uVar1 - uVar3);
|
|
puVar17 = puVar17 + 1;
|
|
iVar5 = iVar5 + 1;
|
|
} while (iVar5 < (int)uVar14);
|
|
}
|
|
}
|
|
uVar4 = 0;
|
|
if (uVar19 == 0) {
|
|
local_18 = 0xffff;
|
|
iVar9 = 0;
|
|
}
|
|
else {
|
|
iVar9 = -2 - uVar10;
|
|
iVar5 = -1 - uVar11;
|
|
if ((int)(-1 - uVar11) <= iVar9) {
|
|
iVar5 = iVar9;
|
|
}
|
|
iVar5 = iVar5 + 1;
|
|
iVar9 = 0;
|
|
uVar14 = 0;
|
|
local_18 = 0xffffffff;
|
|
do {
|
|
uVar10 = (uint)*param_1;
|
|
uVar15 = uVar10;
|
|
if (local_18 <= uVar10) {
|
|
uVar15 = local_18;
|
|
}
|
|
local_18 = uVar15;
|
|
uVar15 = uVar10;
|
|
if (uVar10 <= uVar14) {
|
|
uVar15 = uVar14;
|
|
}
|
|
uVar14 = uVar15;
|
|
uVar4 = (ushort)uVar14;
|
|
iVar9 = iVar9 + uVar10;
|
|
iVar5 = iVar5 + 1;
|
|
param_1 = param_1 + 1;
|
|
} while (iVar5 != 0);
|
|
}
|
|
uVar13 = (uVar13 * (param_7 + param_5) >> 1) + (param_6 + param_4 >> 1);
|
|
iVar5 = ReviseTemperature(this,(ushort)local_18,uVar13);
|
|
*param_3 = iVar5;
|
|
iVar5 = ReviseTemperature(this,uVar4,uVar13);
|
|
param_3[1] = iVar5;
|
|
uVar4 = __udivsi3(iVar9,uVar19);
|
|
iVar9 = ReviseTemperature(this,uVar4,uVar13);
|
|
param_3[2] = iVar9;
|
|
if (*(int *)(this + 0x50) != 0) {
|
|
iVar9 = CorrectTemperature((int)this,extraout_s0,*param_3);
|
|
*param_3 = iVar9;
|
|
iVar9 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]);
|
|
param_3[1] = iVar9;
|
|
iVar9 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]);
|
|
param_3[2] = iVar9;
|
|
}
|
|
}
|
|
if (param_8 != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
return uVar19;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetLineTemperatureInfo3 @ 0002c510
|
|
|
|
/* CFunctions::GetLineTemperatureInfo3(int*, unsigned int, int*, unsigned int, unsigned int,
|
|
unsigned int, unsigned int, int) */
|
|
|
|
uint __thiscall
|
|
CFunctions::GetLineTemperatureInfo3
|
|
(CFunctions *this,int *param_1,uint param_2,int *param_3,uint param_4,uint param_5,
|
|
uint param_6,uint param_7,int param_8)
|
|
|
|
{
|
|
uint uVar1;
|
|
ushort uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
undefined4 *puVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
int iVar8;
|
|
CFunctions *pCVar9;
|
|
int iVar10;
|
|
uint uVar11;
|
|
uint *puVar12;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
int iVar15;
|
|
uint uVar16;
|
|
uint uVar17;
|
|
undefined4 uVar18;
|
|
uint uVar19;
|
|
uint uVar20;
|
|
float extraout_s0;
|
|
float extraout_s0_00;
|
|
float extraout_s0_01;
|
|
float extraout_s0_02;
|
|
|
|
if (param_8 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
uVar3 = *(uint *)(this + 0x37ec);
|
|
pCVar9 = this + 0x37ec;
|
|
if ((((param_4 < uVar3) && (param_6 < uVar3)) && (param_5 < *(uint *)(this + 0x37f0))) &&
|
|
(param_7 < *(uint *)(this + 0x37f0))) {
|
|
if (param_4 == param_6) {
|
|
if (((3 < param_2) && (param_1 != (int *)0x0)) &&
|
|
((param_3 != (int *)0x0 && (param_5 != param_7)))) {
|
|
LAB_0002c59e:
|
|
iVar10 = param_5 - param_7;
|
|
uVar14 = iVar10 + (iVar10 >> 0x1f) ^ iVar10 >> 0x1f;
|
|
iVar15 = param_4 - param_6;
|
|
uVar7 = iVar15 + (iVar15 >> 0x1f) ^ iVar15 >> 0x1f;
|
|
if ((int)uVar7 < (int)uVar14) {
|
|
iVar15 = iVar10;
|
|
}
|
|
uVar16 = iVar15 + (iVar15 >> 0x1f) ^ iVar15 >> 0x1f;
|
|
uVar11 = param_2 >> 2;
|
|
uVar17 = uVar16 + 1;
|
|
if ((int)uVar11 <= (int)(uVar16 + 1)) {
|
|
uVar17 = uVar11;
|
|
}
|
|
uVar20 = param_4;
|
|
uVar13 = param_6;
|
|
uVar19 = param_7;
|
|
uVar1 = param_5;
|
|
if (param_4 <= param_6) {
|
|
uVar20 = param_6;
|
|
uVar13 = param_4;
|
|
uVar19 = param_5;
|
|
uVar1 = param_7;
|
|
}
|
|
if ((int)uVar7 < (int)uVar14) {
|
|
if ((int)uVar19 < (int)uVar1) {
|
|
uVar7 = (uVar19 + uVar17) - 1;
|
|
if ((int)uVar1 <= (int)uVar7) {
|
|
uVar7 = uVar1;
|
|
}
|
|
if ((int)uVar19 <= (int)uVar7) {
|
|
iVar10 = *(int *)(this + 0xb4);
|
|
*param_1 = (uint)*(ushort *)(iVar10 + (uVar13 + uVar19 * uVar3) * 2);
|
|
iVar8 = uVar1 - uVar19;
|
|
iVar15 = uVar20 - uVar13;
|
|
puVar12 = (uint *)param_1;
|
|
while ((int)uVar19 < (int)uVar7) {
|
|
puVar12 = puVar12 + 1;
|
|
iVar4 = __divsi3(iVar15,iVar8);
|
|
uVar19 = uVar19 + 1;
|
|
*puVar12 = (uint)*(ushort *)
|
|
(iVar10 + (iVar4 + uVar13 + uVar19 * *(int *)pCVar9) * 2);
|
|
iVar15 = iVar15 + (uVar20 - uVar13);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
uVar7 = (uVar19 - uVar17) + 1;
|
|
if ((int)uVar7 <= (int)uVar1) {
|
|
uVar7 = uVar1;
|
|
}
|
|
if ((int)uVar7 <= (int)uVar19) {
|
|
iVar10 = *(int *)(this + 0xb4);
|
|
*param_1 = (uint)*(ushort *)(iVar10 + (uVar13 + uVar19 * uVar3) * 2);
|
|
iVar15 = uVar1 - uVar19;
|
|
if ((int)uVar7 < (int)uVar19) {
|
|
uVar3 = -param_6 - 1;
|
|
if (-param_6 - 1 <= -param_4 - 1) {
|
|
uVar3 = -param_4 - 1;
|
|
}
|
|
iVar4 = (-1 - uVar20) - uVar3;
|
|
iVar8 = iVar4;
|
|
puVar12 = (uint *)param_1;
|
|
do {
|
|
puVar12 = puVar12 + 1;
|
|
iVar6 = __divsi3(iVar8,iVar15);
|
|
uVar19 = uVar19 - 1;
|
|
*puVar12 = (uint)*(ushort *)
|
|
(iVar10 + (iVar6 + uVar13 + uVar19 * *(int *)pCVar9) * 2);
|
|
iVar8 = iVar8 + iVar4;
|
|
} while ((int)uVar7 < (int)uVar19);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
uVar7 = (uVar13 + uVar17) - 1;
|
|
if ((int)uVar20 <= (int)uVar7) {
|
|
uVar7 = uVar20;
|
|
}
|
|
if ((int)uVar13 <= (int)uVar7) {
|
|
iVar10 = *(int *)(this + 0xb4);
|
|
*param_1 = (uint)*(ushort *)(iVar10 + (uVar19 * uVar3 + uVar13) * 2);
|
|
iVar8 = uVar20 - uVar13;
|
|
iVar15 = uVar1 - uVar19;
|
|
puVar12 = (uint *)param_1;
|
|
while ((int)uVar13 < (int)uVar7) {
|
|
uVar13 = uVar13 + 1;
|
|
puVar12 = puVar12 + 1;
|
|
iVar4 = __divsi3(iVar15,iVar8);
|
|
iVar15 = iVar15 + (uVar1 - uVar19);
|
|
*puVar12 = (uint)*(ushort *)
|
|
(iVar10 + (uVar13 + (iVar4 + uVar19) * *(int *)pCVar9) * 2);
|
|
}
|
|
}
|
|
}
|
|
uVar3 = 0xffff;
|
|
if (uVar17 == 0) {
|
|
uVar14 = 0;
|
|
uVar7 = uVar14;
|
|
}
|
|
else {
|
|
iVar15 = -1 - uVar11;
|
|
if ((int)(-1 - uVar11) <= (int)(-2 - uVar16)) {
|
|
iVar15 = -2 - uVar16;
|
|
}
|
|
iVar15 = iVar15 + 1;
|
|
uVar7 = 0;
|
|
uVar14 = 0;
|
|
puVar12 = (uint *)param_1;
|
|
uVar13 = 0xffffffff;
|
|
do {
|
|
uVar19 = *puVar12;
|
|
puVar12 = puVar12 + 1;
|
|
uVar3 = uVar19;
|
|
if (uVar13 <= uVar19) {
|
|
uVar3 = uVar13;
|
|
}
|
|
uVar13 = uVar19;
|
|
if (uVar19 <= uVar14) {
|
|
uVar13 = uVar14;
|
|
}
|
|
uVar14 = uVar13;
|
|
uVar7 = uVar19 + uVar7;
|
|
iVar15 = iVar15 + 1;
|
|
uVar13 = uVar3;
|
|
} while (iVar15 != 0);
|
|
}
|
|
uVar13 = ((param_7 + param_5) * *(int *)pCVar9 >> 1) + (param_6 + param_4 >> 1);
|
|
iVar15 = ReviseTemperature(this,(ushort)uVar3,uVar13);
|
|
*param_3 = iVar15;
|
|
iVar15 = ReviseTemperature(this,(ushort)uVar14,uVar13);
|
|
param_3[1] = iVar15;
|
|
uVar2 = __udivsi3(uVar7,uVar17);
|
|
iVar15 = ReviseTemperature(this,uVar2,uVar13);
|
|
param_3[2] = iVar15;
|
|
if (*(int *)(this + 0x50) != 0) {
|
|
iVar15 = CorrectTemperature((int)this,extraout_s0,*param_3);
|
|
*param_3 = iVar15;
|
|
iVar15 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]);
|
|
param_3[1] = iVar15;
|
|
iVar15 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]);
|
|
param_3[2] = iVar15;
|
|
}
|
|
if (uVar17 != 0) {
|
|
iVar15 = -1 - uVar11;
|
|
if ((int)(-1 - uVar11) <= (int)(-2 - uVar16)) {
|
|
iVar15 = -2 - uVar16;
|
|
}
|
|
iVar15 = iVar15 + 1;
|
|
do {
|
|
uVar3 = ReviseTemperature(this,(ushort)*param_1,uVar13);
|
|
*param_1 = uVar3;
|
|
if (*(int *)(this + 0x50) != 0) {
|
|
uVar3 = CorrectTemperature((int)this,extraout_s0_02,uVar3);
|
|
*param_1 = uVar3;
|
|
}
|
|
iVar15 = iVar15 + 1;
|
|
param_1 = (int *)((uint *)param_1 + 1);
|
|
} while (iVar15 != 0);
|
|
}
|
|
if (param_8 == 0) {
|
|
return uVar17;
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
return uVar17;
|
|
}
|
|
}
|
|
else if (((3 < param_2) && (param_1 != (int *)0x0)) && (param_3 != (int *)0x0))
|
|
goto LAB_0002c59e;
|
|
}
|
|
}
|
|
uVar18 = 0xe4ae0005;
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
uVar18 = 0xe4ae0001;
|
|
}
|
|
puVar5 = (undefined4 *)__errno();
|
|
*puVar5 = uVar18;
|
|
if (param_8 != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetRgnTemperatureInfo @ 0002c8e4
|
|
|
|
/* CFunctions::GetRgnTemperatureInfo(unsigned int const*, unsigned int, int*, int) */
|
|
|
|
undefined4 __thiscall
|
|
CFunctions::GetRgnTemperatureInfo
|
|
(CFunctions *this,uint *param_1,uint param_2,int *param_3,int param_4)
|
|
|
|
{
|
|
ushort uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
undefined4 *puVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
undefined4 uVar8;
|
|
uint uVar9;
|
|
bool bVar10;
|
|
float extraout_s0;
|
|
float extraout_s0_00;
|
|
float extraout_s0_01;
|
|
uint local_2c;
|
|
uint local_28;
|
|
uint *local_24;
|
|
int local_20;
|
|
uint local_1c;
|
|
uint local_18;
|
|
|
|
if (param_4 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
if ((((param_2 == 0) || (param_1 == (uint *)0x0)) || (param_3 == (int *)0x0)) ||
|
|
(*(int *)(this + 0xac) == 0)) {
|
|
uVar8 = 0xe4ae0005;
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
uVar8 = 0xe4ae0001;
|
|
}
|
|
puVar4 = (undefined4 *)__errno();
|
|
*puVar4 = uVar8;
|
|
uVar8 = 0;
|
|
}
|
|
else {
|
|
local_20 = 0;
|
|
local_2c = 0;
|
|
local_18 = 0;
|
|
local_1c = 0;
|
|
uVar5 = 0;
|
|
uVar6 = 0xffffffff;
|
|
local_28 = param_2;
|
|
local_24 = param_1;
|
|
do {
|
|
uVar9 = *local_24;
|
|
local_24 = local_24 + 1;
|
|
uVar7 = (uint)*(ushort *)(*(int *)(this + 0xb4) + uVar9 * 2);
|
|
uVar2 = uVar9;
|
|
if (uVar6 <= uVar7) {
|
|
uVar2 = local_18;
|
|
}
|
|
local_18 = uVar2;
|
|
if (uVar7 <= uVar5) {
|
|
uVar9 = local_2c;
|
|
}
|
|
bVar10 = CARRY4(local_1c,uVar7);
|
|
local_1c = local_1c + uVar7;
|
|
local_20 = local_20 + (uint)bVar10;
|
|
uVar2 = uVar7;
|
|
if (uVar6 <= uVar7) {
|
|
uVar2 = uVar6;
|
|
}
|
|
if (uVar7 <= uVar5) {
|
|
uVar7 = uVar5;
|
|
}
|
|
uVar5 = uVar7;
|
|
local_28 = local_28 - 1;
|
|
uVar6 = uVar2;
|
|
local_2c = uVar9;
|
|
} while (local_28 != 0);
|
|
iVar3 = ReviseTemperature(this,(ushort)uVar2,local_18);
|
|
*param_3 = iVar3;
|
|
iVar3 = ReviseTemperature(this,(ushort)uVar5,uVar9);
|
|
param_3[1] = iVar3;
|
|
uVar1 = __aeabi_ldivmod(local_1c,local_20,param_2,0);
|
|
iVar3 = ReviseTemperature(this,uVar1,
|
|
(*(uint *)(this + 0x37ec) >> 1) + (*(uint *)(this + 0x50f0) >> 1));
|
|
param_3[2] = iVar3;
|
|
param_3[3] = local_18;
|
|
param_3[4] = uVar9;
|
|
if (*(int *)(this + 0x50) != 0) {
|
|
iVar3 = CorrectTemperature((int)this,extraout_s0,*param_3);
|
|
*param_3 = iVar3;
|
|
iVar3 = CorrectTemperature((int)this,extraout_s0_00,param_3[1]);
|
|
param_3[1] = iVar3;
|
|
iVar3 = CorrectTemperature((int)this,extraout_s0_01,param_3[2]);
|
|
param_3[2] = iVar3;
|
|
}
|
|
uVar8 = 1;
|
|
}
|
|
if (param_4 != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
return uVar8;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetTemperature @ 0002ca50
|
|
|
|
/* CFunctions::GetTemperature(unsigned int, unsigned int, int) */
|
|
|
|
uint __thiscall CFunctions::GetTemperature(CFunctions *this,uint param_1,uint param_2,int param_3)
|
|
|
|
{
|
|
bool bVar1;
|
|
ushort uVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
undefined4 *puVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
int iVar10;
|
|
int iVar11;
|
|
undefined4 uVar12;
|
|
int iVar13;
|
|
uint uVar14;
|
|
float extraout_s0;
|
|
|
|
if (param_3 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
if ((*(int *)(this + 0xac) == 0) || (*(uint *)(this + 0x50f0) <= param_1)) {
|
|
uVar12 = 0xe4ae0005;
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
uVar12 = 0xe4ae0001;
|
|
}
|
|
puVar7 = (undefined4 *)__errno();
|
|
*puVar7 = uVar12;
|
|
uVar14 = 0x80000001;
|
|
}
|
|
else {
|
|
iVar10 = 3;
|
|
if (param_2 - 1 < 5) {
|
|
iVar10 = *(int *)(&DAT_0002cb84 + (param_2 - 1) * 4);
|
|
}
|
|
uVar14 = *(uint *)(this + 0x37ec);
|
|
iVar3 = __udivsi3(param_1,uVar14);
|
|
iVar4 = param_1 - iVar3 * uVar14;
|
|
iVar9 = iVar4 + iVar10;
|
|
iVar4 = iVar4 - iVar10;
|
|
iVar8 = 0;
|
|
iVar5 = 0;
|
|
if (iVar4 <= iVar9) {
|
|
iVar6 = iVar10 * ~uVar14 * 2 + param_1 * 2;
|
|
iVar5 = 0;
|
|
iVar8 = 0;
|
|
do {
|
|
if (((-1 < iVar4) && (iVar4 < (int)uVar14)) &&
|
|
(iVar11 = iVar3 - iVar10, iVar13 = iVar6, iVar3 - iVar10 <= iVar3 + iVar10)) {
|
|
do {
|
|
if ((-1 < iVar11) && (iVar11 < *(int *)(this + 0x37f0))) {
|
|
iVar5 = iVar5 + (uint)*(ushort *)(*(int *)(this + 0xb4) + iVar13);
|
|
iVar8 = iVar8 + 1;
|
|
}
|
|
bVar1 = iVar11 < iVar3 + iVar10;
|
|
iVar11 = iVar11 + 1;
|
|
iVar13 = iVar13 + uVar14 * 2;
|
|
} while (bVar1);
|
|
}
|
|
iVar6 = iVar6 + 2;
|
|
bVar1 = iVar4 < iVar9;
|
|
iVar4 = iVar4 + 1;
|
|
} while (bVar1);
|
|
}
|
|
uVar2 = __udivsi3(iVar5,iVar8);
|
|
uVar14 = ReviseTemperature(this,uVar2,param_1);
|
|
if (*(int *)(this + 0x50) != 0) {
|
|
uVar14 = CorrectTemperature((int)this,extraout_s0,uVar14);
|
|
}
|
|
}
|
|
if (param_3 != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
return uVar14;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Temp2Energe @ 0002cbac
|
|
|
|
/* CFunctions::Temp2Energe(int) const */
|
|
|
|
int __thiscall CFunctions::Temp2Energe(CFunctions *this,int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = param_1 + 50000;
|
|
iVar2 = 0;
|
|
if (-0xe350 < param_1) {
|
|
iVar2 = 0x111;
|
|
if (param_1 < 0x217cb0) {
|
|
iVar2 = (int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
iVar1 = (*(int *)(T2E + iVar2 * 4 + 4) - *(int *)(T2E + iVar2 * 4)) * (iVar1 + iVar2 * -0x2000);
|
|
return ((int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd) + *(int *)(T2E + iVar2 * 4);
|
|
}
|
|
|
|
|
|
|
|
### FUNC dTemp2dEnerge @ 0002cc04
|
|
|
|
/* CFunctions::dTemp2dEnerge(int, int) const */
|
|
|
|
int __thiscall CFunctions::dTemp2dEnerge(CFunctions *this,int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = 0;
|
|
if (-0xe350 < param_1) {
|
|
iVar1 = 0x111;
|
|
if (param_1 < 0x217cb0) {
|
|
iVar1 = (int)(param_1 + 50000 + ((uint)(param_1 + 50000 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
iVar1 = (*(int *)(T2E + iVar1 * 4 + 4) - *(int *)(T2E + iVar1 * 4)) * param_2;
|
|
return (int)(iVar1 + ((uint)(iVar1 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
|
|
|
|
|
|
### FUNC dEnerge2dTemp @ 0002cc54
|
|
|
|
/* CFunctions::dEnerge2dTemp(int, int) const */
|
|
|
|
int __thiscall CFunctions::dEnerge2dTemp(CFunctions *this,int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = 0;
|
|
if (-0xe350 < param_1) {
|
|
iVar1 = 0x111;
|
|
if (param_1 < 0x217cb0) {
|
|
iVar1 = (int)(param_1 + 50000 + ((uint)(param_1 + 50000 >> 0x1f) >> 0x13)) >> 0xd;
|
|
}
|
|
}
|
|
return *(int *)(E2TAccQ10 + iVar1 * 4) * param_2 >> 10;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Energe2Temp @ 0002cc98
|
|
|
|
/* CFunctions::Energe2Temp(int) const */
|
|
|
|
int __thiscall CFunctions::Energe2Temp(CFunctions *this,int param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
|
|
uVar2 = 0x112;
|
|
uVar1 = 0;
|
|
do {
|
|
uVar3 = uVar1 + uVar2 >> 1;
|
|
if (*(int *)(T2E + uVar3 * 4) <= param_1) {
|
|
uVar1 = uVar3;
|
|
uVar3 = uVar2;
|
|
}
|
|
uVar2 = uVar3;
|
|
} while (uVar1 + 1 < uVar2);
|
|
return uVar1 * 0x2000 +
|
|
(*(int *)(E2TAccQ10 + uVar1 * 4) * (param_1 - *(int *)(T2E + uVar1 * 4)) >> 10) + -50000;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ConvertInnerTemp2mC @ 0002ccfc
|
|
|
|
/* CFunctions::ConvertInnerTemp2mC(unsigned short) const */
|
|
|
|
int __thiscall CFunctions::ConvertInnerTemp2mC(CFunctions *this,ushort param_1)
|
|
|
|
{
|
|
return ((uint)param_1 << (*(uint *)(this + 0x5104) & 0xff)) + *(int *)(this + 0x5100);
|
|
}
|
|
|
|
|
|
|
|
### FUNC CalibrationMain_RTV @ 0002cd10
|
|
|
|
/* CFunctions::CalibrationMain_RTV(unsigned short const*) */
|
|
|
|
void __thiscall CFunctions::CalibrationMain_RTV(CFunctions *this,ushort *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
undefined2 *puVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
short *psVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
ushort *puVar9;
|
|
int iVar10;
|
|
short *local_18;
|
|
|
|
local_18 = *(short **)(this + 0x3114);
|
|
puVar9 = (ushort *)0x0;
|
|
if (*(int *)(this + 0x37a0) != 0) {
|
|
puVar9 = *(ushort **)(this + 0x378c);
|
|
}
|
|
iVar7 = *(int *)(this + 0x50f0);
|
|
iVar1 = iVar7 * 2;
|
|
iVar2 = *(int *)(this + 0x2e28);
|
|
if (iVar7 != 0) {
|
|
iVar10 = *(int *)(this + 0x3120);
|
|
puVar3 = *(undefined2 **)(this + 0xb4);
|
|
do {
|
|
iVar8 = (int)((uint)*param_1 - (uint)*puVar9) >> 1;
|
|
puVar9 = puVar9 + 1;
|
|
param_1 = param_1 + 1;
|
|
uVar4 = 0;
|
|
if (iVar2 != 1) {
|
|
uVar4 = 0;
|
|
psVar6 = local_18;
|
|
do {
|
|
if (iVar8 <= *psVar6) break;
|
|
psVar6 = psVar6 + 1;
|
|
uVar4 = uVar4 + 1;
|
|
} while (uVar4 < iVar2 - 1U);
|
|
}
|
|
iVar5 = iVar1 * uVar4 * 2;
|
|
iVar8 = ((int)(iVar8 * (uint)*(ushort *)(iVar10 + iVar5)) >> 0xc) +
|
|
(uint)*(ushort *)(iVar10 + iVar5 + 2);
|
|
if (iVar8 < 1) {
|
|
iVar8 = 0;
|
|
}
|
|
if (0xfffe < iVar8) {
|
|
iVar8 = 0xffff;
|
|
}
|
|
*puVar3 = (short)iVar8;
|
|
local_18 = local_18 + iVar2 + -1;
|
|
iVar7 = iVar7 + -1;
|
|
puVar3 = puVar3 + 1;
|
|
iVar10 = iVar10 + 4;
|
|
} while (iVar7 != 0);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC BlindCompensation @ 0002cde8
|
|
|
|
/* CFunctions::BlindCompensation(unsigned short*) */
|
|
|
|
void __thiscall CFunctions::BlindCompensation(CFunctions *this,ushort *param_1)
|
|
|
|
{
|
|
ushort uVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
undefined4 uVar4;
|
|
uint uVar5;
|
|
int *piVar6;
|
|
|
|
uVar3 = *(uint *)(this + *(int *)(this + 0x3108) * 4 + 0x2f28);
|
|
if (uVar3 != 0) {
|
|
piVar6 = (int *)(*(int *)(this + 0x3124) + 0x14);
|
|
uVar5 = 0;
|
|
do {
|
|
switch(piVar6[-4]) {
|
|
case 3:
|
|
iVar2 = (uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]];
|
|
uVar4 = 3;
|
|
goto LAB_0002cebc;
|
|
case 4:
|
|
uVar1 = (ushort)((uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] +
|
|
(uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] >> 2);
|
|
break;
|
|
case 5:
|
|
iVar2 = (uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]] +
|
|
(uint)param_1[*piVar6] + (uint)param_1[piVar6[1]];
|
|
uVar4 = 5;
|
|
goto LAB_0002cebc;
|
|
case 6:
|
|
iVar2 = (uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] + (uint)param_1[piVar6[-1]] +
|
|
(uint)param_1[*piVar6] + (uint)param_1[piVar6[1]] + (uint)param_1[piVar6[2]];
|
|
uVar4 = 6;
|
|
LAB_0002cebc:
|
|
uVar1 = __udivsi3(iVar2,uVar4);
|
|
break;
|
|
case 7:
|
|
uVar1 = __divsi3((uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] +
|
|
(uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] +
|
|
(uint)param_1[piVar6[1]] + (uint)param_1[piVar6[2]] +
|
|
(uint)param_1[piVar6[3]],7);
|
|
break;
|
|
case 8:
|
|
uVar1 = (ushort)((int)((uint)param_1[piVar6[-2]] + (uint)param_1[piVar6[-3]] +
|
|
(uint)param_1[piVar6[-1]] + (uint)param_1[*piVar6] +
|
|
(uint)param_1[piVar6[1]] + (uint)param_1[piVar6[2]] +
|
|
(uint)param_1[piVar6[3]] + (uint)param_1[piVar6[4]]) >> 3);
|
|
break;
|
|
default:
|
|
goto switchD_0002ce1a_default;
|
|
}
|
|
param_1[piVar6[-5]] = uVar1;
|
|
piVar6 = piVar6 + 10;
|
|
uVar5 = uVar5 + 1;
|
|
} while (uVar5 < uVar3);
|
|
}
|
|
switchD_0002ce1a_default:
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ConvertResponse2Temperature @ 0002cf80
|
|
|
|
/* CFunctions::ConvertResponse2Temperature(unsigned short const*) */
|
|
|
|
void __thiscall CFunctions::ConvertResponse2Temperature(CFunctions *this,ushort *param_1)
|
|
|
|
{
|
|
undefined2 *puVar1;
|
|
ushort *puVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
|
|
puVar2 = (ushort *)0x0;
|
|
if (*(int *)(this + 0x37a0) != 0) {
|
|
puVar2 = *(ushort **)(this + 0x378c);
|
|
}
|
|
iVar3 = 50000 - *(int *)(this + 0x5100) >> (*(uint *)(this + 0x5104) & 0xff);
|
|
if (iVar3 < 1) {
|
|
iVar3 = 0;
|
|
}
|
|
if (0xfffe < iVar3) {
|
|
iVar3 = 0xffff;
|
|
}
|
|
iVar4 = *(int *)(this + 0x50f0);
|
|
if (iVar4 != 0) {
|
|
puVar1 = *(undefined2 **)(this + 0xb4);
|
|
do {
|
|
iVar5 = ((uint)*param_1 - (uint)*puVar2) * 3 + iVar3;
|
|
if (iVar5 < 1) {
|
|
iVar5 = 0;
|
|
}
|
|
if (0xfffe < iVar5) {
|
|
iVar5 = 0xffff;
|
|
}
|
|
*puVar1 = (short)iVar5;
|
|
iVar4 = iVar4 + -1;
|
|
puVar1 = puVar1 + 1;
|
|
puVar2 = puVar2 + 1;
|
|
param_1 = param_1 + 1;
|
|
} while (iVar4 != 0);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetTemperaturemC @ 0002d00c
|
|
|
|
/* CFunctions::GetTemperaturemC(int*, unsigned int, int, int) */
|
|
|
|
undefined4 __thiscall
|
|
CFunctions::GetTemperaturemC(CFunctions *this,int *param_1,uint param_2,int param_3,int param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 *puVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
ushort *puVar6;
|
|
float extraout_s0;
|
|
|
|
if (param_4 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
if ((param_1 == (int *)0x0) || (*(int *)(this + 0xac) == 0)) {
|
|
uVar5 = 0xe4ae0005;
|
|
if (*(int *)(this + 0xac) != 0) {
|
|
uVar5 = 0xe4ae0001;
|
|
}
|
|
puVar2 = (undefined4 *)__errno();
|
|
*puVar2 = uVar5;
|
|
uVar5 = 0;
|
|
}
|
|
else {
|
|
uVar3 = *(uint *)(this + 0x50f0);
|
|
if (param_2 >> 2 <= *(uint *)(this + 0x50f0)) {
|
|
uVar3 = param_2 >> 2;
|
|
}
|
|
if (uVar3 != 0) {
|
|
puVar6 = *(ushort **)(this + 0xb4);
|
|
uVar4 = 0;
|
|
do {
|
|
uVar1 = ReviseTemperature(this,*puVar6,uVar4);
|
|
puVar6 = puVar6 + 1;
|
|
if (param_3 != 0) {
|
|
uVar1 = CorrectTemperature((int)this,extraout_s0,uVar1);
|
|
}
|
|
param_1[uVar4] = uVar1;
|
|
uVar4 = uVar4 + 1;
|
|
} while (uVar4 < uVar3);
|
|
}
|
|
uVar5 = 1;
|
|
}
|
|
if (param_4 != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetCenterTemperatureSharpness @ 0002d0c0
|
|
|
|
/* CFunctions::GetCenterTemperatureSharpness(unsigned int, unsigned int) */
|
|
|
|
uint __thiscall
|
|
CFunctions::GetCenterTemperatureSharpness(CFunctions *this,uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
int iVar10;
|
|
uint uVar11;
|
|
int iVar12;
|
|
uint uVar13;
|
|
int iVar14;
|
|
pthread_mutex_t *__mutex;
|
|
uint uVar15;
|
|
int iVar16;
|
|
uint uVar17;
|
|
int iVar18;
|
|
int local_1c;
|
|
|
|
uVar6 = 0x10;
|
|
if ((0xf < param_1) &&
|
|
(uVar6 = *(uint *)(this + 0x37ec) >> 1, param_1 <= *(uint *)(this + 0x37ec) >> 1)) {
|
|
uVar6 = param_1;
|
|
}
|
|
uVar1 = *(uint *)(this + 0x37f0);
|
|
uVar15 = 9;
|
|
if ((8 < param_2) && (uVar15 = uVar1 >> 1, param_2 <= uVar1 >> 1)) {
|
|
uVar15 = param_2;
|
|
}
|
|
iVar8 = *(int *)(this + 0x37ec);
|
|
__mutex = (pthread_mutex_t *)(this + 0xb0);
|
|
pthread_mutex_lock(__mutex);
|
|
uVar9 = uVar1 + uVar15 >> 1;
|
|
uVar5 = iVar8 + uVar6 >> 1;
|
|
uVar6 = iVar8 - uVar6 >> 1;
|
|
if ((*(int *)(this + 0xac) == 0) || (uVar15 = uVar1 - uVar15 >> 1, uVar9 <= uVar15)) {
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar1 = 0;
|
|
}
|
|
else {
|
|
iVar10 = *(int *)(this + 0xb4);
|
|
iVar12 = *(int *)(this + 0x37ec);
|
|
iVar8 = uVar6 * 2 + iVar12 * (uVar15 * 2 + 2);
|
|
iVar7 = uVar6 * 2 + iVar12 * (uVar15 - 1) * 2;
|
|
uVar1 = 0;
|
|
local_1c = 0;
|
|
do {
|
|
iVar4 = uVar6 - uVar5;
|
|
iVar14 = iVar10;
|
|
if (uVar5 != uVar6) {
|
|
do {
|
|
uVar13 = (uint)*(ushort *)(iVar14 + -2 + iVar7);
|
|
uVar2 = (uint)*(ushort *)(iVar14 + iVar7 + 2);
|
|
iVar16 = uVar13 - uVar2;
|
|
uVar17 = iVar16 >> 0x1f;
|
|
uVar11 = (uint)*(ushort *)(iVar14 + -2 + iVar8);
|
|
iVar18 = uVar13 - uVar11;
|
|
uVar3 = iVar18 >> 0x1f;
|
|
local_1c = ((iVar18 + uVar3 ^ uVar3) + (iVar16 + uVar17 ^ uVar17) >> 1) + local_1c;
|
|
uVar1 = (uVar2 + uVar13 + uVar11 + (uint)*(ushort *)(iVar14 + iVar8 + 2) >> 2) + uVar1;
|
|
iVar4 = iVar4 + 1;
|
|
iVar14 = iVar14 + 2;
|
|
} while (iVar4 != 0);
|
|
}
|
|
iVar10 = iVar10 + iVar12 * 2;
|
|
uVar15 = uVar15 + 1;
|
|
} while (uVar15 != uVar9);
|
|
pthread_mutex_unlock(__mutex);
|
|
if (uVar1 >> 0x10 != 0) {
|
|
uVar1 = __udivsi3(local_1c);
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC CalcSD @ 0002d210
|
|
|
|
/* CFunctions::CalcSD(int, int) */
|
|
|
|
undefined4 __thiscall CFunctions::CalcSD(CFunctions *this,int param_1,int param_2)
|
|
|
|
{
|
|
longlong lVar1;
|
|
pthread_mutex_t *__mutex;
|
|
int iVar2;
|
|
ushort *puVar3;
|
|
undefined4 uVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
int iVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
bool bVar14;
|
|
longlong lVar15;
|
|
undefined8 uVar16;
|
|
undefined8 uVar17;
|
|
undefined4 in_stack_ffffffb0;
|
|
uint local_2c;
|
|
|
|
uVar11 = 0x10;
|
|
if ((0xf < param_1) &&
|
|
(uVar11 = *(uint *)(this + 0x37ec), (uint)param_1 <= *(uint *)(this + 0x37ec))) {
|
|
uVar11 = param_1;
|
|
}
|
|
iVar5 = *(int *)(this + 0x37ec);
|
|
uVar9 = *(uint *)(this + 0x37f0);
|
|
__mutex = (pthread_mutex_t *)(this + 0xb0);
|
|
pthread_mutex_lock(__mutex);
|
|
uVar7 = uVar9;
|
|
if ((uint)param_2 <= uVar9) {
|
|
uVar7 = param_2;
|
|
}
|
|
uVar12 = 9;
|
|
if (8 < param_2) {
|
|
uVar12 = uVar7;
|
|
}
|
|
uVar8 = uVar9 + uVar12 >> 1;
|
|
uVar9 = uVar9 - uVar12 >> 1;
|
|
uVar7 = iVar5 + uVar11 >> 1;
|
|
uVar11 = iVar5 - uVar11 >> 1;
|
|
if (*(int *)(this + 0xac) == 0) {
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar12 = 0;
|
|
iVar5 = 0;
|
|
lVar1 = 0;
|
|
if (uVar9 < uVar8) {
|
|
iVar6 = *(int *)(this + 0xb4);
|
|
iVar2 = *(int *)(this + 0x37ec);
|
|
lVar1 = 0;
|
|
uVar12 = 0;
|
|
iVar5 = 0;
|
|
local_2c = uVar9;
|
|
do {
|
|
if (uVar11 < uVar7) {
|
|
puVar3 = (ushort *)(iVar6 + iVar2 * local_2c * 2 + uVar11 * 2);
|
|
iVar10 = uVar7 - uVar11;
|
|
do {
|
|
uVar13 = (uint)*puVar3;
|
|
lVar15 = __muldi3(uVar13,0,uVar13,0);
|
|
lVar1 = lVar15 + lVar1;
|
|
bVar14 = CARRY4(uVar12,uVar13);
|
|
uVar12 = uVar12 + uVar13;
|
|
iVar5 = iVar5 + (uint)bVar14;
|
|
iVar10 = iVar10 + -1;
|
|
puVar3 = puVar3 + 1;
|
|
} while (iVar10 != 0);
|
|
}
|
|
local_2c = local_2c + 1;
|
|
} while (local_2c != uVar8);
|
|
}
|
|
pthread_mutex_unlock(__mutex);
|
|
iVar2 = (uVar8 - uVar9) * (uVar7 - uVar11);
|
|
uVar16 = __floatdidf(uVar12,iVar5);
|
|
uVar4 = (undefined4)((ulonglong)uVar16 >> 0x20);
|
|
uVar16 = __muldf3((int)uVar16,uVar4,(int)uVar16,uVar4);
|
|
uVar17 = __floatunsidf(iVar2);
|
|
uVar16 = __divdf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17,
|
|
(int)((ulonglong)uVar17 >> 0x20));
|
|
uVar17 = __floatdidf((int)lVar1,(int)((ulonglong)lVar1 >> 0x20));
|
|
uVar16 = __subdf3((int)uVar17,(int)((ulonglong)uVar17 >> 0x20),(int)uVar16,
|
|
(int)((ulonglong)uVar16 >> 0x20));
|
|
uVar17 = __floatunsidf(iVar2 + -1);
|
|
__divdf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17,
|
|
(int)((ulonglong)uVar17 >> 0x20));
|
|
sqrt((double)CONCAT44(__mutex,in_stack_ffffffb0));
|
|
uVar4 = __fixdfsi();
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC LocalMap7x7 @ 0002d390
|
|
|
|
/* CFunctions::LocalMap7x7(int*, unsigned short const*, unsigned int) */
|
|
|
|
void __thiscall CFunctions::LocalMap7x7(CFunctions *this,int *param_1,ushort *param_2,uint param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
int iVar11;
|
|
int local_20;
|
|
uint local_1c;
|
|
ushort *local_18;
|
|
|
|
uVar5 = (uint)param_2[1];
|
|
uVar8 = (uint)*param_2;
|
|
local_1c = 0;
|
|
local_20 = -3;
|
|
uVar2 = uVar8;
|
|
uVar4 = uVar8;
|
|
local_18 = param_2;
|
|
while( true ) {
|
|
uVar7 = uVar2;
|
|
if (uVar4 <= uVar2) {
|
|
uVar7 = uVar4;
|
|
}
|
|
if (uVar2 <= uVar5) {
|
|
uVar4 = uVar7;
|
|
}
|
|
uVar10 = (uint)local_18[2];
|
|
uVar7 = uVar10;
|
|
if (uVar4 <= uVar10) {
|
|
uVar7 = uVar4;
|
|
}
|
|
uVar3 = uVar2;
|
|
if (uVar2 <= uVar5) {
|
|
uVar3 = uVar5;
|
|
}
|
|
if (uVar10 <= uVar3) {
|
|
uVar4 = uVar7;
|
|
}
|
|
uVar7 = (uint)local_18[4];
|
|
uVar5 = uVar7;
|
|
if (uVar4 <= uVar7) {
|
|
uVar5 = uVar4;
|
|
}
|
|
uVar6 = uVar10;
|
|
if (uVar10 <= uVar3) {
|
|
uVar6 = uVar3;
|
|
}
|
|
if (uVar7 <= uVar6) {
|
|
uVar4 = uVar5;
|
|
}
|
|
uVar3 = (uint)local_18[6];
|
|
uVar5 = uVar3;
|
|
if (uVar4 <= uVar3) {
|
|
uVar5 = uVar4;
|
|
}
|
|
uVar9 = uVar7;
|
|
if (uVar7 <= uVar6) {
|
|
uVar9 = uVar6;
|
|
}
|
|
if (uVar3 <= uVar9) {
|
|
uVar4 = uVar5;
|
|
}
|
|
local_18 = local_18 + *(int *)(this + 0x37ec) * 2;
|
|
uVar5 = uVar3;
|
|
if (uVar3 <= uVar9) {
|
|
uVar5 = uVar9;
|
|
}
|
|
local_1c = local_1c + uVar2 + uVar10 + uVar7 + uVar3;
|
|
if (local_20 == 0) break;
|
|
local_20 = local_20 + 1;
|
|
uVar2 = (uint)*local_18;
|
|
}
|
|
iVar11 = -3;
|
|
if (param_3 <= (uVar5 - uVar4) * 0x20) {
|
|
local_1c = local_1c >> 4;
|
|
uVar2 = uVar5 - local_1c;
|
|
if (uVar5 - local_1c <= param_3) {
|
|
uVar2 = param_3;
|
|
}
|
|
uVar5 = local_1c - uVar4;
|
|
if (local_1c - uVar4 <= uVar2) {
|
|
uVar5 = uVar2;
|
|
}
|
|
iVar1 = __udivsi3(0x8000,uVar5);
|
|
while( true ) {
|
|
*param_1 = iVar1 * (uVar8 - local_1c) + *param_1;
|
|
param_1[2] = iVar1 * (param_2[2] - local_1c) + param_1[2];
|
|
param_1[4] = iVar1 * (param_2[4] - local_1c) + param_1[4];
|
|
param_1[6] = iVar1 * (param_2[6] - local_1c) + param_1[6];
|
|
param_2 = param_2 + *(int *)(this + 0x37ec) * 2;
|
|
if (iVar11 == 0) break;
|
|
param_1 = param_1 + *(int *)(this + 0x37ec) * 2;
|
|
iVar11 = iVar11 + 1;
|
|
uVar8 = (uint)*param_2;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC LocalMap7x7_Simple @ 0002d4e8
|
|
|
|
/* CFunctions::LocalMap7x7_Simple(int*, unsigned short const*, unsigned int) */
|
|
|
|
void __thiscall
|
|
CFunctions::LocalMap7x7_Simple(CFunctions *this,int *param_1,ushort *param_2,uint param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
ushort *puVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
int local_20;
|
|
|
|
iVar1 = *(int *)(this + 0x37ec);
|
|
local_20 = -3;
|
|
uVar11 = (uint)param_2[1];
|
|
uVar2 = (uint)*param_2;
|
|
uVar8 = 0;
|
|
puVar4 = param_2;
|
|
uVar10 = uVar2;
|
|
while( true ) {
|
|
uVar12 = uVar2;
|
|
if (uVar10 <= uVar2) {
|
|
uVar12 = uVar10;
|
|
}
|
|
if (uVar2 <= uVar11) {
|
|
uVar10 = uVar12;
|
|
}
|
|
uVar9 = (uint)puVar4[2];
|
|
uVar12 = uVar9;
|
|
if (uVar10 <= uVar9) {
|
|
uVar12 = uVar10;
|
|
}
|
|
uVar3 = uVar2;
|
|
if (uVar2 <= uVar11) {
|
|
uVar3 = uVar11;
|
|
}
|
|
if (uVar9 <= uVar3) {
|
|
uVar10 = uVar12;
|
|
}
|
|
uVar12 = (uint)puVar4[4];
|
|
uVar11 = uVar12;
|
|
if (uVar10 <= uVar12) {
|
|
uVar11 = uVar10;
|
|
}
|
|
uVar7 = uVar9;
|
|
if (uVar9 <= uVar3) {
|
|
uVar7 = uVar3;
|
|
}
|
|
if (uVar12 <= uVar7) {
|
|
uVar10 = uVar11;
|
|
}
|
|
uVar3 = (uint)puVar4[6];
|
|
uVar11 = uVar3;
|
|
if (uVar10 <= uVar3) {
|
|
uVar11 = uVar10;
|
|
}
|
|
uVar5 = uVar12;
|
|
if (uVar12 <= uVar7) {
|
|
uVar5 = uVar7;
|
|
}
|
|
if (uVar3 <= uVar5) {
|
|
uVar10 = uVar11;
|
|
}
|
|
puVar4 = puVar4 + iVar1 * 2;
|
|
uVar11 = uVar3;
|
|
if (uVar3 <= uVar5) {
|
|
uVar11 = uVar5;
|
|
}
|
|
uVar8 = uVar8 + uVar2 + uVar9 + uVar12 + uVar3;
|
|
if (local_20 == 0) break;
|
|
local_20 = local_20 + 1;
|
|
uVar2 = (uint)*puVar4;
|
|
}
|
|
iVar6 = 0;
|
|
if (param_3 <= (uVar11 - uVar10) * 0x20) {
|
|
uVar8 = uVar8 >> 4;
|
|
uVar2 = uVar11 - uVar8;
|
|
if (uVar11 - uVar8 <= param_3) {
|
|
uVar2 = param_3;
|
|
}
|
|
uVar11 = uVar8 - uVar10;
|
|
if (uVar8 - uVar10 <= uVar2) {
|
|
uVar11 = uVar2;
|
|
}
|
|
iVar6 = __udivsi3(0x8000,uVar11);
|
|
iVar6 = iVar6 * (param_2[iVar1 * 3 + 3] - uVar8);
|
|
}
|
|
*param_1 = iVar6;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SetEX @ 0002d5fc
|
|
|
|
/* CFunctions::SetEX(EX, int, int) */
|
|
|
|
void __thiscall CFunctions::SetEX(CFunctions *this,uint param_2,int param_3,int param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0xb0));
|
|
if (param_2 - 1 < 4) {
|
|
*(uint *)(this + 0x3814) = param_2;
|
|
uVar2 = *(uint *)(this + 0x37f0);
|
|
uVar1 = (uVar2 - (uVar2 >> (param_2 & 0xff))) - 1;
|
|
uVar2 = param_4 - (uVar2 >> (param_2 + 1 & 0xff));
|
|
if ((int)uVar2 < 1) {
|
|
uVar2 = 0;
|
|
}
|
|
if (uVar2 <= uVar1) {
|
|
uVar1 = uVar2;
|
|
}
|
|
uVar3 = *(uint *)(this + 0x37ec);
|
|
uVar2 = (uVar3 - (uVar3 >> (param_2 & 0xff))) - 2;
|
|
uVar3 = param_3 - (uVar3 >> (param_2 + 1 & 0xff));
|
|
if ((int)uVar3 < 1) {
|
|
uVar3 = 0;
|
|
}
|
|
if (uVar3 <= uVar2) {
|
|
uVar2 = uVar3;
|
|
}
|
|
uVar2 = uVar2 & 0xfffffffe;
|
|
}
|
|
else {
|
|
uVar2 = 0;
|
|
*(undefined4 *)(this + 0x3814) = 0;
|
|
uVar1 = 0;
|
|
}
|
|
*(uint *)(this + 0x381c) = uVar1;
|
|
*(uint *)(this + 0x3818) = uVar2;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0xb0));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetEX @ 0002d698
|
|
|
|
/* CFunctions::GetEX() */
|
|
|
|
undefined4 __thiscall CFunctions::GetEX(CFunctions *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0x3814);
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_put_nowiden @ 0002d6a4
|
|
|
|
/* std::ostream::_M_put_nowiden(char const*) */
|
|
|
|
void __thiscall std::ostream::_M_put_nowiden(ostream *this,char *param_1)
|
|
|
|
{
|
|
size_t sVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
size_t sVar5;
|
|
uint uVar6;
|
|
ostream *local_20;
|
|
undefined1 local_1c;
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
local_20 = this;
|
|
local_1c = priv::__init_bostr<char,std::char_traits<char>>(this);
|
|
if (!(bool)local_1c) goto LAB_0002d7b4;
|
|
sVar1 = strlen(param_1);
|
|
iVar2 = *(int *)(*(int *)this + -0xc);
|
|
if (((int)sVar1 < *(int *)(this + iVar2 + 0x1c)) &&
|
|
(iVar3 = *(int *)(this + iVar2 + 0x1c) - sVar1, iVar3 != 0)) {
|
|
piVar4 = *(int **)(this + iVar2 + 0x48);
|
|
if ((*(uint *)(this + iVar2 + 4) & 7) == 1) {
|
|
sVar5 = (**(code **)(*piVar4 + 0x2c))(piVar4,param_1,sVar1);
|
|
if (sVar5 == sVar1) {
|
|
iVar2 = (**(code **)(**(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) + 0x30))
|
|
(*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48),
|
|
this[*(int *)(*(int *)this + -0xc) + 0x44],iVar3);
|
|
*(undefined4 *)(this + *(int *)(*(int *)this + -0xc) + 0x1c) = 0;
|
|
if (iVar2 == iVar3) goto LAB_0002d7b4;
|
|
goto LAB_0002d792;
|
|
}
|
|
}
|
|
else {
|
|
iVar2 = (**(code **)(*piVar4 + 0x30))
|
|
(piVar4,this[iVar2 + 0x44],iVar3,*(code **)(*piVar4 + 0x30),iVar3,1,1);
|
|
if (iVar2 == iVar3) {
|
|
sVar5 = (**(code **)(**(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) + 0x2c))
|
|
(*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48),param_1,sVar1);
|
|
goto LAB_0002d746;
|
|
}
|
|
}
|
|
*(undefined4 *)(this + *(int *)(*(int *)this + -0xc) + 0x1c) = 0;
|
|
}
|
|
else {
|
|
sVar5 = (**(code **)(**(int **)(this + iVar2 + 0x48) + 0x2c))
|
|
(*(int **)(this + iVar2 + 0x48),param_1,sVar1);
|
|
LAB_0002d746:
|
|
*(undefined4 *)(this + *(int *)(*(int *)this + -0xc) + 0x1c) = 0;
|
|
if (sVar5 == sVar1) goto LAB_0002d7b4;
|
|
}
|
|
LAB_0002d792:
|
|
iVar2 = *(int *)(*(int *)this + -0xc);
|
|
uVar6 = *(uint *)(this + iVar2 + 8) | (uint)(*(int *)(this + iVar2 + 0x48) == 0) | 4;
|
|
*(uint *)(this + iVar2 + 8) = uVar6;
|
|
if ((uVar6 & *(uint *)(this + iVar2 + 0x14)) != 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
ios_base::_M_throw_failure();
|
|
}
|
|
LAB_0002d7b4:
|
|
sentry::~sentry((sentry *)&local_20);
|
|
if (__stack_chk_guard == local_18) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~sentry @ 0002d824
|
|
|
|
/* std::ostream::sentry::~sentry() */
|
|
|
|
sentry * __thiscall std::ostream::sentry::~sentry(sentry *this)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (((int)((uint)*(byte *)((int)*(int **)this + *(int *)(**(int **)this + -0xc) + 5) << 0x1a) < 0)
|
|
&& (iVar1 = FUN_00030e64(), iVar1 == 0)) {
|
|
flush(*(ostream **)this);
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __init_bostr<char,std::char_traits<char>> @ 0002d84e
|
|
|
|
/* bool std::priv::__init_bostr<char, std::char_traits<char> >(std::ostream&) */
|
|
|
|
bool std::priv::__init_bostr<char,std::char_traits<char>>(ostream *param_1)
|
|
|
|
{
|
|
bool bVar1;
|
|
int iVar2;
|
|
|
|
iVar2 = *(int *)(*(int *)param_1 + -0xc);
|
|
bVar1 = false;
|
|
if (*(int *)(param_1 + iVar2 + 8) == 0) {
|
|
if (*(int *)(param_1 + iVar2 + 0x48) == 0) {
|
|
*(undefined4 *)(param_1 + iVar2 + 8) = 1;
|
|
if (((byte)param_1[iVar2 + 0x14] & 1) != 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
ios_base::_M_throw_failure();
|
|
}
|
|
iVar2 = *(int *)(*(int *)param_1 + -0xc);
|
|
}
|
|
if (*(ostream **)(param_1 + iVar2 + 0x4c) != (ostream *)0x0) {
|
|
ostream::flush(*(ostream **)(param_1 + iVar2 + 0x4c));
|
|
iVar2 = *(int *)(*(int *)param_1 + -0xc);
|
|
}
|
|
bVar1 = true;
|
|
if (*(int *)(param_1 + iVar2 + 8) != 0) {
|
|
bVar1 = false;
|
|
}
|
|
}
|
|
return bVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC flush @ 0002d8a0
|
|
|
|
/* std::ostream::flush() */
|
|
|
|
ostream * __thiscall std::ostream::flush(ostream *this)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
if ((*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) != (int *)0x0) &&
|
|
(iVar1 = (**(code **)(**(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48) + 0x14))(),
|
|
iVar1 == -1)) {
|
|
iVar1 = *(int *)(*(int *)this + -0xc);
|
|
uVar2 = *(uint *)(this + iVar1 + 8);
|
|
*(uint *)(this + iVar1 + 8) = uVar2 | 1;
|
|
if ((*(uint *)(this + iVar1 + 0x14) & (uVar2 | 1)) != 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
ios_base::_M_throw_failure();
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC put @ 0002d8dc
|
|
|
|
/* std::ostream::put(char) */
|
|
|
|
ostream * __thiscall std::ostream::put(ostream *this,char param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
char *pcVar3;
|
|
uint uVar4;
|
|
ostream *local_20;
|
|
undefined1 local_1c;
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
local_20 = this;
|
|
local_1c = priv::__init_bostr<char,std::char_traits<char>>(this);
|
|
if ((bool)local_1c) {
|
|
piVar1 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x48);
|
|
pcVar3 = (char *)piVar1[5];
|
|
if (pcVar3 < (char *)piVar1[6]) {
|
|
piVar1[5] = (int)(pcVar3 + 1);
|
|
*pcVar3 = param_1;
|
|
goto LAB_0002d93e;
|
|
}
|
|
iVar2 = (**(code **)(*piVar1 + 0x34))(piVar1,(int)param_1);
|
|
if (iVar2 != -1) goto LAB_0002d93e;
|
|
}
|
|
iVar2 = *(int *)(*(int *)this + -0xc);
|
|
uVar4 = *(uint *)(this + iVar2 + 8);
|
|
*(uint *)(this + iVar2 + 8) = uVar4 | 1;
|
|
if ((*(uint *)(this + iVar2 + 0x14) & (uVar4 | 1)) != 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
ios_base::_M_throw_failure();
|
|
}
|
|
LAB_0002d93e:
|
|
sentry::~sentry((sentry *)&local_20);
|
|
if (__stack_chk_guard == local_18) {
|
|
return this;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC wait @ 0002d9a4
|
|
|
|
/* Condition::wait() */
|
|
|
|
void __thiscall Condition::wait(Condition *this)
|
|
|
|
{
|
|
pthread_mutex_lock((pthread_mutex_t *)this);
|
|
while (this[8] == (Condition)0x0) {
|
|
pthread_cond_wait((pthread_cond_t *)(this + 4),(pthread_mutex_t *)this);
|
|
}
|
|
this[8] = (Condition)0x0;
|
|
pthread_mutex_unlock((pthread_mutex_t *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC waitForMsecs @ 0002d9e0
|
|
|
|
/* Condition::waitForMsecs(int) */
|
|
|
|
undefined4 __thiscall Condition::waitForMsecs(Condition *this,int param_1)
|
|
|
|
{
|
|
int extraout_r1;
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined8 uVar3;
|
|
undefined4 local_2c;
|
|
timespec local_28;
|
|
timeval local_20;
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
local_2c = 0;
|
|
gettimeofday(&local_20,(__timezone_ptr_t)0x0);
|
|
uVar3 = __aeabi_idivmod(param_1,1000);
|
|
iVar1 = local_20.tv_sec + (int)uVar3;
|
|
local_28.tv_nsec = local_20.tv_usec * 1000 + (int)((ulonglong)uVar3 >> 0x20) * 1000000;
|
|
local_28.tv_sec = iVar1;
|
|
if (1000000000 < local_28.tv_nsec) {
|
|
__aeabi_uidivmod(local_28.tv_nsec,1000000000);
|
|
local_28.tv_sec = iVar1 + 1;
|
|
local_28.tv_nsec = extraout_r1;
|
|
}
|
|
pthread_mutex_lock((pthread_mutex_t *)this);
|
|
do {
|
|
if (this[8] != (Condition)0x0) {
|
|
this[8] = (Condition)0x0;
|
|
uVar2 = local_2c;
|
|
break;
|
|
}
|
|
iVar1 = pthread_cond_timedwait((pthread_cond_t *)(this + 4),(pthread_mutex_t *)this,&local_28);
|
|
uVar2 = 1;
|
|
} while (iVar1 != 0x6e);
|
|
pthread_mutex_unlock((pthread_mutex_t *)this);
|
|
if (__stack_chk_guard != local_18) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC MStream @ 0002da98
|
|
|
|
/* MStream::MStream(unsigned int) */
|
|
|
|
MStream * __thiscall MStream::MStream(MStream *this,uint param_1)
|
|
|
|
{
|
|
void *pvVar1;
|
|
undefined4 *puVar2;
|
|
|
|
*(uint *)this = param_1;
|
|
*(undefined4 *)(this + 4) = 0;
|
|
*(undefined4 *)(this + 8) = 0;
|
|
if (param_1 != 0) {
|
|
pvVar1 = operator_new__(param_1);
|
|
*(void **)(this + 4) = pvVar1;
|
|
*(void **)(this + 8) = pvVar1;
|
|
return this;
|
|
}
|
|
puVar2 = (undefined4 *)FUN_00030824(4);
|
|
*puVar2 = "ParamError: Invalid array size.[MStream::MStream]";
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar2,&Error::typeinfo,0);
|
|
}
|
|
|
|
|
|
|
|
### FUNC MStream @ 0002db08
|
|
|
|
/* MStream::MStream(char const*, unsigned int) */
|
|
|
|
MStream * __thiscall MStream::MStream(MStream *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
size_t sVar1;
|
|
uint uVar2;
|
|
void *pvVar3;
|
|
|
|
if (param_2 == 0) {
|
|
sVar1 = strlen(param_1);
|
|
param_2 = sVar1 + 1;
|
|
}
|
|
uVar2 = param_2 + 1;
|
|
*(uint *)this = uVar2;
|
|
pvVar3 = operator_new__(uVar2);
|
|
*(void **)(this + 4) = pvVar3;
|
|
__aeabi_memcpy(pvVar3,param_1,param_2);
|
|
*(undefined1 *)((int)pvVar3 + param_2) = 0;
|
|
*(uint *)(this + 8) = (int)pvVar3 + uVar2;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC MStream @ 0002db48
|
|
|
|
/* MStream::MStream(std::string const&) */
|
|
|
|
MStream * __thiscall MStream::MStream(MStream *this,string *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
void *pvVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
|
|
iVar3 = *(int *)(param_1 + 0x14);
|
|
iVar4 = *(int *)(param_1 + 0x10) - iVar3;
|
|
uVar1 = iVar4 + 1;
|
|
*(uint *)this = uVar1;
|
|
pvVar2 = operator_new__(uVar1);
|
|
*(void **)(this + 4) = pvVar2;
|
|
__aeabi_memcpy(pvVar2,iVar3,iVar4);
|
|
*(undefined1 *)((int)pvVar2 + iVar4) = 0;
|
|
*(uint *)(this + 8) = (int)pvVar2 + uVar1;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC MStream @ 0002db7e
|
|
|
|
/* MStream::MStream(MStream const&) */
|
|
|
|
void __thiscall MStream::MStream(MStream *this,MStream *param_1)
|
|
|
|
{
|
|
*(undefined4 *)this = *(undefined4 *)param_1;
|
|
*(undefined4 *)(this + 4) = *(undefined4 *)(param_1 + 4);
|
|
*(undefined4 *)(this + 8) = *(undefined4 *)(param_1 + 8);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator= @ 0002db8c
|
|
|
|
/* MStream::TEMPNAMEPLACEHOLDERVALUE(MStream const&) */
|
|
|
|
void __thiscall MStream::operator=(MStream *this,MStream *param_1)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined4 *)this = *(undefined4 *)param_1;
|
|
pvVar1 = (void *)0x0;
|
|
if (*(void **)(this + 4) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 4));
|
|
pvVar1 = operator_new__(*(uint *)this);
|
|
*(void **)(this + 4) = pvVar1;
|
|
}
|
|
*(void **)(this + 8) = pvVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~MStream @ 0002dbb0
|
|
|
|
/* MStream::~MStream() */
|
|
|
|
MStream * __thiscall MStream::~MStream(MStream *this)
|
|
|
|
{
|
|
if (*(void **)(this + 4) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 4));
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Split @ 0002dbc4
|
|
|
|
/* MStream::Split(char) */
|
|
|
|
void MStream::Split(char param_1)
|
|
|
|
{
|
|
vector<MStream,std::allocator<MStream>> *this;
|
|
byte *pbVar1;
|
|
int in_r1;
|
|
uint in_r2;
|
|
byte *pbVar2;
|
|
byte *pbVar3;
|
|
MStream aMStack_30 [4];
|
|
void *local_2c;
|
|
MStream aMStack_24 [4];
|
|
void *local_20;
|
|
int local_18;
|
|
|
|
this = (vector<MStream,std::allocator<MStream>> *)(int)param_1;
|
|
local_18 = __stack_chk_guard;
|
|
*(undefined4 *)this = 0;
|
|
*(undefined4 *)(this + 4) = 0;
|
|
*(undefined4 *)(this + 8) = 0;
|
|
pbVar2 = *(byte **)(in_r1 + 4);
|
|
pbVar1 = *(byte **)(in_r1 + 8);
|
|
pbVar3 = pbVar2;
|
|
while (pbVar2 < pbVar1) {
|
|
if (*pbVar2 == in_r2) {
|
|
MStream(aMStack_24,(char *)pbVar3,(int)pbVar2 - (int)pbVar3);
|
|
std::vector<MStream,std::allocator<MStream>>::push_back(this,aMStack_24);
|
|
if (local_20 != (void *)0x0) {
|
|
operator_delete__(local_20);
|
|
}
|
|
pbVar1 = *(byte **)(in_r1 + 8);
|
|
pbVar2 = pbVar2 + 1;
|
|
pbVar3 = pbVar2;
|
|
}
|
|
else {
|
|
pbVar2 = pbVar2 + 1;
|
|
}
|
|
}
|
|
if (1 < (int)pbVar2 - (int)pbVar3) {
|
|
MStream(aMStack_30,(char *)pbVar3,(int)pbVar2 - (int)pbVar3);
|
|
std::vector<MStream,std::allocator<MStream>>::push_back(this,aMStack_30);
|
|
if (local_2c != (void *)0x0) {
|
|
operator_delete__(local_2c);
|
|
}
|
|
}
|
|
if (__stack_chk_guard != local_18) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC push_back @ 0002dc7c
|
|
|
|
/* std::vector<MStream, std::allocator<MStream> >::push_back(MStream const&) */
|
|
|
|
void __thiscall
|
|
std::vector<MStream,std::allocator<MStream>>::push_back
|
|
(vector<MStream,std::allocator<MStream>> *this,MStream *param_1)
|
|
|
|
{
|
|
MStream *pMVar1;
|
|
__false_type a_Stack_18 [4];
|
|
int local_14;
|
|
|
|
local_14 = __stack_chk_guard;
|
|
pMVar1 = *(MStream **)(this + 4);
|
|
if (pMVar1 == *(MStream **)(this + 8)) {
|
|
_M_insert_overflow_aux(this,pMVar1,param_1,a_Stack_18,1,true);
|
|
}
|
|
else {
|
|
*(undefined4 *)pMVar1 = *(undefined4 *)param_1;
|
|
*(undefined4 *)(pMVar1 + 4) = *(undefined4 *)(param_1 + 4);
|
|
*(undefined4 *)(pMVar1 + 8) = *(undefined4 *)(param_1 + 8);
|
|
*(MStream **)(this + 4) = pMVar1 + 0xc;
|
|
}
|
|
if (__stack_chk_guard == local_14) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~vector @ 0002dcd8
|
|
|
|
/* std::vector<MStream, std::allocator<MStream> >::~vector() */
|
|
|
|
void __thiscall
|
|
std::vector<MStream,std::allocator<MStream>>::~vector(vector<MStream,std::allocator<MStream>> *this)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = *(int *)this;
|
|
for (iVar2 = *(int *)(this + 4); iVar1 != iVar2; iVar2 = iVar2 + -0xc) {
|
|
if (*(void **)(iVar2 + -8) != (void *)0x0) {
|
|
operator_delete__(*(void **)(iVar2 + -8));
|
|
}
|
|
}
|
|
priv::_Vector_base<MStream,std::allocator<MStream>>::~_Vector_base
|
|
((_Vector_base<MStream,std::allocator<MStream>> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Split @ 0002dd10
|
|
|
|
/* MStream::Split(char const*) */
|
|
|
|
void MStream::Split(char *param_1)
|
|
|
|
{
|
|
size_t sVar1;
|
|
int in_r1;
|
|
char *pcVar2;
|
|
char *in_r2;
|
|
uint uVar3;
|
|
char *pcVar4;
|
|
char *pcVar5;
|
|
MStream aMStack_30 [4];
|
|
void *local_2c;
|
|
MStream aMStack_24 [4];
|
|
void *local_20;
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
sVar1 = strlen(in_r2);
|
|
if (sVar1 == 2) {
|
|
param_1[0] = '\0';
|
|
param_1[1] = '\0';
|
|
param_1[2] = '\0';
|
|
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';
|
|
pcVar4 = *(char **)(in_r1 + 4);
|
|
pcVar5 = (char *)(*(int *)(in_r1 + 8) + -1);
|
|
while (pcVar4 < pcVar5) {
|
|
pcVar2 = pcVar4;
|
|
while ((*in_r2 != *pcVar2 || (in_r2[1] != pcVar2[1]))) {
|
|
pcVar2 = pcVar2 + 1;
|
|
if (pcVar5 <= pcVar2) goto LAB_0002ddb4;
|
|
}
|
|
MStream(aMStack_24,pcVar4,(int)pcVar2 - (int)pcVar4);
|
|
std::vector<MStream,std::allocator<MStream>>::push_back
|
|
((vector<MStream,std::allocator<MStream>> *)param_1,aMStack_24);
|
|
pcVar4 = pcVar2 + 2;
|
|
if (local_20 != (void *)0x0) {
|
|
operator_delete__(local_20);
|
|
}
|
|
}
|
|
LAB_0002ddb4:
|
|
uVar3 = *(int *)(in_r1 + 8) - (int)pcVar4;
|
|
if (1 < (int)uVar3) {
|
|
MStream(aMStack_30,pcVar4,uVar3);
|
|
std::vector<MStream,std::allocator<MStream>>::push_back
|
|
((vector<MStream,std::allocator<MStream>> *)param_1,aMStack_30);
|
|
if (local_2c != (void *)0x0) {
|
|
operator_delete__(local_2c);
|
|
}
|
|
}
|
|
}
|
|
else if (sVar1 == 1) {
|
|
Split((char)param_1);
|
|
}
|
|
else {
|
|
param_1[0] = '\0';
|
|
param_1[1] = '\0';
|
|
param_1[2] = '\0';
|
|
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';
|
|
}
|
|
if (__stack_chk_guard != local_18) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC hex2str @ 0002de2c
|
|
|
|
/* hex2str(unsigned long, char*) */
|
|
|
|
int hex2str(ulong param_1,char *param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
char *pcVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
char *pcVar6;
|
|
char *pcVar7;
|
|
bool bVar8;
|
|
|
|
uVar3 = 0;
|
|
do {
|
|
param_2[uVar3] = "FEDCBA9876543210123456789ABCDEF"[(param_1 & 0xf) + 0xf];
|
|
uVar3 = uVar3 + 1;
|
|
param_1 = param_1 >> 4;
|
|
} while (param_1 != 0);
|
|
pcVar2 = param_2 + uVar3;
|
|
pcVar7 = pcVar2 + 1;
|
|
if (uVar3 < 8) {
|
|
iVar5 = 0;
|
|
do {
|
|
param_2[uVar3 - iVar5] = '0';
|
|
uVar4 = iVar5 + 7;
|
|
iVar5 = iVar5 + -1;
|
|
} while (uVar4 != uVar3);
|
|
pcVar7 = pcVar2 + -uVar3 + 9;
|
|
pcVar2 = pcVar2 + -uVar3 + 8;
|
|
}
|
|
*pcVar2 = 'x';
|
|
*pcVar7 = '0';
|
|
if (param_2 < pcVar2 + 2) {
|
|
pcVar7 = pcVar2 + 1;
|
|
pcVar6 = param_2;
|
|
do {
|
|
cVar1 = *pcVar6;
|
|
*pcVar6 = *pcVar7;
|
|
*pcVar7 = cVar1;
|
|
pcVar6 = pcVar6 + 1;
|
|
bVar8 = pcVar6 < pcVar7;
|
|
pcVar7 = pcVar7 + -1;
|
|
} while (bVar8);
|
|
}
|
|
return (int)(pcVar2 + 2) - (int)param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Available @ 0002ded0
|
|
|
|
/* MStream::Available() const */
|
|
|
|
int __thiscall MStream::Available(MStream *this)
|
|
|
|
{
|
|
return (*(int *)this - *(int *)(this + 8)) + *(int *)(this + 4);
|
|
}
|
|
|
|
|
|
|
|
### FUNC Fmt @ 0002dedc
|
|
|
|
/* MStream::Fmt(char const*, ...) */
|
|
|
|
void MStream::Fmt(char *param_1,...)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
char *in_r1;
|
|
undefined4 in_r2;
|
|
undefined4 in_r3;
|
|
int *piVar3;
|
|
undefined4 local_8;
|
|
undefined4 local_4;
|
|
|
|
iVar1 = __stack_chk_guard;
|
|
piVar3 = (int *)(param_1 + 8);
|
|
local_8 = in_r2;
|
|
local_4 = in_r3;
|
|
iVar2 = vsnprintf((char *)*piVar3,(*(int *)param_1 - *piVar3) + *(int *)(param_1 + 4),in_r1,
|
|
&local_8);
|
|
*piVar3 = *piVar3 + iVar2;
|
|
if (__stack_chk_guard == iVar1) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC Get @ 0002df38
|
|
|
|
/* MStream::Get() */
|
|
|
|
undefined4 __thiscall MStream::Get(MStream *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 4);
|
|
}
|
|
|
|
|
|
|
|
### FUNC Get @ 0002df3c
|
|
|
|
/* MStream::Get() const */
|
|
|
|
undefined4 __thiscall MStream::Get(MStream *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 4);
|
|
}
|
|
|
|
|
|
|
|
### FUNC Write @ 0002df40
|
|
|
|
/* MStream::Write(OFStream const&) const */
|
|
|
|
void __thiscall MStream::Write(MStream *this,OFStream *param_1)
|
|
|
|
{
|
|
OFStream::Write(param_1,*(char **)(this + 4));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Write @ 0002df50
|
|
|
|
/* MStream::Write(__sFILE*) const */
|
|
|
|
bool __thiscall MStream::Write(MStream *this,__sFILE *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = fputs(*(char **)(this + 4),(FILE *)param_1);
|
|
return iVar1 == 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Puts @ 0002df68
|
|
|
|
/* MStream::Puts(char const*, unsigned int) */
|
|
|
|
void __thiscall MStream::Puts(MStream *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
MStream *pMVar2;
|
|
|
|
pMVar2 = this + 8;
|
|
if (param_2 + 1 < (uint)((*(int *)this - *(int *)pMVar2) + *(int *)(this + 4))) {
|
|
__aeabi_memcpy(*(int *)pMVar2,param_1,param_2);
|
|
iVar1 = *(int *)pMVar2;
|
|
*(uint *)pMVar2 = iVar1 + param_2;
|
|
*(undefined1 *)(iVar1 + param_2) = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Puts @ 0002df92
|
|
|
|
/* MStream::Puts(char const*) */
|
|
|
|
void __thiscall MStream::Puts(MStream *this,char *param_1)
|
|
|
|
{
|
|
size_t sVar1;
|
|
int iVar2;
|
|
MStream *pMVar3;
|
|
|
|
sVar1 = strlen(param_1);
|
|
pMVar3 = this + 8;
|
|
if (sVar1 + 1 < (uint)((*(int *)this - *(int *)pMVar3) + *(int *)(this + 4))) {
|
|
__aeabi_memcpy(*(int *)pMVar3,param_1,sVar1);
|
|
iVar2 = *(int *)pMVar3;
|
|
*(size_t *)pMVar3 = iVar2 + sVar1;
|
|
*(undefined1 *)(iVar2 + sVar1) = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Reset @ 0002dfca
|
|
|
|
/* MStream::Reset() */
|
|
|
|
void __thiscall MStream::Reset(MStream *this)
|
|
|
|
{
|
|
*(undefined4 *)(this + 8) = *(undefined4 *)(this + 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Empty @ 0002dfd0
|
|
|
|
/* MStream::Empty() const */
|
|
|
|
bool __thiscall MStream::Empty(MStream *this)
|
|
|
|
{
|
|
return *(int *)(this + 8) == *(int *)(this + 4);
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator<< @ 0002dfe0
|
|
|
|
/* MStream::TEMPNAMEPLACEHOLDERVALUE(char const*) */
|
|
|
|
MStream * __thiscall MStream::operator<<(MStream *this,char *param_1)
|
|
|
|
{
|
|
Puts(this,param_1);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator<< @ 0002dfee
|
|
|
|
/* MStream::TEMPNAMEPLACEHOLDERVALUE(char) */
|
|
|
|
void __thiscall MStream::operator<<(MStream *this,char param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
MStream *pMVar2;
|
|
|
|
pMVar2 = this + 8;
|
|
if (2 < (uint)((*(int *)this - (int)*(char **)pMVar2) + *(int *)(this + 4))) {
|
|
**(char **)pMVar2 = param_1;
|
|
iVar1 = *(int *)pMVar2;
|
|
*(int *)pMVar2 = iVar1 + 1;
|
|
*(undefined1 *)(iVar1 + 1) = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~_Vector_base @ 0002e00e
|
|
|
|
/* std::priv::_Vector_base<MStream, std::allocator<MStream> >::~_Vector_base() */
|
|
|
|
_Vector_base<MStream,std::allocator<MStream>> * __thiscall
|
|
std::priv::_Vector_base<MStream,std::allocator<MStream>>::~_Vector_base
|
|
(_Vector_base<MStream,std::allocator<MStream>> *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = *(void **)this;
|
|
if (pvVar1 != (void *)0x0) {
|
|
if ((uint)(*(int *)(this + 8) - (int)pvVar1) < 0x81) {
|
|
__node_alloc::_M_deallocate(pvVar1,*(int *)(this + 8) - (int)pvVar1);
|
|
}
|
|
else {
|
|
operator_delete(pvVar1);
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_insert_overflow_aux @ 0002e030
|
|
|
|
/* std::vector<MStream, std::allocator<MStream> >::_M_insert_overflow_aux(MStream*, MStream const&,
|
|
std::__false_type const&, unsigned int, bool) */
|
|
|
|
void __thiscall
|
|
std::vector<MStream,std::allocator<MStream>>::_M_insert_overflow_aux
|
|
(vector<MStream,std::allocator<MStream>> *this,MStream *param_1,MStream *param_2,
|
|
__false_type *param_3,uint param_4,bool param_5)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
undefined4 *puVar3;
|
|
undefined4 *puVar4;
|
|
undefined3 in_stack_00000005;
|
|
uint local_1c;
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
local_1c = _M_compute_next_size(this,param_4);
|
|
puVar1 = (undefined4 *)
|
|
allocator<MStream>::_M_allocate((allocator<MStream> *)(this + 8),local_1c,&local_1c);
|
|
puVar4 = *(undefined4 **)this;
|
|
puVar3 = puVar1;
|
|
if (0 < (int)param_1 - (int)puVar4) {
|
|
iVar2 = __udivsi3((int)param_1 - (int)puVar4,0xc);
|
|
iVar2 = iVar2 + 1;
|
|
do {
|
|
*puVar3 = *puVar4;
|
|
puVar3[1] = puVar4[1];
|
|
puVar3[2] = puVar4[2];
|
|
puVar3 = puVar3 + 3;
|
|
puVar4 = puVar4 + 3;
|
|
iVar2 = iVar2 + -1;
|
|
} while (1 < iVar2);
|
|
}
|
|
if (param_4 == 1) {
|
|
*puVar3 = *(undefined4 *)param_2;
|
|
puVar3[1] = *(undefined4 *)(param_2 + 4);
|
|
puVar3[2] = *(undefined4 *)(param_2 + 8);
|
|
puVar4 = puVar3 + 3;
|
|
}
|
|
else {
|
|
puVar4 = puVar3 + param_4 * 3;
|
|
if (0 < (int)(param_4 * 0xc)) {
|
|
iVar2 = param_4 + 1;
|
|
do {
|
|
*puVar3 = *(undefined4 *)param_2;
|
|
puVar3[1] = *(undefined4 *)(param_2 + 4);
|
|
puVar3[2] = *(undefined4 *)(param_2 + 8);
|
|
puVar3 = puVar3 + 3;
|
|
iVar2 = iVar2 + -1;
|
|
} while (1 < iVar2);
|
|
}
|
|
}
|
|
if ((_param_5 == 0) && (0 < *(int *)(this + 4) - (int)param_1)) {
|
|
iVar2 = __udivsi3(*(int *)(this + 4) - (int)param_1,0xc);
|
|
iVar2 = iVar2 + 1;
|
|
do {
|
|
*puVar4 = *(undefined4 *)param_1;
|
|
puVar4[1] = *(undefined4 *)(param_1 + 4);
|
|
puVar4[2] = *(undefined4 *)(param_1 + 8);
|
|
puVar4 = puVar4 + 3;
|
|
param_1 = param_1 + 0xc;
|
|
iVar2 = iVar2 + -1;
|
|
} while (1 < iVar2);
|
|
}
|
|
_M_clear_after_move(this);
|
|
*(undefined4 **)this = puVar1;
|
|
*(undefined4 **)(this + 4) = puVar4;
|
|
*(undefined4 **)(this + 8) = puVar1 + local_1c * 3;
|
|
if (__stack_chk_guard != local_18) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_compute_next_size @ 0002e138
|
|
|
|
/* std::vector<MStream, std::allocator<MStream> >::_M_compute_next_size(unsigned int) */
|
|
|
|
uint __thiscall
|
|
std::vector<MStream,std::allocator<MStream>>::_M_compute_next_size
|
|
(vector<MStream,std::allocator<MStream>> *this,uint param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
|
|
iVar1 = *(int *)(this + 4) - *(int *)this >> 2;
|
|
uVar4 = iVar1 * -0x55555555;
|
|
if (param_1 <= iVar1 * 0x55555555 + 0x15555555U) {
|
|
uVar2 = uVar4;
|
|
if (uVar4 < param_1 || uVar4 - param_1 == 0) {
|
|
uVar2 = param_1;
|
|
}
|
|
uVar4 = uVar2 + uVar4;
|
|
uVar3 = uVar4;
|
|
if (uVar4 < uVar2) {
|
|
uVar3 = 0x15555555;
|
|
}
|
|
uVar2 = 0x15555555;
|
|
if (uVar4 < 0x15555556) {
|
|
uVar2 = uVar3;
|
|
}
|
|
return uVar2;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stl_throw_length_error("vector");
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_clear_after_move @ 0002e184
|
|
|
|
/* std::vector<MStream, std::allocator<MStream> >::_M_clear_after_move() */
|
|
|
|
void __thiscall
|
|
std::vector<MStream,std::allocator<MStream>>::_M_clear_after_move
|
|
(vector<MStream,std::allocator<MStream>> *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
void *pvVar2;
|
|
|
|
pvVar1 = *(void **)this;
|
|
pvVar2 = *(void **)(this + 4);
|
|
if (pvVar1 != pvVar2) {
|
|
do {
|
|
if (*(void **)((int)pvVar2 + -8) != (void *)0x0) {
|
|
operator_delete__(*(void **)((int)pvVar2 + -8));
|
|
}
|
|
pvVar2 = (void *)((int)pvVar2 + -0xc);
|
|
} while (pvVar2 != pvVar1);
|
|
pvVar1 = *(void **)this;
|
|
}
|
|
if (pvVar1 != (void *)0x0) {
|
|
if ((uint)(*(int *)(this + 8) - (int)pvVar1) < 0x81) {
|
|
__node_alloc::_M_deallocate(pvVar1,*(int *)(this + 8) - (int)pvVar1);
|
|
}
|
|
else {
|
|
operator_delete(pvVar1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_allocate @ 0002e1d4
|
|
|
|
/* std::allocator<MStream>::_M_allocate(unsigned int, unsigned int&) */
|
|
|
|
undefined4 __thiscall
|
|
std::allocator<MStream>::_M_allocate(allocator<MStream> *this,uint param_1,uint *param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 uVar2;
|
|
uint local_1c;
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
if (0x15555555 < param_1) {
|
|
FUN_00030824(4);
|
|
uVar2 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
uVar2 = 0;
|
|
if (param_1 != 0) {
|
|
local_1c = param_1 * 0xc;
|
|
uVar2 = __node_alloc::allocate(&local_1c);
|
|
uVar1 = __udivsi3(local_1c,0xc);
|
|
*param_2 = uVar1;
|
|
}
|
|
if (__stack_chk_guard == local_18) {
|
|
return uVar2;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC allocate @ 0002e250
|
|
|
|
/* std::__node_alloc::allocate(unsigned int&) */
|
|
|
|
void std::__node_alloc::allocate(uint *param_1)
|
|
|
|
{
|
|
if (0x80 < *param_1) {
|
|
operator_new(*param_1);
|
|
return;
|
|
}
|
|
_M_allocate(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Logging @ 0002e268
|
|
|
|
/* mag::Logging::Logging(int) */
|
|
|
|
Logging * __thiscall mag::Logging::Logging(Logging *this,int param_1)
|
|
|
|
{
|
|
tm *ptVar1;
|
|
time_t tStack_1c;
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
MStream::MStream((MStream *)this,0x400);
|
|
time(&tStack_1c);
|
|
ptVar1 = localtime(&tStack_1c);
|
|
MStream::Fmt((char *)this,"%d.%02d.%02d %02d:%02d:%02d %s",ptVar1->tm_year + 0x76c,
|
|
ptVar1->tm_mon + 1,ptVar1->tm_mday,ptVar1->tm_hour,ptVar1->tm_min,ptVar1->tm_sec,
|
|
(&PTR_s_TRACE___00068c58)[param_1]);
|
|
if (__stack_chk_guard == local_18) {
|
|
return this;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~Logging @ 0002e31c
|
|
|
|
/* mag::Logging::~Logging() */
|
|
|
|
void __thiscall mag::Logging::~Logging(Logging *this)
|
|
|
|
{
|
|
MStream::operator<<((MStream *)this,"\n");
|
|
MStream::Write((MStream *)this,(__sFILE *)PTR___sF_0006b898);
|
|
fflush((FILE *)PTR___sF_0006b898);
|
|
MStream::~MStream((MStream *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Setfp @ 0002e364
|
|
|
|
/* mag::Logging::Setfp(__sFILE*) */
|
|
|
|
void mag::Logging::Setfp(__sFILE *param_1)
|
|
|
|
{
|
|
PTR___sF_0006b898 = param_1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Setfp @ 0002e370
|
|
|
|
/* mag::Logging::Setfp(OFStream&) */
|
|
|
|
void mag::Logging::Setfp(OFStream *param_1)
|
|
|
|
{
|
|
PTR___sF_0006b898 = (pointer_____offset_0x54___)FStream::GetRaw((FStream *)param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC CSmoother @ 0002e384
|
|
|
|
/* CSmoother::CSmoother() */
|
|
|
|
CSmoother * __thiscall CSmoother::CSmoother(CSmoother *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__CSmoother_00068c78;
|
|
__aeabi_memclr4(this + 4,0x24);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~CSmoother @ 0002e3a4
|
|
|
|
/* CSmoother::~CSmoother() */
|
|
|
|
CSmoother * __thiscall CSmoother::~CSmoother(CSmoother *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__CSmoother_00068c78;
|
|
if (*(void **)(this + 4) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 4));
|
|
*(undefined4 *)(this + 4) = 0;
|
|
}
|
|
*(undefined4 *)(this + 8) = 0;
|
|
if (*(void **)(this + 0xc) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0xc));
|
|
*(undefined4 *)(this + 0xc) = 0;
|
|
}
|
|
if (*(void **)(this + 0x10) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0x10));
|
|
*(undefined4 *)(this + 0x10) = 0;
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~CSmoother @ 0002e3e8
|
|
|
|
/* CSmoother::~CSmoother() */
|
|
|
|
void __thiscall CSmoother::~CSmoother(CSmoother *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)~CSmoother(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Reset @ 0002e3f6
|
|
|
|
/* CSmoother::Reset(unsigned int, unsigned int, int, unsigned int) */
|
|
|
|
undefined4 __thiscall
|
|
CSmoother::Reset(CSmoother *this,uint param_1,uint param_2,int param_3,uint param_4)
|
|
|
|
{
|
|
void *pvVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
undefined4 uVar5;
|
|
undefined8 uVar6;
|
|
|
|
uVar5 = 0;
|
|
*(undefined4 *)(this + 0x24) = 0;
|
|
if (*(void **)(this + 4) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 4));
|
|
*(undefined4 *)(this + 4) = 0;
|
|
}
|
|
*(undefined4 *)(this + 8) = 0;
|
|
if (*(void **)(this + 0xc) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0xc));
|
|
*(undefined4 *)(this + 0xc) = 0;
|
|
}
|
|
if (*(void **)(this + 0x10) != (void *)0x0) {
|
|
operator_delete__(*(void **)(this + 0x10));
|
|
*(undefined4 *)(this + 0x10) = 0;
|
|
}
|
|
if ((param_1 != 0) && (param_2 != 0)) {
|
|
*(undefined4 *)(this + 0x18) = 0;
|
|
*(uint *)(this + 0x1c) = param_1;
|
|
*(uint *)(this + 0x20) = param_2;
|
|
uVar3 = (param_4 + 1 >> 1) + param_1 * param_2;
|
|
uVar2 = uVar3 * 2;
|
|
if (uVar2 < uVar3) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
pvVar1 = operator_new__(uVar2);
|
|
iVar4 = (int)pvVar1 + (param_4 & 0xfffffffe);
|
|
*(void **)(this + 4) = pvVar1;
|
|
*(int *)(this + 8) = iVar4;
|
|
*(int *)(this + 0x14) = iVar4;
|
|
uVar6 = __muldi3(param_1,0,4,(int)param_1 >> 0x1f);
|
|
uVar2 = 0xffffffff;
|
|
if ((int)((ulonglong)uVar6 >> 0x20) == 0) {
|
|
uVar2 = (uint)uVar6;
|
|
}
|
|
pvVar1 = operator_new__(uVar2);
|
|
*(void **)(this + 0xc) = pvVar1;
|
|
__aeabi_memclr4(pvVar1,param_1 << 2);
|
|
if (param_3 != 0) {
|
|
uVar2 = param_1 * 2;
|
|
if (param_1 * 2 < param_1) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
pvVar1 = operator_new__(uVar2);
|
|
*(void **)(this + 0x10) = pvVar1;
|
|
}
|
|
uVar5 = 1;
|
|
*(undefined4 *)(this + 0x24) = 1;
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC PushFrameSum @ 0002e4b6
|
|
|
|
/* CSmoother::PushFrameSum(unsigned short const*) */
|
|
|
|
undefined4 __thiscall CSmoother::PushFrameSum(CSmoother *this,ushort *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int extraout_r1;
|
|
int *piVar4;
|
|
ushort *puVar5;
|
|
ushort *puVar6;
|
|
uint uVar7;
|
|
|
|
uVar1 = 0;
|
|
if ((*(int *)(this + 0x24) != 0) && (piVar4 = *(int **)(this + 0xc), piVar4 != (int *)0x0)) {
|
|
iVar2 = *(int *)(this + 0x18);
|
|
*(uint *)(this + 0x18) = iVar2 + 1U;
|
|
uVar3 = *(uint *)(this + 0x1c) >> 2;
|
|
if (*(uint *)(this + 0x20) < iVar2 + 1U) {
|
|
if (uVar3 != 0) {
|
|
iVar2 = -uVar3;
|
|
puVar5 = *(ushort **)(this + 0x14);
|
|
puVar6 = param_1;
|
|
do {
|
|
*piVar4 = ((uint)*puVar6 - (uint)*puVar5) + *piVar4;
|
|
piVar4[1] = ((uint)puVar6[1] - (uint)puVar5[1]) + piVar4[1];
|
|
piVar4[2] = ((uint)puVar6[2] - (uint)puVar5[2]) + piVar4[2];
|
|
piVar4[3] = ((uint)puVar6[3] - (uint)puVar5[3]) + piVar4[3];
|
|
piVar4 = piVar4 + 4;
|
|
puVar5 = puVar5 + 4;
|
|
puVar6 = puVar6 + 4;
|
|
iVar2 = iVar2 + 1;
|
|
} while (iVar2 != 0);
|
|
}
|
|
}
|
|
else if (uVar3 != 0) {
|
|
iVar2 = -uVar3;
|
|
puVar6 = param_1;
|
|
do {
|
|
*piVar4 = *piVar4 + (uint)*puVar6;
|
|
piVar4[1] = piVar4[1] + (uint)puVar6[1];
|
|
piVar4[2] = piVar4[2] + (uint)puVar6[2];
|
|
piVar4[3] = piVar4[3] + (uint)puVar6[3];
|
|
piVar4 = piVar4 + 4;
|
|
puVar6 = puVar6 + 4;
|
|
iVar2 = iVar2 + 1;
|
|
} while (iVar2 != 0);
|
|
}
|
|
__aeabi_memcpy(*(undefined4 *)(this + 0x14),param_1,*(int *)(this + 0x1c) << 1);
|
|
uVar3 = *(uint *)(this + 0x18);
|
|
uVar7 = *(uint *)(this + 0x20);
|
|
__aeabi_uidivmod(uVar3,uVar7);
|
|
if (extraout_r1 == 0) {
|
|
iVar2 = *(int *)(this + 8);
|
|
}
|
|
else {
|
|
iVar2 = *(int *)(this + 0x14) + *(int *)(this + 0x1c) * 2;
|
|
}
|
|
*(int *)(this + 0x14) = iVar2;
|
|
uVar1 = 1;
|
|
if (uVar3 < uVar7) {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC PushFrameAve @ 0002e58e
|
|
|
|
/* CSmoother::PushFrameAve(unsigned short*, unsigned int) */
|
|
|
|
undefined4 __thiscall CSmoother::PushFrameAve(CSmoother *this,ushort *param_1,uint param_2)
|
|
|
|
{
|
|
ushort uVar1;
|
|
ushort uVar2;
|
|
undefined4 uVar3;
|
|
int iVar4;
|
|
int extraout_r1;
|
|
ushort *puVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
|
|
uVar3 = 0;
|
|
if (*(int *)(this + 0x24) != 0) {
|
|
uVar6 = *(int *)(this + 0x18) + 1;
|
|
*(uint *)(this + 0x18) = uVar6;
|
|
if (*(uint *)(this + 0x20) < uVar6) {
|
|
if (*(uint *)(this + 0x20) != 1) {
|
|
return 0;
|
|
}
|
|
iVar4 = *(int *)(this + 0x1c);
|
|
uVar7 = 1;
|
|
if (iVar4 != 0) {
|
|
puVar5 = *(ushort **)(this + 8);
|
|
do {
|
|
uVar1 = *puVar5;
|
|
uVar2 = *param_1;
|
|
*puVar5 = uVar2;
|
|
uVar7 = (uint)uVar2 - (uint)uVar1;
|
|
puVar5 = puVar5 + 1;
|
|
if ((((int)uVar7 <= (int)param_2) && (-param_2 == uVar7 || (int)-uVar7 < (int)param_2)) &&
|
|
(uVar7 != 0)) {
|
|
*param_1 = uVar2 - (short)(uVar7 >> 1);
|
|
}
|
|
iVar4 = iVar4 + -1;
|
|
param_1 = param_1 + 1;
|
|
} while (iVar4 != 0);
|
|
uVar7 = 1;
|
|
}
|
|
}
|
|
else {
|
|
__aeabi_memcpy(*(undefined4 *)(this + 0x14),param_1,*(int *)(this + 0x1c) << 1);
|
|
uVar7 = *(uint *)(this + 0x20);
|
|
uVar6 = *(uint *)(this + 0x18);
|
|
}
|
|
__aeabi_uidivmod(uVar6,uVar7);
|
|
if (extraout_r1 == 0) {
|
|
iVar4 = *(int *)(this + 8);
|
|
}
|
|
else {
|
|
iVar4 = *(int *)(this + 0x14) + *(int *)(this + 0x1c) * 2;
|
|
}
|
|
*(int *)(this + 0x14) = iVar4;
|
|
uVar3 = 1;
|
|
if (uVar6 < uVar7) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
return uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Restart @ 0002e622
|
|
|
|
/* CSmoother::Restart() */
|
|
|
|
void __thiscall CSmoother::Restart(CSmoother *this)
|
|
|
|
{
|
|
if (*(int *)(this + 0x24) != 0) {
|
|
*(undefined4 *)(this + 0x14) = *(undefined4 *)(this + 8);
|
|
*(undefined4 *)(this + 0x18) = 0;
|
|
__aeabi_memclr4(*(undefined4 *)(this + 0xc),*(int *)(this + 0x1c) << 2);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetSTDFrame @ 0002e644
|
|
|
|
/* CSmoother::GetSTDFrame() */
|
|
|
|
int __thiscall CSmoother::GetSTDFrame(CSmoother *this)
|
|
|
|
{
|
|
undefined2 uVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
undefined4 uVar4;
|
|
uint uVar5;
|
|
ushort *puVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
undefined8 uVar10;
|
|
undefined8 uVar11;
|
|
undefined8 uVar12;
|
|
undefined4 in_stack_ffffffc0;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
|
|
iVar2 = 0;
|
|
if ((((*(int *)(this + 0x24) != 0) && (*(int *)(this + 0xc) != 0)) &&
|
|
(iVar7 = *(int *)(this + 0x10), iVar7 != 0)) &&
|
|
(uVar8 = *(uint *)(this + 0x20), uVar8 <= *(uint *)(this + 0x18))) {
|
|
if (uVar8 < 2) {
|
|
__aeabi_memclr(iVar7,*(int *)(this + 0x1c) << 1);
|
|
iVar2 = *(int *)(this + 0x10);
|
|
}
|
|
else {
|
|
uVar10 = __floatunsidf((uVar8 - 1) * uVar8 * uVar8);
|
|
uVar13 = 0;
|
|
uVar10 = __divdf3(0,0x3ff00000,(int)uVar10,(int)((ulonglong)uVar10 >> 0x20));
|
|
uVar3 = *(uint *)(this + 0x1c);
|
|
iVar2 = iVar7;
|
|
uVar5 = uVar13;
|
|
if (uVar3 != 0) {
|
|
while( true ) {
|
|
uVar14 = uVar5;
|
|
if (uVar8 != 0) {
|
|
puVar6 = (ushort *)(*(int *)(this + 8) + uVar13 * 2);
|
|
iVar2 = *(int *)(*(int *)(this + 0xc) + uVar13 * 4);
|
|
uVar12 = 0;
|
|
uVar9 = 0;
|
|
do {
|
|
uVar11 = __floatsidf(uVar8 * *puVar6 - iVar2);
|
|
uVar4 = (undefined4)((ulonglong)uVar11 >> 0x20);
|
|
uVar11 = __muldf3((int)uVar11,uVar4,(int)uVar11,uVar4);
|
|
uVar12 = __adddf3((int)uVar12,(int)((ulonglong)uVar12 >> 0x20),(int)uVar11,
|
|
(int)((ulonglong)uVar11 >> 0x20));
|
|
uVar5 = (uint)uVar12;
|
|
puVar6 = puVar6 + uVar3;
|
|
uVar9 = uVar9 + 1;
|
|
} while (uVar9 < uVar8);
|
|
}
|
|
__muldf3((int)uVar10,(int)((ulonglong)uVar10 >> 0x20),uVar5);
|
|
sqrt((double)CONCAT44(uVar14,in_stack_ffffffc0));
|
|
uVar1 = __fixunsdfsi();
|
|
iVar2 = *(int *)(this + 0x10);
|
|
*(undefined2 *)(iVar2 + uVar13 * 2) = uVar1;
|
|
uVar13 = uVar13 + 1;
|
|
uVar3 = *(uint *)(this + 0x1c);
|
|
if (uVar3 <= uVar13) break;
|
|
uVar8 = *(uint *)(this + 0x20);
|
|
uVar5 = uVar14;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FStream @ 0002e730
|
|
|
|
/* FStream::FStream() */
|
|
|
|
void __thiscall FStream::FStream(FStream *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__IFStream_00068c90;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~IFStream @ 0002e740
|
|
|
|
/* IFStream::~IFStream() */
|
|
|
|
IFStream * __thiscall IFStream::~IFStream(IFStream *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__IFStream_00068c90;
|
|
if (*(FILE **)(this + 4) != (FILE *)0x0) {
|
|
fclose(*(FILE **)(this + 4));
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~FStream @ 0002e764
|
|
|
|
/* FStream::~FStream() */
|
|
|
|
void __thiscall FStream::~FStream(FStream *this)
|
|
|
|
{
|
|
code *pcVar1;
|
|
|
|
/* WARNING: Does not return */
|
|
pcVar1 = (code *)software_udf(0xfe,0x2e764);
|
|
(*pcVar1)();
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetRaw @ 0002e766
|
|
|
|
/* FStream::GetRaw() const */
|
|
|
|
undefined4 __thiscall FStream::GetRaw(FStream *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 4);
|
|
}
|
|
|
|
|
|
|
|
### FUNC IsEof @ 0002e76a
|
|
|
|
/* FStream::IsEof() const */
|
|
|
|
bool __thiscall FStream::IsEof(FStream *this)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = feof(*(FILE **)(this + 4));
|
|
return iVar1 != 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ReadLine @ 0002e780
|
|
|
|
/* FStream::ReadLine(char*, int) const */
|
|
|
|
undefined4 __thiscall FStream::ReadLine(FStream *this,char *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
char *pcVar3;
|
|
|
|
iVar1 = feof(*(FILE **)(this + 4));
|
|
uVar2 = 0;
|
|
if (iVar1 == 0) {
|
|
pcVar3 = fgets(param_1,param_2,*(FILE **)(this + 4));
|
|
uVar2 = 1;
|
|
if (pcVar3 == (char *)0x0) {
|
|
uVar2 = 0;
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Read @ 0002e7b2
|
|
|
|
/* FStream::Read(void*, unsigned int, unsigned int) const */
|
|
|
|
int __thiscall FStream::Read(FStream *this,void *param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
sVar1 = fread(param_1,param_2,param_3,*(FILE **)(this + 4));
|
|
return param_2 * sVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetCurrentPos @ 0002e7ca
|
|
|
|
/* FStream::GetCurrentPos() const */
|
|
|
|
void __thiscall FStream::GetCurrentPos(FStream *this)
|
|
|
|
{
|
|
ftell(*(FILE **)(this + 4));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Seek @ 0002e7d6
|
|
|
|
/* FStream::Seek(long, io::seek) const */
|
|
|
|
bool __thiscall FStream::Seek(FStream *this,long param_1,int param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = fseek(*(FILE **)(this + 4),param_1,param_3);
|
|
return iVar1 == 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC OFStream @ 0002e7f0
|
|
|
|
/* OFStream::OFStream(char const*, bool) */
|
|
|
|
OFStream * __thiscall OFStream::OFStream(OFStream *this,char *param_1,bool param_2)
|
|
|
|
{
|
|
FILE *pFVar1;
|
|
undefined4 *puVar2;
|
|
|
|
*(undefined ***)this = &PTR__IFStream_00068ca4;
|
|
if (param_2) {
|
|
pFVar1 = fopen(param_1,"rb+");
|
|
*(FILE **)(this + 4) = pFVar1;
|
|
if (pFVar1 == (FILE *)0x0) {
|
|
puVar2 = (undefined4 *)FUN_00030824(4);
|
|
*puVar2 = "IOError: open file failed1.[IFStream::IFStream]";
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar2,&Error::typeinfo,0);
|
|
}
|
|
}
|
|
else {
|
|
pFVar1 = fopen(param_1,"wb");
|
|
*(FILE **)(this + 4) = pFVar1;
|
|
if (pFVar1 == (FILE *)0x0) {
|
|
puVar2 = (undefined4 *)FUN_00030824(4);
|
|
*puVar2 = "IOError: open file failed2.[IFStream::IFStream]";
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar2,&Error::typeinfo,0);
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~OFStream @ 0002e8ec
|
|
|
|
/* OFStream::~OFStream() */
|
|
|
|
void __thiscall OFStream::~OFStream(OFStream *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__IFStream_00068c90;
|
|
if (*(FILE **)(this + 4) != (FILE *)0x0) {
|
|
fclose(*(FILE **)(this + 4));
|
|
}
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Flush @ 0002e914
|
|
|
|
/* OFStream::Flush() const */
|
|
|
|
bool __thiscall OFStream::Flush(OFStream *this)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = fflush(*(FILE **)(this + 4));
|
|
return iVar1 == 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Write @ 0002e92c
|
|
|
|
/* OFStream::Write(char const*) const */
|
|
|
|
bool __thiscall OFStream::Write(OFStream *this,char *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = fputs(param_1,*(FILE **)(this + 4));
|
|
return -1 < iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Write @ 0002e948
|
|
|
|
/* OFStream::Write(void const*, unsigned int, unsigned int) */
|
|
|
|
bool __thiscall OFStream::Write(OFStream *this,void *param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
sVar1 = fwrite(param_1,param_2,param_3,*(FILE **)(this + 4));
|
|
return sVar1 != 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC WriteLine @ 0002e968
|
|
|
|
/* OFStream::WriteLine(char const*) const */
|
|
|
|
undefined4 __thiscall OFStream::WriteLine(OFStream *this,char *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = fputs(param_1,*(FILE **)(this + 4));
|
|
if (-1 < iVar1) {
|
|
iVar1 = fputs("\n",*(FILE **)(this + 4));
|
|
if (-1 < iVar1) {
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetLength @ 0002e998
|
|
|
|
/* OFStream::GetLength() const */
|
|
|
|
long __thiscall OFStream::GetLength(OFStream *this)
|
|
|
|
{
|
|
int iVar1;
|
|
long __off;
|
|
long lVar2;
|
|
|
|
fflush(*(FILE **)(this + 4));
|
|
iVar1 = feof(*(FILE **)(this + 4));
|
|
__off = ftell(*(FILE **)(this + 4));
|
|
if (iVar1 == 0) {
|
|
fseek(*(FILE **)(this + 4),0,2);
|
|
lVar2 = ftell(*(FILE **)(this + 4));
|
|
fseek(*(FILE **)(this + 4),__off,0);
|
|
__off = lVar2;
|
|
}
|
|
return __off;
|
|
}
|
|
|
|
|
|
|
|
### FUNC IFStream @ 0002e9e4
|
|
|
|
/* IFStream::IFStream(char const*) */
|
|
|
|
IFStream * __thiscall IFStream::IFStream(IFStream *this,char *param_1)
|
|
|
|
{
|
|
FILE *__stream;
|
|
long lVar1;
|
|
undefined4 *puVar2;
|
|
|
|
*(undefined4 *)(this + 8) = 0;
|
|
*(undefined ***)this = &PTR__IFStream_00068cb8;
|
|
__stream = fopen(param_1,"rb");
|
|
*(FILE **)(this + 4) = __stream;
|
|
if (__stream != (FILE *)0x0) {
|
|
fseek(__stream,0,2);
|
|
lVar1 = ftell(*(FILE **)(this + 4));
|
|
*(long *)(this + 8) = lVar1;
|
|
fseek(*(FILE **)(this + 4),0,0);
|
|
return this;
|
|
}
|
|
puVar2 = (undefined4 *)FUN_00030824(4);
|
|
*puVar2 = "IOError: open file failed.[IFStream::IFStream]";
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar2,&Error::typeinfo,0);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~IFStream @ 0002ea9c
|
|
|
|
/* IFStream::~IFStream() */
|
|
|
|
void __thiscall IFStream::~IFStream(IFStream *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__IFStream_00068c90;
|
|
if (*(FILE **)(this + 4) != (FILE *)0x0) {
|
|
fclose(*(FILE **)(this + 4));
|
|
}
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetLength @ 0002eac4
|
|
|
|
/* IFStream::GetLength() const */
|
|
|
|
undefined4 __thiscall IFStream::GetLength(IFStream *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 8);
|
|
}
|
|
|
|
|
|
|
|
### FUNC Controller @ 0002eac8
|
|
|
|
/* Controller::Controller() */
|
|
|
|
Controller * __thiscall Controller::Controller(Controller *this)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = __stack_chk_guard;
|
|
iVar2 = 0;
|
|
do {
|
|
*(undefined4 *)(this + iVar2 + 0x84) = 0;
|
|
*(undefined4 *)(this + iVar2 + 0x80) = 0;
|
|
*(undefined4 *)(this + iVar2 + 0x78) = 0;
|
|
*(undefined4 *)(this + iVar2 + 0x7c) = 0;
|
|
iVar2 = iVar2 + 0x6c;
|
|
} while (iVar2 != 0x438);
|
|
MutexLock::MutexLock((MutexLock *)(this + 0x4a0));
|
|
*(undefined4 *)(this + 0x494) = 0;
|
|
*(undefined4 *)(this + 0x490) = 0;
|
|
*(undefined4 *)(this + 0x4a4) = 0;
|
|
*(undefined4 *)(this + 0x48c) = 0;
|
|
*(undefined4 *)this = 4;
|
|
*(undefined4 *)(this + 4) = 3;
|
|
*(undefined4 *)(this + 8) = 0x1194;
|
|
*(undefined4 *)(this + 0xc) = 300;
|
|
*(undefined4 *)(this + 0x14) = 5000;
|
|
*(undefined4 *)(this + 0x18) = 2;
|
|
*(undefined4 *)(this + 0x10) = 0;
|
|
*(undefined4 *)(this + 0x1c) = 1;
|
|
*(undefined4 *)(this + 0x20) = 0;
|
|
*(undefined4 *)(this + 0x24) = 0;
|
|
*(undefined4 *)(this + 0x28) = 0x180;
|
|
*(undefined4 *)(this + 0x2c) = 0x120;
|
|
*(undefined4 *)(this + 0x30) = 0x180;
|
|
*(undefined4 *)(this + 0x34) = 0x120;
|
|
*(undefined4 *)(this + 0x38) = 0x10;
|
|
*(undefined4 *)(this + 0x3c) = 0x50;
|
|
*(undefined4 *)(this + 0x40) = 8;
|
|
*(undefined4 *)(this + 0x44) = 1;
|
|
*(undefined4 *)(this + 0x48) = 1;
|
|
*(undefined4 *)(this + 0x4c) = 5;
|
|
__aeabi_memclr4(0x6b92c,0x54);
|
|
theFunc._128_4_ = 0x41a00000;
|
|
theFunc._132_4_ = 0x3ecccccd;
|
|
theFunc._136_4_ = 0x41a00000;
|
|
theFunc._140_4_ = 0;
|
|
theFunc._144_4_ = 0;
|
|
theFunc._156_4_ = 0x3f7f4b1f;
|
|
theFunc._160_4_ = 0x3f800000;
|
|
theFunc._148_4_ = 0x3dcccccd;
|
|
theFunc._152_4_ = 0x399d4952;
|
|
theFunc._4_4_ = 0;
|
|
theFunc._52_4_ = 500;
|
|
theFunc._12_4_ = 0;
|
|
theFunc._16_4_ = 20000;
|
|
theFunc._20_4_ = (int)"_ZNKSt6localeeqERKS_" + 2;
|
|
theFunc._24_4_ = 0;
|
|
theFunc._28_4_ = 0xff;
|
|
theFunc._32_4_ = 5;
|
|
theFunc._88_4_ = 1;
|
|
theFunc._96_4_ = 1;
|
|
theFunc._44_4_ = 0;
|
|
theFunc._48_4_ = 0;
|
|
theFunc._8_4_ = 0;
|
|
theFunc._120_4_ = 0x41a00000;
|
|
theFunc._124_4_ = 0x3f800000;
|
|
theFunc._80_4_ = 1;
|
|
*(undefined4 *)(this + 0x488) = 0;
|
|
AddProbe(this,0,1,1,0x3f800000,0,2,3000000,3500000);
|
|
AddProbe(this,0,1,1,theFunc._124_4_,0x1000000,0,3000000,3500000);
|
|
AddProbe(this,0,1,0x19,theFunc._124_4_,0x2000000,1,3000000,3500000);
|
|
if (__stack_chk_guard == iVar1) {
|
|
return this;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC AddProbe @ 0002ed04
|
|
|
|
/* Controller::AddProbe(unsigned int, unsigned int, unsigned int, float, unsigned int, int, int,
|
|
int, int, int, ProbeType, tagPOINT const*, unsigned int, tagRECT) */
|
|
|
|
undefined4
|
|
Controller::AddProbe
|
|
(Controller *param_1,undefined4 param_2,undefined4 param_3,int param_5,undefined4 param_6,
|
|
undefined4 param_7,undefined4 param_8,undefined4 param_9,undefined4 param_10,
|
|
undefined4 param_10_00,int param_11,undefined4 param_12,int param_13,uint param_14,
|
|
undefined4 param_15,undefined4 param_16,undefined4 param_17,undefined4 param_18)
|
|
|
|
{
|
|
pthread_mutex_t *__mutex;
|
|
uint uVar1;
|
|
int iVar2;
|
|
Controller *pCVar3;
|
|
uint extraout_r1;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
|
|
__mutex = (pthread_mutex_t *)(param_1 + 0x4a0);
|
|
uVar5 = *(undefined4 *)(param_1 + 0x28);
|
|
pthread_mutex_lock(__mutex);
|
|
uVar1 = __udivsi3(param_2,uVar5);
|
|
pCVar3 = param_1 + 0x488;
|
|
uVar4 = *(uint *)(param_1 + 0x488);
|
|
if ((((uVar4 < 10) && (__aeabi_uidivmod(param_2,uVar5), extraout_r1 < *(uint *)(param_1 + 0x28)))
|
|
&& (param_5 != 0)) && (uVar1 < *(uint *)(param_1 + 0x2c))) {
|
|
__aeabi_memclr4(param_1 + uVar4 * 0x6c + 0x50);
|
|
*(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x50) = param_12;
|
|
*(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x54) = param_2;
|
|
*(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x58) = param_3;
|
|
if (2 < param_14) {
|
|
param_14 = 3;
|
|
}
|
|
*(uint *)(param_1 + *(int *)pCVar3 * 0x6c + 0x74) = param_14;
|
|
iVar2 = *(int *)pCVar3;
|
|
if ((param_13 != 0) && (*(int *)(param_1 + iVar2 * 0x6c + 0x74) != 0)) {
|
|
__aeabi_memcpy4(param_1 + iVar2 * 0x6c + 0x5c,param_13,
|
|
*(int *)(param_1 + iVar2 * 0x6c + 0x74) << 3);
|
|
iVar2 = *(int *)pCVar3;
|
|
}
|
|
iVar2 = iVar2 * 0x6c;
|
|
*(undefined4 *)(param_1 + iVar2 + 0x78) = param_15;
|
|
*(undefined4 *)(param_1 + iVar2 + 0x7c) = param_16;
|
|
*(undefined4 *)(param_1 + iVar2 + 0x80) = param_17;
|
|
*(undefined4 *)(param_1 + iVar2 + 0x84) = param_18;
|
|
*(int *)(param_1 + *(int *)pCVar3 * 0x6c + 0x90) = param_5;
|
|
*(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x8c) = param_6;
|
|
*(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x88) = param_7;
|
|
*(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0x94) = param_8;
|
|
*(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0xa8) = param_9;
|
|
*(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0xac) = param_10;
|
|
*(int *)(param_1 + *(int *)pCVar3 * 0x6c + 0xb0) = param_5 + -1;
|
|
*(undefined4 *)(param_1 + *(int *)pCVar3 * 0x6c + 0xb4) = 0;
|
|
*(int *)pCVar3 = *(int *)pCVar3 + 1;
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar5 = 1;
|
|
if (param_11 != 0) {
|
|
SampleProbe(param_1,*(int *)pCVar3 + -1);
|
|
}
|
|
}
|
|
else {
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar5 = 0;
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~Controller @ 0002ee94
|
|
|
|
/* Controller::~Controller() */
|
|
|
|
Controller * __thiscall Controller::~Controller(Controller *this)
|
|
|
|
{
|
|
*(undefined4 *)(this + 0x494) = 0;
|
|
*(undefined4 *)(this + 0x4a4) = 0;
|
|
CFunctions::ReleaseMemory((CFunctions *)theFunc);
|
|
pthread_mutex_destroy((pthread_mutex_t *)(this + 0x4a0));
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC StopProcess @ 0002eee0
|
|
|
|
/* Controller::StopProcess() */
|
|
|
|
void __thiscall Controller::StopProcess(Controller *this)
|
|
|
|
{
|
|
*(undefined4 *)(this + 0x494) = 0;
|
|
*(undefined4 *)(this + 0x4a4) = 0;
|
|
CFunctions::ReleaseMemory((CFunctions *)theFunc);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC StartProcess @ 0002ef08
|
|
|
|
/* Controller::StartProcess(void (*)(int), unsigned int, unsigned int, unsigned int, unsigned int,
|
|
unsigned int, unsigned int, unsigned int, unsigned int, int, unsigned int, char const*) */
|
|
|
|
void __thiscall
|
|
Controller::StartProcess
|
|
(Controller *this,_func_void_int *param_1,uint param_2,uint param_3,uint param_4,
|
|
uint param_5,uint param_6,uint param_7,uint param_8,uint param_9,int param_10,
|
|
uint param_11,char *param_12)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int iVar2;
|
|
MStream *pMVar3;
|
|
Logging *this_00;
|
|
Logging aLStack_30 [12];
|
|
Logging aLStack_24 [12];
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
uVar1 = 0;
|
|
if (param_1 != (_func_void_int *)0x0) {
|
|
*(_func_void_int **)(this + 0x4a4) = param_1;
|
|
*(uint *)(this + 0x49c) = param_5;
|
|
*(uint *)(this + 0x498) = param_4;
|
|
*(uint *)(this + 0x28) = param_2;
|
|
*(uint *)(this + 0x2c) = param_3;
|
|
*(uint *)this = param_6;
|
|
*(uint *)(this + 4) = param_7;
|
|
*(uint *)(this + 8) = param_8;
|
|
*(uint *)(this + 0xc) = param_9;
|
|
*(int *)(this + 0x18) = param_10;
|
|
*(uint *)(this + 0x40) = param_11;
|
|
iVar2 = CFunctions::Reset((CFunctions *)theFunc,(struct_IntrinsicPara *)(this + 0x28));
|
|
if (iVar2 == 0) {
|
|
pMVar3 = (MStream *)mag::Logging::Logging(aLStack_24,4);
|
|
MStream::operator<<(pMVar3,"Failed to allocate memory");
|
|
this_00 = aLStack_24;
|
|
}
|
|
else {
|
|
iVar2 = CFunctions::LoadCalibrationTable((CFunctions *)theFunc,param_12);
|
|
if (iVar2 != 0) {
|
|
CFunctions::SetColorPalette((CFunctions *)theFunc,*(undefined4 *)(this + 0x18));
|
|
uVar1 = 1;
|
|
*(undefined4 *)(this + 0x494) = 1;
|
|
*(undefined4 *)(this + 0x48c) = 0xffffffff;
|
|
goto LAB_0002efd0;
|
|
}
|
|
pMVar3 = (MStream *)mag::Logging::Logging(aLStack_30,4);
|
|
MStream::operator<<(pMVar3,"Failed to load calibration table");
|
|
this_00 = aLStack_30;
|
|
}
|
|
mag::Logging::~Logging(this_00);
|
|
uVar1 = 0;
|
|
}
|
|
LAB_0002efd0:
|
|
if (__stack_chk_guard == local_18) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail(uVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC setPreviewOrientation @ 0002f068
|
|
|
|
/* Controller::setPreviewOrientation(int) */
|
|
|
|
Controller * __thiscall Controller::setPreviewOrientation(Controller *this,int param_1)
|
|
|
|
{
|
|
if (param_1 < 0xb4) {
|
|
if ((param_1 == 0) || (param_1 == 0x5a)) {
|
|
theFunc._116_4_ = param_1;
|
|
return (Controller *)theFunc;
|
|
}
|
|
}
|
|
else {
|
|
this = (Controller *)0x10e;
|
|
if (param_1 == 0x10e) {
|
|
theFunc._116_4_ = param_1;
|
|
return (Controller *)theFunc;
|
|
}
|
|
if (param_1 == 0xb4) {
|
|
theFunc._116_4_ = param_1;
|
|
return (Controller *)theFunc;
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC getPreviewOrientation @ 0002f090
|
|
|
|
/* Controller::getPreviewOrientation() */
|
|
|
|
undefined4 Controller::getPreviewOrientation(void)
|
|
|
|
{
|
|
return theFunc._116_4_;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FFC @ 0002f0a0
|
|
|
|
/* Controller::FFC() */
|
|
|
|
void __thiscall Controller::FFC(Controller *this)
|
|
|
|
{
|
|
if (*(code **)(this + 0x4a4) != (code *)0x0) {
|
|
(**(code **)(this + 0x4a4))(0);
|
|
}
|
|
theFunc._56_4_ = theFunc._64_4_;
|
|
theFunc._60_4_ = theFunc._68_4_;
|
|
*(undefined4 *)(this + 0x48c) = 0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC PushFrame @ 0002f0d4
|
|
|
|
/* Controller::PushFrame(unsigned short const*, int, int) */
|
|
|
|
undefined4 __thiscall
|
|
Controller::PushFrame(Controller *this,ushort *param_1,int param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 uVar2;
|
|
uint uVar3;
|
|
Controller *pCVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
|
|
if (*(int *)(this + 0x494) == 0) {
|
|
return 0;
|
|
}
|
|
pCVar4 = this + 0x48c;
|
|
iVar6 = *(int *)(this + 0x48c);
|
|
theFunc._64_4_ = param_2;
|
|
theFunc._68_4_ = param_3;
|
|
if (iVar6 < 0) {
|
|
if (*(code **)(this + 0x4a4) != (code *)0x0) {
|
|
(**(code **)(this + 0x4a4))(0);
|
|
}
|
|
theFunc._56_4_ = theFunc._64_4_;
|
|
theFunc._60_4_ = theFunc._68_4_;
|
|
*(undefined4 *)pCVar4 = 0;
|
|
return 0;
|
|
}
|
|
uVar3 = iVar6 + 1;
|
|
*(uint *)pCVar4 = uVar3;
|
|
uVar5 = *(uint *)this;
|
|
uVar1 = *(int *)(this + 0x40) + uVar5;
|
|
if (uVar3 <= uVar5) {
|
|
uVar1 = *(int *)(this + 4) + uVar1;
|
|
LAB_0002f1ce:
|
|
CFunctions::DoSomething((CFunctions *)theFunc,iVar6,uVar1);
|
|
return 0;
|
|
}
|
|
if (uVar3 <= uVar1) {
|
|
if ((uVar3 == uVar1) && (*(code **)(this + 0x4a4) != (code *)0x0)) {
|
|
(**(code **)(this + 0x4a4))(1);
|
|
uVar5 = *(uint *)this;
|
|
uVar3 = *(uint *)pCVar4;
|
|
}
|
|
CFunctions::PushBaselineRaw((CFunctions *)theFunc,param_1,(uint)(uVar3 == uVar5 + 1));
|
|
CFunctions::DoSomething
|
|
((CFunctions *)theFunc,*(int *)pCVar4 + -1,
|
|
*(int *)(this + 0x40) + *(int *)this + *(int *)(this + 4));
|
|
return 0;
|
|
}
|
|
uVar1 = *(int *)(this + 4) + uVar1;
|
|
if (uVar3 <= uVar1) goto LAB_0002f1ce;
|
|
if (uVar3 < *(int *)(this + 8) + uVar1) {
|
|
iVar6 = 100;
|
|
if (0x98be26 < *(uint *)(this + 0x498)) {
|
|
iVar6 = 0x1e;
|
|
}
|
|
if ((uVar3 < iVar6 + uVar1) ||
|
|
(uVar1 = theFunc._56_4_ - param_2 >> 0x1f,
|
|
((theFunc._56_4_ - param_2) + uVar1 ^ uVar1) <= *(uint *)(this + 0xc))) goto LAB_0002f184;
|
|
}
|
|
if (*(code **)(this + 0x4a4) != (code *)0x0) {
|
|
(**(code **)(this + 0x4a4))(0);
|
|
param_3 = theFunc._68_4_;
|
|
param_2 = theFunc._64_4_;
|
|
}
|
|
theFunc._56_4_ = param_2;
|
|
theFunc._60_4_ = param_3;
|
|
*(undefined4 *)pCVar4 = 0;
|
|
LAB_0002f184:
|
|
uVar2 = CFunctions::PushFrame((CFunctions *)theFunc,param_1,0,1,0,1);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetRectTemperatureInfo @ 0002f260
|
|
|
|
/* Controller::GetRectTemperatureInfo(unsigned int, unsigned int, unsigned int, unsigned int, int*,
|
|
int) */
|
|
|
|
int __thiscall
|
|
Controller::GetRectTemperatureInfo
|
|
(Controller *this,uint param_1,uint param_2,uint param_3,uint param_4,int *param_5,
|
|
int param_6)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
|
|
uVar1 = param_4;
|
|
uVar5 = param_3;
|
|
uVar7 = param_1;
|
|
if (theFunc._116_4_ != 0x5a) {
|
|
if (theFunc._116_4_ == 0x10e) {
|
|
uVar5 = *(int *)(this + 0x2c) + (param_3 ^ 0xffffffff);
|
|
uVar1 = *(int *)(this + 0x28) + (param_4 ^ 0xffffffff);
|
|
uVar7 = *(int *)(this + 0x2c) + (param_1 ^ 0xffffffff);
|
|
param_2 = *(int *)(this + 0x28) + (param_2 ^ 0xffffffff);
|
|
}
|
|
else if (theFunc._116_4_ == 0xb4) {
|
|
uVar1 = *(int *)(this + 0x28) + (param_3 ^ 0xffffffff);
|
|
uVar5 = param_4;
|
|
uVar7 = param_2;
|
|
param_2 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffff);
|
|
}
|
|
else {
|
|
uVar5 = *(int *)(this + 0x2c) + (param_4 ^ 0xffffffff);
|
|
uVar7 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffff);
|
|
uVar1 = param_3;
|
|
param_2 = param_1;
|
|
}
|
|
}
|
|
uVar6 = uVar7;
|
|
if ((int)uVar7 <= (int)uVar5) {
|
|
uVar6 = uVar5;
|
|
}
|
|
uVar4 = uVar1;
|
|
if ((int)param_2 <= (int)uVar1) {
|
|
uVar4 = param_2;
|
|
}
|
|
if ((int)uVar7 <= (int)uVar5) {
|
|
uVar5 = uVar7;
|
|
}
|
|
if ((int)param_2 <= (int)uVar1) {
|
|
param_2 = uVar1;
|
|
}
|
|
iVar2 = CFunctions::GetRectTemperatureInfo
|
|
((CFunctions *)theFunc,uVar4,uVar5,param_2,uVar6,param_5,param_6);
|
|
if (iVar2 != 0) {
|
|
iVar3 = Buffer2Client(this,param_5[3]);
|
|
param_5[3] = iVar3;
|
|
iVar3 = Buffer2Client(this,param_5[4]);
|
|
param_5[4] = iVar3;
|
|
}
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Client2Buffer @ 0002f340
|
|
|
|
/* Controller::Client2Buffer(int, int, int&, int&) */
|
|
|
|
void __thiscall
|
|
Controller::Client2Buffer(Controller *this,int param_1,int param_2,int *param_3,int *param_4)
|
|
|
|
{
|
|
if (theFunc._116_4_ == 0x5a) {
|
|
*param_3 = param_2;
|
|
param_2 = param_1;
|
|
}
|
|
else if (theFunc._116_4_ == 0xb4) {
|
|
*param_3 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU);
|
|
}
|
|
else if (theFunc._116_4_ == 0x10e) {
|
|
*param_3 = *(int *)(this + 0x28) + (param_2 ^ 0xffffffffU);
|
|
param_2 = *(int *)(this + 0x2c) + (param_1 ^ 0xffffffffU);
|
|
}
|
|
else {
|
|
*param_3 = param_1;
|
|
param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU);
|
|
}
|
|
*param_4 = param_2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Buffer2Client @ 0002f39c
|
|
|
|
/* Controller::Buffer2Client(int) */
|
|
|
|
int __thiscall Controller::Buffer2Client(Controller *this,int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
|
|
iVar4 = *(int *)(this + 0x28);
|
|
iVar1 = __divsi3(param_1,iVar4);
|
|
iVar2 = param_1 - iVar1 * iVar4;
|
|
iVar3 = *(int *)(this + 0x2c);
|
|
if (theFunc._116_4_ == 0x5a) {
|
|
iVar2 = iVar2 * iVar3 + iVar1;
|
|
}
|
|
else if (theFunc._116_4_ == 0xb4) {
|
|
iVar2 = (iVar4 + iVar1 * iVar4 + -1) - iVar2;
|
|
}
|
|
else if (theFunc._116_4_ == 0x10e) {
|
|
iVar2 = ((iVar3 + -1) - iVar1) + iVar3 * ((iVar4 + -1) - iVar2);
|
|
}
|
|
else {
|
|
iVar2 = ((iVar3 + -1) - iVar1) * iVar4 + iVar2;
|
|
}
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SetEX @ 0002f3fc
|
|
|
|
/* Controller::SetEX(int, int, int) */
|
|
|
|
void Controller::SetEX(int param_1,int param_2,int param_3)
|
|
|
|
{
|
|
CFunctions::SetEX((CFunctions *)theFunc);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC getEX @ 0002f410
|
|
|
|
/* Controller::getEX() */
|
|
|
|
void Controller::getEX(void)
|
|
|
|
{
|
|
CFunctions::GetEX((CFunctions *)theFunc);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC setAutoEnlargeValue @ 0002f424
|
|
|
|
/* Controller::setAutoEnlargeValue(int) */
|
|
|
|
void __thiscall Controller::setAutoEnlargeValue(Controller *this,int param_1)
|
|
|
|
{
|
|
theFunc._12_4_ = 0;
|
|
if (99 < param_1) {
|
|
param_1 = 100;
|
|
}
|
|
if (param_1 < 3) {
|
|
param_1 = 2;
|
|
}
|
|
theFunc._32_4_ = param_1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC setEmissivity @ 0002f448
|
|
|
|
/* Controller::setEmissivity(int, int) */
|
|
|
|
Controller * __thiscall Controller::setEmissivity(Controller *this,int param_1,int param_2)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if ((uint)param_1 < 0x65) {
|
|
uVar1 = __floatsisf(param_2);
|
|
theFunc._128_4_ = __mulsf3(uVar1,0x3a83126f);
|
|
uVar1 = __floatsisf(param_1);
|
|
this = (Controller *)__mulsf3(uVar1,0x3c23d70a);
|
|
theFunc._124_4_ = this;
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SetColorPalette @ 0002f484
|
|
|
|
/* Controller::SetColorPalette(ColorPalette) */
|
|
|
|
void Controller::SetColorPalette(void)
|
|
|
|
{
|
|
CFunctions::SetColorPalette((CFunctions *)theFunc);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC setColorbarSize @ 0002f498
|
|
|
|
/* Controller::setColorbarSize(int, int) */
|
|
|
|
void __thiscall Controller::setColorbarSize(Controller *this,int param_1,int param_2)
|
|
|
|
{
|
|
*(int *)(this + 0x38) = param_1;
|
|
*(int *)(this + 0x3c) = param_2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SetExtParameter @ 0002f4a0
|
|
|
|
/* Controller::SetExtParameter(struct_ExtrinsicPara) */
|
|
|
|
undefined4
|
|
Controller::SetExtParameter
|
|
(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined4 in_lr;
|
|
undefined4 local_c;
|
|
undefined4 uStack_8;
|
|
undefined4 uStack_4;
|
|
|
|
local_c = param_2;
|
|
uStack_8 = param_3;
|
|
uStack_4 = param_4;
|
|
__aeabi_memcpy4(0x6b90c,&local_c,0x74);
|
|
return in_lr;
|
|
}
|
|
|
|
|
|
|
|
### FUNC getExtParameter @ 0002f4cc
|
|
|
|
/* Controller::getExtParameter(struct_ExtrinsicPara&) */
|
|
|
|
void __thiscall Controller::getExtParameter(Controller *this,struct_ExtrinsicPara *param_1)
|
|
|
|
{
|
|
__aeabi_memcpy4(param_1,0x6b90c,0x74);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC IsOutputDataReady @ 0002f4e8
|
|
|
|
/* Controller::IsOutputDataReady() */
|
|
|
|
undefined4 Controller::IsOutputDataReady(void)
|
|
|
|
{
|
|
return theFunc._172_4_;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SaveDDT @ 0002f4f8
|
|
|
|
/* Controller::SaveDDT(char const*) */
|
|
|
|
void __thiscall Controller::SaveDDT(Controller *this,char *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
char *__format;
|
|
undefined4 uVar3;
|
|
OFStream aOStack_394 [8];
|
|
undefined4 local_38c;
|
|
undefined4 local_388;
|
|
int local_384;
|
|
int local_380;
|
|
undefined4 local_37c;
|
|
undefined4 local_378;
|
|
undefined4 local_374;
|
|
undefined4 local_370;
|
|
undefined1 auStack_36c [8];
|
|
undefined4 local_364;
|
|
undefined4 local_360;
|
|
char local_35c [64];
|
|
time_t local_31c;
|
|
int local_318;
|
|
undefined4 local_314;
|
|
undefined1 auStack_2fc [556];
|
|
undefined4 local_d0;
|
|
undefined4 local_cc;
|
|
undefined4 local_c8;
|
|
undefined4 local_c4;
|
|
undefined4 local_c0;
|
|
undefined4 local_bc;
|
|
undefined4 local_b8;
|
|
undefined4 local_b4;
|
|
undefined4 local_b0;
|
|
undefined4 local_ac;
|
|
undefined4 local_a8;
|
|
undefined4 local_a4;
|
|
undefined4 local_a0;
|
|
undefined4 local_9c;
|
|
undefined4 local_98;
|
|
int local_18;
|
|
|
|
local_18 = __stack_chk_guard;
|
|
if (theFunc._172_4_ == 0) {
|
|
puVar2 = (undefined4 *)__errno();
|
|
*puVar2 = 0xe4ae0006;
|
|
uVar3 = 0;
|
|
goto LAB_0002f67a;
|
|
}
|
|
__aeabi_memclr4(auStack_36c,0x354);
|
|
local_388 = 0x10002;
|
|
local_38c = 0x374;
|
|
local_384 = *(int *)(this + 0x28);
|
|
local_380 = *(int *)(this + 0x2c);
|
|
local_31c = time((time_t *)0x0);
|
|
local_318 = local_31c >> 0x1f;
|
|
uVar3 = *(undefined4 *)(this + 0x498);
|
|
local_378 = theFunc._20736_4_;
|
|
local_37c = theFunc._20732_4_;
|
|
local_370 = theFunc._64_4_;
|
|
local_374 = theFunc._68_4_;
|
|
local_360 = 0;
|
|
local_364 = 0;
|
|
iVar1 = *(int *)(this + 0x49c);
|
|
local_314 = uVar3;
|
|
if (iVar1 == 2) {
|
|
builtin_strncpy(local_35c + 4,"C3P",4);
|
|
builtin_strncpy(local_35c,"MAG-",4);
|
|
__format = "MAG-C3P-%d";
|
|
LAB_0002f5c4:
|
|
sprintf(local_35c,__format,uVar3);
|
|
}
|
|
else {
|
|
if (iVar1 == 1) {
|
|
__aeabi_memcpy(local_35c,"MAG-C3",7);
|
|
__format = "MAG-C3-%d";
|
|
goto LAB_0002f5c4;
|
|
}
|
|
if (iVar1 == 0) {
|
|
__aeabi_memcpy(local_35c,"MAG-C1",7);
|
|
__format = "MAG-C1-%d";
|
|
goto LAB_0002f5c4;
|
|
}
|
|
}
|
|
if ((uint)theFunc._104_4_ < (uint)theFunc._12588_4_) {
|
|
__aeabi_memcpy4(auStack_2fc,theFunc._104_4_ * 0x21c + 0x6ea38);
|
|
}
|
|
local_d0 = *(undefined4 *)(this + 0x18);
|
|
local_cc = 0;
|
|
local_b4 = theFunc._12_4_;
|
|
local_b0 = theFunc._16_4_;
|
|
local_ac = theFunc._20_4_;
|
|
local_a8 = theFunc._24_4_;
|
|
local_a4 = theFunc._28_4_;
|
|
local_a0 = theFunc._32_4_;
|
|
local_b8 = theFunc._120_4_;
|
|
local_c8 = theFunc._124_4_;
|
|
local_bc = theFunc._160_4_;
|
|
local_c4 = theFunc._128_4_;
|
|
local_c0 = theFunc._156_4_;
|
|
local_9c = theFunc._44_4_;
|
|
local_98 = theFunc._48_4_;
|
|
OFStream::OFStream(aOStack_394,param_1,false);
|
|
OFStream::Write(aOStack_394,&local_38c,0x374,1);
|
|
OFStream::Write(aOStack_394,(void *)theFunc._180_4_,local_380 * local_384 * 2,1);
|
|
IFStream::~IFStream((IFStream *)aOStack_394);
|
|
uVar3 = 1;
|
|
LAB_0002f67a:
|
|
if (__stack_chk_guard != local_18) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail(uVar3);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetTemperature @ 0002f734
|
|
|
|
/* Controller::GetTemperature(unsigned int, unsigned int, int) */
|
|
|
|
void __thiscall Controller::GetTemperature(Controller *this,uint param_1,uint param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = Client2Buffer(this,param_1);
|
|
CFunctions::GetTemperature((CFunctions *)theFunc,uVar1,param_2,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Client2Buffer @ 0002f758
|
|
|
|
/* Controller::Client2Buffer(int) */
|
|
|
|
int __thiscall Controller::Client2Buffer(Controller *this,int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int extraout_r1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
iVar2 = *(int *)(this + 0x28);
|
|
iVar3 = *(int *)(this + 0x2c);
|
|
if (theFunc._116_4_ == 0x5a) {
|
|
iVar1 = __divsi3(param_1,iVar3);
|
|
iVar1 = (param_1 - iVar1 * iVar3) * iVar2 + iVar1;
|
|
}
|
|
else if (theFunc._116_4_ == 0xb4) {
|
|
__aeabi_idivmod(param_1,iVar2);
|
|
iVar1 = param_1 + iVar2 + extraout_r1 * -2 + -1;
|
|
}
|
|
else if (theFunc._116_4_ == 0x10e) {
|
|
iVar1 = __divsi3(param_1,iVar3);
|
|
iVar1 = ((iVar2 + -1) - iVar1) + iVar2 * (iVar3 + (param_1 ^ 0xffffffffU) + iVar1 * iVar3);
|
|
}
|
|
else {
|
|
iVar1 = __divsi3(param_1,iVar2);
|
|
iVar1 = iVar2 * (iVar3 + -1 + iVar1 * -2) + param_1;
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetOutputBMPData @ 0002f7e0
|
|
|
|
/* Controller::GetOutputBMPData(unsigned int*, int) */
|
|
|
|
undefined4 __thiscall Controller::GetOutputBMPData(Controller *this,uint *param_1,int param_2)
|
|
|
|
{
|
|
bool bVar1;
|
|
undefined4 uVar2;
|
|
byte *pbVar3;
|
|
uint *puVar4;
|
|
int iVar5;
|
|
byte *pbVar6;
|
|
uint *puVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
|
|
iVar8 = *(int *)(this + 0x28);
|
|
iVar9 = *(int *)(this + 0x2c);
|
|
iVar5 = iVar8 * iVar9 * 4;
|
|
uVar2 = 0;
|
|
if (iVar5 - param_2 == 0 || iVar5 < param_2) {
|
|
pbVar3 = (byte *)CFunctions::GetOriginalBMPDataPointer((CFunctions *)theFunc);
|
|
uVar2 = 1;
|
|
if (0 < iVar9) {
|
|
puVar4 = param_1 + (iVar9 + -1) * iVar8;
|
|
iVar5 = iVar9 + -1;
|
|
do {
|
|
pbVar6 = pbVar3;
|
|
if (iVar8 != 0) {
|
|
pbVar6 = pbVar3 + iVar8;
|
|
puVar7 = puVar4;
|
|
iVar9 = iVar8;
|
|
do {
|
|
*puVar7 = *(uint *)(theFunc + (uint)*pbVar3 * 4 + 0x24f4) | 0xff000000;
|
|
puVar7 = puVar7 + 1;
|
|
iVar9 = iVar9 + -1;
|
|
pbVar3 = pbVar3 + 1;
|
|
} while (iVar9 != 0);
|
|
puVar4 = puVar4 + iVar8;
|
|
}
|
|
puVar4 = puVar4 + iVar8 * -2;
|
|
bVar1 = 0 < iVar5;
|
|
pbVar3 = pbVar6;
|
|
iVar5 = iVar5 + -1;
|
|
} while (bVar1);
|
|
uVar2 = 1;
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetOutputColorBarData @ 0002f878
|
|
|
|
/* Controller::GetOutputColorBarData(unsigned int*, int) */
|
|
|
|
undefined4 __thiscall Controller::GetOutputColorBarData(Controller *this,uint *param_1,int param_2)
|
|
|
|
{
|
|
bool bVar1;
|
|
uint *puVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
undefined4 uVar7;
|
|
|
|
uVar6 = *(uint *)(this + 0x38);
|
|
uVar4 = uVar6 * *(int *)(this + 0x3c) * 4;
|
|
uVar7 = 0;
|
|
if (uVar4 < (uint)param_2 || uVar4 - param_2 == 0) {
|
|
iVar3 = *(int *)(this + 0x3c) + -1;
|
|
uVar7 = 1;
|
|
if (-1 < iVar3) {
|
|
puVar2 = param_1 + iVar3 * uVar6;
|
|
iVar5 = theFunc._200_4_;
|
|
do {
|
|
if (uVar6 == 0) {
|
|
uVar6 = 0;
|
|
}
|
|
else {
|
|
uVar4 = 0;
|
|
do {
|
|
*puVar2 = *(uint *)(theFunc + (uint)*(byte *)(iVar5 + uVar4) * 4 + 0x291c) | 0xff000000;
|
|
puVar2 = puVar2 + 1;
|
|
uVar4 = uVar4 + 1;
|
|
uVar6 = *(uint *)(this + 0x38);
|
|
} while (uVar4 < uVar6);
|
|
iVar5 = iVar5 + uVar4;
|
|
}
|
|
puVar2 = puVar2 + uVar6 * -2;
|
|
bVar1 = 0 < iVar3;
|
|
iVar3 = iVar3 + -1;
|
|
} while (bVar1);
|
|
uVar7 = 1;
|
|
}
|
|
}
|
|
return uVar7;
|
|
}
|
|
|
|
|
|
|
|
### FUNC GetStatePointer @ 0002f900
|
|
|
|
/* Controller::GetStatePointer(struct_State*) */
|
|
|
|
undefined4 __thiscall Controller::GetStatePointer(Controller *this,struct_State *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
__aeabi_memcpy4(param_1,0x6fd90,0xc68);
|
|
uVar1 = Buffer2Client(this,*(int *)(param_1 + 0x28));
|
|
*(undefined4 *)(param_1 + 0x28) = uVar1;
|
|
uVar1 = Buffer2Client(this,*(int *)(param_1 + 0x2c));
|
|
*(undefined4 *)(param_1 + 0x2c) = uVar1;
|
|
uVar1 = Buffer2Client(this,*(int *)(param_1 + 0x30));
|
|
*(undefined4 *)(param_1 + 0x30) = uVar1;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Lock @ 0002f948
|
|
|
|
/* Controller::Lock() */
|
|
|
|
void Controller::Lock(void)
|
|
|
|
{
|
|
pthread_mutex_lock((pthread_mutex_t *)(theFunc + 0xb0));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Unlock @ 0002f960
|
|
|
|
/* Controller::Unlock() */
|
|
|
|
void Controller::Unlock(void)
|
|
|
|
{
|
|
pthread_mutex_unlock((pthread_mutex_t *)(theFunc + 0xb0));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SampleTemperatures @ 0002f978
|
|
|
|
/* Controller::SampleTemperatures() */
|
|
|
|
void __thiscall Controller::SampleTemperatures(Controller *this)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
Controller *pCVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
float extraout_s0;
|
|
float extraout_s0_00;
|
|
float extraout_s0_01;
|
|
float extraout_s0_02;
|
|
float fVar7;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)(this + 0x4a0));
|
|
pthread_mutex_lock((pthread_mutex_t *)(theFunc + 0xb0));
|
|
if (*(int *)(this + 0x488) != 0) {
|
|
iVar6 = 0;
|
|
uVar5 = 0;
|
|
fVar7 = extraout_s0;
|
|
do {
|
|
iVar3 = *(int *)(this + iVar6 + 0xb0);
|
|
*(uint *)(this + iVar6 + 0xb0) = iVar3 + 1U;
|
|
*(int *)(this + iVar6 + 0xb8) = *(int *)(this + iVar6 + 0xb8) + 1;
|
|
if (*(uint *)(this + iVar6 + 0x90) <= iVar3 + 1U) {
|
|
*(undefined4 *)(this + iVar6 + 0xb0) = 0;
|
|
if (uVar5 == 2) {
|
|
*(undefined4 *)(this + 300) = theFunc._17584_4_;
|
|
pCVar2 = this + 0x170;
|
|
uVar1 = theFunc._17568_4_;
|
|
if (*(int *)(this + 0x10) != 0) {
|
|
uVar1 = CFunctions::CorrectTemperature((int)theFunc,fVar7,theFunc._17568_4_);
|
|
fVar7 = extraout_s0_01;
|
|
}
|
|
LAB_0002fab4:
|
|
*(undefined4 *)pCVar2 = uVar1;
|
|
LAB_0002fad6:
|
|
iVar3 = *(int *)(this + iVar6 + 0x98);
|
|
*(int *)(this + iVar6 + 0x9c) = iVar3;
|
|
*(int *)(this + iVar6 + 0xa0) = iVar3;
|
|
*(int *)(this + iVar6 + 0xa4) = iVar3;
|
|
}
|
|
else {
|
|
if (uVar5 == 1) {
|
|
*(undefined4 *)(this + 0xc0) = theFunc._17588_4_;
|
|
pCVar2 = this + 0x104;
|
|
uVar1 = theFunc._17572_4_;
|
|
if (*(int *)(this + 0x10) != 0) {
|
|
uVar1 = CFunctions::CorrectTemperature((int)theFunc,fVar7,theFunc._17572_4_);
|
|
fVar7 = extraout_s0_02;
|
|
}
|
|
goto LAB_0002fab4;
|
|
}
|
|
if (uVar5 == 0) {
|
|
*(undefined4 *)(this + 0x54) = theFunc._17592_4_;
|
|
uVar1 = theFunc._17576_4_;
|
|
if (*(int *)(this + 0x10) != 0) {
|
|
uVar1 = CFunctions::CorrectTemperature((int)theFunc,fVar7,theFunc._17576_4_);
|
|
fVar7 = extraout_s0_00;
|
|
}
|
|
*(undefined4 *)(this + 0x98) = uVar1;
|
|
goto LAB_0002fad6;
|
|
}
|
|
fVar7 = (float)SampleProbe(this,uVar5);
|
|
if ((*(uint *)(this + iVar6 + 0x50) < 8) &&
|
|
((1 << (*(uint *)(this + iVar6 + 0x50) & 0xff) & 0xc1U) != 0)) goto LAB_0002fad6;
|
|
iVar3 = *(int *)(this + iVar6 + 0x98);
|
|
}
|
|
uVar4 = 0;
|
|
if (*(int *)(this + iVar6 + 0xa8) <= iVar3) {
|
|
uVar4 = (uint)(iVar3 <= *(int *)(this + iVar6 + 0xac));
|
|
}
|
|
*(uint *)(this + iVar6 + 0xb4) = uVar4;
|
|
}
|
|
iVar6 = iVar6 + 0x6c;
|
|
uVar5 = uVar5 + 1;
|
|
} while (uVar5 < *(uint *)(this + 0x488));
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)(theFunc + 0xb0));
|
|
pthread_mutex_unlock((pthread_mutex_t *)(this + 0x4a0));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SampleProbe @ 0002fb60
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
/* Controller::SampleProbe(int) */
|
|
|
|
void __thiscall Controller::SampleProbe(Controller *this,int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
uint *puVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
int iVar11;
|
|
float extraout_s0;
|
|
float extraout_s0_00;
|
|
float extraout_s0_01;
|
|
float fVar12;
|
|
float extraout_s0_02;
|
|
float extraout_s0_03;
|
|
float extraout_s0_04;
|
|
float extraout_s0_05;
|
|
float extraout_s0_06;
|
|
float extraout_s0_07;
|
|
uint *local_a30;
|
|
uint local_a2c;
|
|
uint local_a28;
|
|
uint *local_a24;
|
|
uint local_a20;
|
|
uint local_a1c;
|
|
uint *local_a18;
|
|
uint local_a14;
|
|
uint local_a10;
|
|
int local_a0c [638];
|
|
|
|
iVar1 = __stack_chk_guard;
|
|
iVar2 = 0;
|
|
if ((9 < param_1) || (*(int *)(this + 0x488) < param_1)) goto switchD_0002fbaa_default;
|
|
iVar6 = param_1 * 0x6c;
|
|
iVar11 = *(int *)(this + iVar6 + 0x50);
|
|
switch(iVar11) {
|
|
case 0:
|
|
uVar10 = CFunctions::GetTemperature
|
|
((CFunctions *)theFunc,*(uint *)(this + iVar6 + 0x54),
|
|
*(uint *)(this + iVar6 + 0x58),0);
|
|
if (*(int *)(this + 0x10) != 0) {
|
|
uVar10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_04,uVar10);
|
|
}
|
|
*(uint *)(this + iVar6 + 0x98) = uVar10;
|
|
iVar2 = 0;
|
|
break;
|
|
case 1:
|
|
uVar10 = *(uint *)(this + 0x2c);
|
|
if (*(uint *)(this + 0x2c) <= *(uint *)(this + 0x28)) {
|
|
uVar10 = *(uint *)(this + 0x28);
|
|
}
|
|
iVar2 = CFunctions::GetLineTemperatureInfo2
|
|
((CFunctions *)theFunc,(ushort *)&local_a18,uVar10 << 1,(int *)&local_a24,
|
|
*(uint *)(this + iVar6 + 0x5c),*(uint *)(this + iVar6 + 0x60),
|
|
*(uint *)(this + iVar6 + 100),*(uint *)(this + iVar6 + 0x68),0);
|
|
if (0 < iVar2) {
|
|
if (*(int *)(this + 0x10) == 0) {
|
|
local_a30 = local_a24;
|
|
local_a2c = local_a20;
|
|
local_a28 = local_a1c;
|
|
puVar4 = local_a24;
|
|
uVar10 = local_a20;
|
|
}
|
|
else {
|
|
puVar4 = (uint *)CFunctions::CorrectTemperature((int)theFunc,extraout_s0_05,(uint)local_a24)
|
|
;
|
|
local_a30 = puVar4;
|
|
uVar10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_06,local_a20);
|
|
local_a2c = uVar10;
|
|
local_a28 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_07,local_a1c);
|
|
}
|
|
*(uint *)(this + iVar6 + 0xa0) = uVar10;
|
|
*(uint **)(this + iVar6 + 0x9c) = puVar4;
|
|
*(uint *)(this + iVar6 + 0xa4) = local_a28;
|
|
if (*(int *)(this + iVar6 + 0x94) < 3) {
|
|
puVar4 = (&local_a30)[*(int *)(this + iVar6 + 0x94)];
|
|
}
|
|
else {
|
|
puVar4 = (uint *)(uVar10 - (int)puVar4);
|
|
}
|
|
*(uint **)(this + iVar6 + 0x98) = puVar4;
|
|
*(undefined4 *)(this + iVar6 + 0x54) = 0;
|
|
}
|
|
iVar2 = 1;
|
|
break;
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
iVar2 = 0;
|
|
if (iVar11 == 5) break;
|
|
if (iVar11 == 2) {
|
|
uVar8 = *(uint *)(this + iVar6 + 0x80);
|
|
uVar3 = *(uint *)(this + iVar6 + 0x78);
|
|
uVar9 = *(uint *)(this + iVar6 + 0x7c);
|
|
uVar10 = *(uint *)(this + iVar6 + 0x84);
|
|
uVar7 = uVar10;
|
|
if ((int)uVar10 <= (int)uVar9) {
|
|
uVar7 = uVar9;
|
|
}
|
|
uVar5 = uVar8;
|
|
if ((int)uVar3 <= (int)uVar8) {
|
|
uVar5 = uVar3;
|
|
}
|
|
if ((int)uVar9 <= (int)uVar10) {
|
|
uVar10 = uVar9;
|
|
}
|
|
if ((int)uVar8 <= (int)uVar3) {
|
|
uVar8 = uVar3;
|
|
}
|
|
iVar11 = CFunctions::GetRectTemperatureInfo
|
|
((CFunctions *)theFunc,uVar5,uVar10,uVar8,uVar7,(int *)&local_a18,0);
|
|
fVar12 = extraout_s0;
|
|
}
|
|
else {
|
|
uVar8 = *(uint *)(this + iVar6 + 0x80);
|
|
uVar3 = *(uint *)(this + iVar6 + 0x78);
|
|
uVar9 = *(uint *)(this + iVar6 + 0x7c);
|
|
uVar10 = *(uint *)(this + iVar6 + 0x84);
|
|
uVar7 = uVar10;
|
|
if ((int)uVar10 <= (int)uVar9) {
|
|
uVar7 = uVar9;
|
|
}
|
|
uVar5 = uVar8;
|
|
if ((int)uVar3 <= (int)uVar8) {
|
|
uVar5 = uVar3;
|
|
}
|
|
if ((int)uVar9 <= (int)uVar10) {
|
|
uVar10 = uVar9;
|
|
}
|
|
if ((int)uVar8 <= (int)uVar3) {
|
|
uVar8 = uVar3;
|
|
}
|
|
iVar11 = CFunctions::GetEllipseTemperatureInfo
|
|
((CFunctions *)theFunc,uVar5,uVar10,uVar8,uVar7,(int *)&local_a18,0);
|
|
fVar12 = extraout_s0_01;
|
|
}
|
|
iVar2 = 0;
|
|
if (iVar11 == 0) break;
|
|
if (*(int *)(this + 0x10) == 0) {
|
|
local_a24 = local_a18;
|
|
local_a20 = local_a14;
|
|
puVar4 = local_a18;
|
|
uVar10 = local_a14;
|
|
}
|
|
else {
|
|
puVar4 = (uint *)CFunctions::CorrectTemperature((int)theFunc,fVar12,(uint)local_a18);
|
|
local_a24 = puVar4;
|
|
uVar10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_02,local_a14);
|
|
local_a20 = uVar10;
|
|
local_a10 = CFunctions::CorrectTemperature((int)theFunc,extraout_s0_03,local_a10);
|
|
}
|
|
local_a1c = local_a10;
|
|
*(uint *)(this + iVar6 + 0xa0) = uVar10;
|
|
*(uint **)(this + iVar6 + 0x9c) = puVar4;
|
|
*(uint *)(this + iVar6 + 0xa4) = local_a10;
|
|
iVar2 = *(int *)(this + iVar6 + 0x94);
|
|
if (iVar2 < 3) {
|
|
*(uint **)(this + iVar6 + 0x98) = (&local_a24)[iVar2];
|
|
if (iVar2 == 2) goto LAB_0002fef8;
|
|
iVar2 = local_a0c[iVar2];
|
|
}
|
|
else {
|
|
*(uint *)(this + iVar6 + 0x98) = uVar10 - (int)puVar4;
|
|
LAB_0002fef8:
|
|
iVar2 = ((*(int *)(this + iVar6 + 0x7c) + *(int *)(this + iVar6 + 0x84)) / 2) *
|
|
*(int *)(this + 0x28) +
|
|
(*(int *)(this + iVar6 + 0x78) + *(int *)(this + iVar6 + 0x80)) / 2;
|
|
}
|
|
*(int *)(this + iVar6 + 0x54) = iVar2;
|
|
iVar2 = iVar11;
|
|
break;
|
|
case 6:
|
|
case 7:
|
|
if (*(int *)(this + iVar6 + 0x74) == 0) {
|
|
local_a14 = 0;
|
|
local_a18 = &switchD_0002fbaa::switchdataD_0002fbac;
|
|
}
|
|
else {
|
|
uVar10 = 0;
|
|
do {
|
|
iVar2 = uVar10 * 8 + iVar6;
|
|
puVar4 = (uint *)CFunctions::GetTemperature
|
|
((CFunctions *)theFunc,
|
|
*(int *)(this + iVar2 + 0x60) * *(int *)(this + 0x28) +
|
|
*(int *)(this + iVar2 + 0x5c),*(uint *)(this + iVar6 + 0x58),0);
|
|
if (*(int *)(this + 0x10) != 0) {
|
|
puVar4 = (uint *)CFunctions::CorrectTemperature((int)theFunc,extraout_s0_00,(uint)puVar4);
|
|
}
|
|
(&local_a18)[uVar10] = puVar4;
|
|
uVar10 = uVar10 + 1;
|
|
} while (uVar10 < *(uint *)(this + iVar6 + 0x74));
|
|
iVar11 = *(int *)(this + iVar6 + 0x50);
|
|
}
|
|
uVar10 = (int)((int)local_a18 - local_a14) >> 0x1f;
|
|
uVar10 = ((int)local_a18 - local_a14) + uVar10 ^ uVar10;
|
|
if (iVar11 == 7) {
|
|
uVar7 = (int)((int)local_a18 - local_a10) >> 0x1f;
|
|
uVar7 = ((int)local_a18 - local_a10) + uVar7 ^ uVar7;
|
|
uVar8 = (int)(local_a14 - local_a10) >> 0x1f;
|
|
uVar8 = (local_a14 - local_a10) + uVar8 ^ uVar8;
|
|
if ((int)uVar8 <= (int)uVar10) {
|
|
uVar8 = uVar10;
|
|
}
|
|
uVar10 = uVar7;
|
|
if ((int)uVar7 <= (int)uVar8) {
|
|
uVar10 = uVar8;
|
|
}
|
|
}
|
|
*(uint *)(this + iVar6 + 0x98) = uVar10;
|
|
iVar2 = 0;
|
|
}
|
|
switchD_0002fbaa_default:
|
|
if (__stack_chk_guard != iVar1) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail(iVar2);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC DeleteProbe @ 0002ff98
|
|
|
|
/* Controller::DeleteProbe(unsigned int) */
|
|
|
|
undefined4 __thiscall Controller::DeleteProbe(Controller *this,uint param_1)
|
|
|
|
{
|
|
pthread_mutex_t *__mutex;
|
|
uint uVar1;
|
|
Controller *pCVar2;
|
|
uint uVar3;
|
|
|
|
__mutex = (pthread_mutex_t *)(this + 0x4a0);
|
|
pthread_mutex_lock(__mutex);
|
|
if (2 < param_1) {
|
|
uVar1 = *(uint *)(this + 0x488);
|
|
uVar3 = param_1 + 1;
|
|
if (uVar3 <= uVar1) {
|
|
if (uVar3 < uVar1) {
|
|
pCVar2 = this + param_1 * 0x6c + 0xbc;
|
|
do {
|
|
__aeabi_memcpy4(pCVar2 + -0x6c,pCVar2,0x6c);
|
|
pCVar2 = pCVar2 + 0x6c;
|
|
uVar3 = uVar3 + 1;
|
|
uVar1 = *(uint *)(this + 0x488);
|
|
} while (uVar3 < uVar1);
|
|
}
|
|
*(uint *)(this + 0x488) = uVar1 - 1;
|
|
pthread_mutex_unlock(__mutex);
|
|
return 1;
|
|
}
|
|
}
|
|
pthread_mutex_unlock(__mutex);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC EditProbe @ 0002fffc
|
|
|
|
/* Controller::EditProbe(unsigned int, unsigned int, unsigned int, unsigned int, float, unsigned
|
|
int, int, int, int, int) */
|
|
|
|
undefined4
|
|
Controller::EditProbe
|
|
(uint param_1,uint param_2,uint param_3,uint param_4,float param_5,uint param_6,
|
|
int param_7,int param_8,int param_9,int param_10)
|
|
|
|
{
|
|
pthread_mutex_t *__mutex;
|
|
uint uVar1;
|
|
uint extraout_r1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
undefined4 in_stack_00000014;
|
|
|
|
__mutex = (pthread_mutex_t *)(param_1 + 0x4a0);
|
|
uVar3 = *(undefined4 *)(param_1 + 0x28);
|
|
pthread_mutex_lock(__mutex);
|
|
uVar1 = __udivsi3(param_3,uVar3);
|
|
if ((((param_2 < *(uint *)(param_1 + 0x488)) &&
|
|
(__aeabi_uidivmod(param_3,uVar3), extraout_r1 < *(uint *)(param_1 + 0x28))) && (param_6 != 0)
|
|
) && (uVar1 < *(uint *)(param_1 + 0x2c))) {
|
|
iVar2 = param_1 + param_2 * 0x6c;
|
|
*(uint *)(iVar2 + 0x90) = param_6;
|
|
*(int *)(iVar2 + 0x8c) = param_7;
|
|
*(int *)(iVar2 + 0x88) = param_8;
|
|
*(int *)(iVar2 + 0x94) = param_9;
|
|
*(int *)(iVar2 + 0xa8) = param_10;
|
|
*(undefined4 *)(iVar2 + 0xac) = in_stack_00000014;
|
|
*(uint *)(iVar2 + 0x54) = param_3;
|
|
*(uint *)(iVar2 + 0x58) = param_4;
|
|
pthread_mutex_unlock(__mutex);
|
|
SampleProbe((Controller *)param_1,param_2);
|
|
uVar3 = 1;
|
|
}
|
|
else {
|
|
pthread_mutex_unlock(__mutex);
|
|
uVar3 = 0;
|
|
}
|
|
return uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC SaveDDT @ 000300aa
|
|
|
|
/* Controller::SaveDDT() */
|
|
|
|
void Controller::SaveDDT(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Buffer2Client @ 000300ac
|
|
|
|
/* Controller::Buffer2Client(int, int&, int&) */
|
|
|
|
void __thiscall Controller::Buffer2Client(Controller *this,int param_1,int *param_2,int *param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
|
|
iVar3 = *(int *)(this + 0x28);
|
|
uVar1 = __udivsi3(param_1,iVar3);
|
|
uVar2 = param_1 - uVar1 * iVar3;
|
|
if (theFunc._116_4_ == 0x5a) {
|
|
LAB_00030102:
|
|
*param_2 = uVar1;
|
|
*param_3 = uVar2;
|
|
iVar3 = *(int *)(this + 0x28);
|
|
}
|
|
else if (theFunc._116_4_ != 0xb4) {
|
|
if (theFunc._116_4_ == 0x10e) goto LAB_0003011c;
|
|
*param_2 = uVar2;
|
|
*param_3 = *(int *)(this + 0x2c) + (uVar1 ^ 0xffffffff);
|
|
goto LAB_00030102;
|
|
}
|
|
*param_2 = iVar3 + (uVar2 ^ 0xffffffff);
|
|
*param_3 = uVar1;
|
|
LAB_0003011c:
|
|
*param_2 = *(int *)(this + 0x2c) + (uVar1 ^ 0xffffffff);
|
|
*param_3 = *(int *)(this + 0x28) + (uVar2 ^ 0xffffffff);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Buffer2Client @ 00030138
|
|
|
|
/* Controller::Buffer2Client(int, int, int&, int&) */
|
|
|
|
void __thiscall
|
|
Controller::Buffer2Client(Controller *this,int param_1,int param_2,int *param_3,int *param_4)
|
|
|
|
{
|
|
if (theFunc._116_4_ == 0x5a) {
|
|
*param_3 = param_2;
|
|
param_2 = param_1;
|
|
}
|
|
else if (theFunc._116_4_ == 0xb4) {
|
|
*param_3 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU);
|
|
}
|
|
else if (theFunc._116_4_ == 0x10e) {
|
|
*param_3 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU);
|
|
param_2 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU);
|
|
}
|
|
else {
|
|
*param_3 = param_1;
|
|
param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU);
|
|
}
|
|
*param_4 = param_2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC clientPos2ClientXY @ 00030194
|
|
|
|
/* Controller::clientPos2ClientXY(int, int&, int&) */
|
|
|
|
void __thiscall
|
|
Controller::clientPos2ClientXY(Controller *this,int param_1,int *param_2,int *param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
Controller *pCVar2;
|
|
|
|
if ((int)theFunc._116_4_ < 0xb4) {
|
|
if (theFunc._116_4_ == 0) {
|
|
LAB_000301c0:
|
|
pCVar2 = this + 0x28;
|
|
goto LAB_000301ce;
|
|
}
|
|
if (theFunc._116_4_ != 0x5a) {
|
|
return;
|
|
}
|
|
}
|
|
else if (theFunc._116_4_ != 0x10e) {
|
|
if (theFunc._116_4_ != 0xb4) {
|
|
return;
|
|
}
|
|
goto LAB_000301c0;
|
|
}
|
|
pCVar2 = this + 0x2c;
|
|
LAB_000301ce:
|
|
iVar1 = __udivsi3(param_1,*(undefined4 *)pCVar2);
|
|
*param_3 = iVar1;
|
|
*param_2 = param_1 - iVar1 * *(int *)pCVar2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC clientPos2ScreenXY @ 000301ec
|
|
|
|
/* Controller::clientPos2ScreenXY(int, int, int, int&, int&) */
|
|
|
|
void __thiscall
|
|
Controller::clientPos2ScreenXY
|
|
(Controller *this,int param_1,int param_2,int param_3,int *param_4,int *param_5)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined1 *puVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
Controller *pCVar5;
|
|
|
|
uVar1 = theFunc._116_4_;
|
|
puVar2 = theFunc;
|
|
iVar4 = param_3;
|
|
if ((int)theFunc._116_4_ < 0xb4) {
|
|
if (theFunc._116_4_ == 0) {
|
|
LAB_00030218:
|
|
pCVar5 = this + 0x28;
|
|
goto LAB_00030226;
|
|
}
|
|
if (theFunc._116_4_ == 0x5a) goto LAB_00030220;
|
|
}
|
|
else {
|
|
puVar2 = (undefined1 *)0x10e;
|
|
if (theFunc._116_4_ != 0x10e) {
|
|
if (theFunc._116_4_ != 0xb4) goto LAB_0003023c;
|
|
goto LAB_00030218;
|
|
}
|
|
LAB_00030220:
|
|
pCVar5 = this + 0x2c;
|
|
LAB_00030226:
|
|
iVar3 = *(int *)pCVar5;
|
|
iVar4 = __udivsi3(param_1,iVar3);
|
|
puVar2 = (undefined1 *)(param_1 - iVar4 * iVar3);
|
|
}
|
|
LAB_0003023c:
|
|
if ((int)uVar1 < 0xb4) {
|
|
if (uVar1 == 0) {
|
|
LAB_00030258:
|
|
iVar3 = __udivsi3((int)puVar2 * param_2,*(undefined4 *)(this + 0x28));
|
|
*param_4 = iVar3;
|
|
pCVar5 = this + 0x2c;
|
|
goto LAB_0003027e;
|
|
}
|
|
if (uVar1 != 0x5a) {
|
|
return;
|
|
}
|
|
}
|
|
else if (uVar1 != 0x10e) {
|
|
if (uVar1 != 0xb4) {
|
|
return;
|
|
}
|
|
goto LAB_00030258;
|
|
}
|
|
iVar3 = __udivsi3((int)puVar2 * param_2,*(undefined4 *)(this + 0x2c));
|
|
*param_4 = iVar3;
|
|
pCVar5 = this + 0x28;
|
|
LAB_0003027e:
|
|
iVar4 = __udivsi3(iVar4 * param_3,*(undefined4 *)pCVar5);
|
|
*param_5 = iVar4;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC clientXY2ScreenXY @ 00030294
|
|
|
|
/* Controller::clientXY2ScreenXY(int, int, int, int, int&, int&) */
|
|
|
|
void __thiscall
|
|
Controller::clientXY2ScreenXY
|
|
(Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5,
|
|
int *param_6)
|
|
|
|
{
|
|
int iVar1;
|
|
Controller *pCVar2;
|
|
|
|
if ((int)theFunc._116_4_ < 0xb4) {
|
|
if (theFunc._116_4_ == 0) {
|
|
LAB_000302c2:
|
|
iVar1 = __udivsi3(param_3 * param_1,*(undefined4 *)(this + 0x28));
|
|
*param_5 = iVar1;
|
|
pCVar2 = this + 0x2c;
|
|
goto LAB_000302e4;
|
|
}
|
|
if (theFunc._116_4_ != 0x5a) {
|
|
return;
|
|
}
|
|
}
|
|
else if (theFunc._116_4_ != 0x10e) {
|
|
if (theFunc._116_4_ != 0xb4) {
|
|
return;
|
|
}
|
|
goto LAB_000302c2;
|
|
}
|
|
iVar1 = __udivsi3(param_3 * param_1,*(undefined4 *)(this + 0x2c));
|
|
*param_5 = iVar1;
|
|
pCVar2 = this + 0x28;
|
|
LAB_000302e4:
|
|
iVar1 = __udivsi3(param_4 * param_2,*(undefined4 *)pCVar2);
|
|
*param_6 = iVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC screenXY2ClientXY @ 000302fc
|
|
|
|
/* Controller::screenXY2ClientXY(int, int, int, int, int&, int&) */
|
|
|
|
void __thiscall
|
|
Controller::screenXY2ClientXY
|
|
(Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5,
|
|
int *param_6)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
|
|
iVar3 = *(int *)(this + 0x28);
|
|
iVar4 = *(int *)(this + 0x2c);
|
|
if ((int)theFunc._116_4_ < 0xb4) {
|
|
if (theFunc._116_4_ == 0) {
|
|
LAB_00030338:
|
|
iVar1 = __divsi3(iVar3 * param_1,param_3);
|
|
*param_5 = iVar1;
|
|
iVar1 = __divsi3(iVar4 * param_2,param_4);
|
|
*param_6 = iVar1;
|
|
iVar2 = 0;
|
|
if (*param_5 < 0) {
|
|
LAB_0003036a:
|
|
*param_5 = iVar2;
|
|
iVar1 = *param_6;
|
|
}
|
|
else if (iVar3 <= *param_5) {
|
|
iVar2 = iVar3 + -1;
|
|
goto LAB_0003036a;
|
|
}
|
|
if (iVar1 < 0) goto LAB_000303be;
|
|
iVar3 = iVar4;
|
|
if (iVar1 < iVar4) {
|
|
return;
|
|
}
|
|
goto LAB_000303b8;
|
|
}
|
|
if (theFunc._116_4_ != 0x5a) {
|
|
return;
|
|
}
|
|
}
|
|
else if (theFunc._116_4_ != 0x10e) {
|
|
if (theFunc._116_4_ != 0xb4) {
|
|
return;
|
|
}
|
|
goto LAB_00030338;
|
|
}
|
|
iVar1 = __divsi3(iVar4 * param_1,param_3);
|
|
*param_5 = iVar1;
|
|
iVar1 = __divsi3(iVar3 * param_2,param_4);
|
|
*param_6 = iVar1;
|
|
iVar2 = 0;
|
|
if (*param_5 < 0) {
|
|
LAB_000303a6:
|
|
*param_5 = iVar2;
|
|
iVar1 = *param_6;
|
|
}
|
|
else if (iVar4 <= *param_5) {
|
|
iVar2 = iVar4 + -1;
|
|
goto LAB_000303a6;
|
|
}
|
|
if (iVar1 < 0) {
|
|
LAB_000303be:
|
|
*param_6 = 0;
|
|
return;
|
|
}
|
|
if (iVar1 < iVar3) {
|
|
return;
|
|
}
|
|
LAB_000303b8:
|
|
*param_6 = iVar3 + -1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC sensorXY2ScreenXY @ 000303cc
|
|
|
|
/* Controller::sensorXY2ScreenXY(int, int, int, int, int&, int&) */
|
|
|
|
void __thiscall
|
|
Controller::sensorXY2ScreenXY
|
|
(Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5,
|
|
int *param_6)
|
|
|
|
{
|
|
int iVar1;
|
|
Controller *pCVar2;
|
|
|
|
if (theFunc._116_4_ != 0x5a) {
|
|
if (theFunc._116_4_ != 0x10e) {
|
|
if (theFunc._116_4_ == 0xb4) {
|
|
param_1 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU);
|
|
}
|
|
else {
|
|
param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU);
|
|
if (theFunc._116_4_ != 0) {
|
|
return;
|
|
}
|
|
}
|
|
iVar1 = __udivsi3(param_1 * param_3,*(undefined4 *)(this + 0x28));
|
|
*param_5 = iVar1;
|
|
pCVar2 = this + 0x2c;
|
|
param_1 = param_2;
|
|
goto LAB_0003043e;
|
|
}
|
|
param_1 = *(int *)(this + 0x28) + (param_1 ^ 0xffffffffU);
|
|
param_2 = *(int *)(this + 0x2c) + (param_2 ^ 0xffffffffU);
|
|
}
|
|
iVar1 = __udivsi3(param_2 * param_3,*(undefined4 *)(this + 0x2c));
|
|
*param_5 = iVar1;
|
|
pCVar2 = this + 0x28;
|
|
LAB_0003043e:
|
|
iVar1 = __udivsi3(param_1 * param_4,*(undefined4 *)pCVar2);
|
|
*param_6 = iVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC screenXY2SensorXY @ 00030454
|
|
|
|
/* Controller::screenXY2SensorXY(int, int, int, int, int&, int&) */
|
|
|
|
void __thiscall
|
|
Controller::screenXY2SensorXY
|
|
(Controller *this,int param_1,int param_2,int param_3,int param_4,int *param_5,
|
|
int *param_6)
|
|
|
|
{
|
|
int local_1c;
|
|
int local_18;
|
|
int local_14;
|
|
|
|
local_14 = __stack_chk_guard;
|
|
screenXY2ClientXY(this,param_1,param_2,param_3,param_4,&local_18,&local_1c);
|
|
Client2Buffer(this,local_18,local_1c,param_5,param_6);
|
|
if (__stack_chk_guard == local_14) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stack_chk_fail();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000304ac @ 000304ac
|
|
|
|
void FUN_000304ac(void)
|
|
|
|
{
|
|
FUN_00030670();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000304b6 @ 000304b6
|
|
|
|
void FUN_000304b6(void *param_1)
|
|
|
|
{
|
|
FUN_00030670();
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003057c @ 0003057c
|
|
|
|
bool FUN_0003057c(undefined4 param_1,undefined4 param_2,undefined4 *param_3,undefined4 *param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
iVar1 = FUN_0003186c();
|
|
if (iVar1 == 1) {
|
|
param_4[1] = param_2;
|
|
*param_4 = 1;
|
|
uVar2 = *param_3;
|
|
*(undefined1 *)(param_4 + 4) = 1;
|
|
param_4[2] = uVar2;
|
|
}
|
|
return iVar1 == 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000305a4 @ 000305a4
|
|
|
|
bool FUN_000305a4(undefined4 param_1,undefined4 param_2,undefined4 *param_3,undefined4 *param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
iVar1 = FUN_0003186c();
|
|
if (iVar1 == 1) {
|
|
param_4[1] = param_2;
|
|
*param_4 = 1;
|
|
uVar2 = *param_3;
|
|
*(undefined1 *)(param_4 + 4) = 1;
|
|
param_4[2] = uVar2;
|
|
}
|
|
return iVar1 == 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000305cc @ 000305cc
|
|
|
|
undefined4 * FUN_000305cc(undefined4 *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
*param_1 = 0;
|
|
param_1[1] = 0;
|
|
param_1[2] = 0;
|
|
param_1[3] = 0;
|
|
*(undefined1 *)(param_1 + 4) = 1;
|
|
if ((param_2 != 0) &&
|
|
(iVar1 = FUN_00030ba0(param_2,&PTR_PTR_FUN_00031728_1_00068ce4,&PTR_PTR_FUN_00031728_1_00068e6c
|
|
,0), iVar1 != 0)) {
|
|
param_1[3] = *(undefined4 *)(iVar1 + 8);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030610 @ 00030610
|
|
|
|
undefined4 FUN_00030610(undefined4 param_1)
|
|
|
|
{
|
|
void *__addr;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a28);
|
|
__addr = DAT_00070a2c;
|
|
while (__addr != (void *)0x0) {
|
|
DAT_00070a2c = *(void **)((int)__addr + DAT_00070a24);
|
|
munmap(__addr,0x1000);
|
|
__addr = DAT_00070a2c;
|
|
}
|
|
DAT_00070a2c = __addr;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a28);
|
|
pthread_mutex_destroy((pthread_mutex_t *)&DAT_00070a28);
|
|
pthread_key_delete(DAT_00070a18);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030670 @ 00030670
|
|
|
|
void FUN_00030670(void)
|
|
|
|
{
|
|
FUN_00031860();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003067c @ 0003067c
|
|
|
|
void FUN_0003067c(void)
|
|
|
|
{
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030e78("Pure virtual function called!");
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000306a8 @ 000306a8
|
|
|
|
void FUN_000306a8(void)
|
|
|
|
{
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030e78("Deleted virtual function called!");
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000306d8 @ 000306d8
|
|
|
|
int * FUN_000306d8(void)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
undefined4 *puVar3;
|
|
undefined4 *puVar4;
|
|
undefined4 *puVar5;
|
|
int iVar6;
|
|
undefined4 *puVar7;
|
|
|
|
piVar2 = (int *)pthread_getspecific(DAT_00070a18);
|
|
if (piVar2 != (int *)0x0) {
|
|
return piVar2;
|
|
}
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a28);
|
|
piVar2 = DAT_00070a30;
|
|
if (DAT_00070a30 == (int *)0x0) {
|
|
piVar2 = (int *)0x0;
|
|
puVar3 = (undefined4 *)mmap((void *)0x0,0x1000,3,0x22,-1,0);
|
|
if (puVar3 == (undefined4 *)0xffffffff) goto LAB_0003076a;
|
|
*(undefined4 **)((int)puVar3 + DAT_00070a24) = DAT_00070a2c;
|
|
iVar1 = DAT_00070a1c;
|
|
puVar5 = &DAT_00070a30;
|
|
DAT_00070a2c = puVar3;
|
|
if (DAT_00070a20 != 0) {
|
|
puVar5 = (undefined4 *)((int)puVar3 + DAT_00070a1c * (DAT_00070a20 + -1));
|
|
iVar6 = DAT_00070a20;
|
|
puVar7 = &DAT_00070a30;
|
|
do {
|
|
puVar4 = puVar3;
|
|
*puVar7 = puVar4;
|
|
iVar6 = iVar6 + -1;
|
|
puVar3 = (undefined4 *)((int)puVar4 + iVar1);
|
|
puVar7 = puVar4;
|
|
} while (iVar6 != 0);
|
|
}
|
|
*puVar5 = 0;
|
|
piVar2 = DAT_00070a30;
|
|
}
|
|
DAT_00070a30 = (int *)*piVar2;
|
|
__aeabi_memclr4(piVar2,DAT_00070a1c);
|
|
LAB_0003076a:
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a28);
|
|
if (piVar2 != (int *)0x0) {
|
|
pthread_setspecific(DAT_00070a18,piVar2);
|
|
return piVar2;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030e78("Can\'t allocate thread-specific C++ runtime info block.");
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003080c @ 0003080c
|
|
|
|
void FUN_0003080c(void)
|
|
|
|
{
|
|
pthread_getspecific(DAT_00070a18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030824 @ 00030824
|
|
|
|
int FUN_00030824(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = memalign(8,param_1 + 0x90);
|
|
if (iVar1 != 0) {
|
|
__aeabi_memclr8(iVar1,0x90);
|
|
return iVar1 + 0x90;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030e78("Not enough memory to allocate exception!");
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030880 @ 00030880
|
|
|
|
void FUN_00030880(int param_1)
|
|
|
|
{
|
|
if (*(code **)(param_1 + -0x88) != (code *)0x0) {
|
|
(**(code **)(param_1 + -0x88))();
|
|
}
|
|
free((void *)(param_1 + -0x90));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000308d8 @ 000308d8
|
|
|
|
undefined4 FUN_000308d8(undefined4 *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
undefined4 *puVar3;
|
|
uint uVar4;
|
|
bool bVar5;
|
|
|
|
puVar1 = (undefined4 *)FUN_000306d8();
|
|
iVar2 = FUN_00030ac0(*param_1,param_1[1]);
|
|
puVar3 = (undefined4 *)*puVar1;
|
|
if ((iVar2 == 0) && (bVar5 = puVar3 != (undefined4 *)0x0, puVar3 = (undefined4 *)0x0, bVar5)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030e78("Can\'t handle non-C++ exception!");
|
|
}
|
|
uVar4 = (int)param_1[-8] >> 0x1f;
|
|
param_1[-8] = (param_1[-8] + uVar4 ^ uVar4) + 1;
|
|
if (puVar3 != param_1 + -0xe) {
|
|
param_1[-9] = puVar3;
|
|
*puVar1 = param_1 + -0xe;
|
|
}
|
|
puVar1[1] = puVar1[1] + -1;
|
|
return param_1[-1];
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003094c @ 0003094c
|
|
|
|
void FUN_0003094c(void)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
|
|
piVar1 = (int *)FUN_0003080c();
|
|
iVar4 = *piVar1;
|
|
if (iVar4 != 0) {
|
|
iVar2 = FUN_00030ac0(*(undefined4 *)(iVar4 + 0x38),*(undefined4 *)(iVar4 + 0x3c));
|
|
if (iVar2 != 0) {
|
|
iVar2 = *(int *)(iVar4 + 0x18);
|
|
if (iVar2 < 0) {
|
|
iVar3 = iVar2 + 1;
|
|
if (iVar3 == 0) {
|
|
*piVar1 = *(int *)(iVar4 + 0x14);
|
|
*(undefined4 *)(iVar4 + 0x18) = 0;
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
iVar3 = iVar2 + -1;
|
|
if (iVar3 == 0) {
|
|
*piVar1 = *(int *)(iVar4 + 0x14);
|
|
FUN_00030880(iVar4 + 0x90);
|
|
return;
|
|
}
|
|
if (iVar2 < 1) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030e78("Internal error during exception handling!");
|
|
}
|
|
}
|
|
*(int *)(iVar4 + 0x18) = iVar3;
|
|
return;
|
|
}
|
|
*piVar1 = 0;
|
|
_Unwind_DeleteException(iVar4 + 0x38);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000309e0 @ 000309e0
|
|
|
|
void FUN_000309e0(int param_1,undefined4 param_2,undefined4 param_3,undefined1 param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int unaff_r5;
|
|
code *UNRECOVERED_JUMPTABLE;
|
|
|
|
*(undefined4 *)(param_1 + -0x8c) = param_2;
|
|
*(undefined4 *)(param_1 + -0x88) = param_3;
|
|
*(undefined4 *)(param_1 + -0x54) = 0x474e5543;
|
|
*(undefined4 *)(param_1 + -0x58) = 0x432b2b00;
|
|
*(undefined4 *)(param_1 + -0x50) = 0x30a09;
|
|
iVar1 = FUN_00030a16();
|
|
*(undefined1 *)(iVar1 + unaff_r5) = param_4;
|
|
/* WARNING: Could not recover jumptable at 0x000309fe. Too many branches */
|
|
/* WARNING: Treating indirect jump as call */
|
|
(*UNRECOVERED_JUMPTABLE)();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030a08 @ 00030a08
|
|
|
|
void FUN_00030a08(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
FUN_00030880(param_2 + 0x58);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030a16 @ 00030a16
|
|
|
|
void FUN_00030a16(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
iVar1 = FUN_000306d8();
|
|
uVar2 = FUN_00031810();
|
|
*(undefined4 *)(param_1 + 0xc) = uVar2;
|
|
uVar2 = FUN_000317dc();
|
|
*(undefined4 *)(param_1 + 0x10) = uVar2;
|
|
*(int *)(iVar1 + 4) = *(int *)(iVar1 + 4) + 1;
|
|
___Unwind_RaiseException(param_1 + 0x38);
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030efc(param_1 + 0x38);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030a44 @ 00030a44
|
|
|
|
void FUN_00030a44(void)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *extraout_r1;
|
|
undefined1 uVar3;
|
|
uint uVar4;
|
|
int unaff_r5;
|
|
code *UNRECOVERED_JUMPTABLE;
|
|
|
|
piVar1 = (int *)FUN_000306d8();
|
|
iVar2 = *piVar1;
|
|
if (iVar2 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030e78("Attempting to rethrow an exception that doesn\'t exist!");
|
|
}
|
|
uVar4 = *(uint *)(iVar2 + 0x38) ^ 0x432b2b00 | *(uint *)(iVar2 + 0x3c) ^ 0x474e5543;
|
|
if (uVar4 == 0) {
|
|
*(int *)(iVar2 + 0x18) = -*(int *)(iVar2 + 0x18);
|
|
FUN_00030a16();
|
|
piVar1 = extraout_r1;
|
|
}
|
|
uVar3 = (undefined1)uVar4;
|
|
*piVar1 = 0;
|
|
iVar2 = FUN_00030a16();
|
|
*(undefined1 *)(iVar2 + unaff_r5) = uVar3;
|
|
/* WARNING: Could not recover jumptable at 0x00030a82. Too many branches */
|
|
/* WARNING: Treating indirect jump as call */
|
|
(*UNRECOVERED_JUMPTABLE)();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030ac0 @ 00030ac0
|
|
|
|
bool FUN_00030ac0(int param_1,int param_2)
|
|
|
|
{
|
|
return param_1 == 0x432b2b00 && param_2 == 0x474e5543;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030ae8 @ 00030ae8
|
|
|
|
undefined4 FUN_00030ae8(void)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
iVar1 = FUN_000306d8();
|
|
uVar2 = 0;
|
|
if ((iVar1 != 0) && (uVar2 = 1, *(int *)(iVar1 + 4) != 0)) {
|
|
uVar2 = 0;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030b06 @ 00030b06
|
|
|
|
void FUN_00030b06(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if ((param_1 != 0) && (iVar1 = FUN_00056e98(param_1 + -0x90,1), iVar1 == 1)) {
|
|
FUN_00030880(param_1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030b26 @ 00030b26
|
|
|
|
void FUN_00030b26(int param_1)
|
|
|
|
{
|
|
if (param_1 != 0) {
|
|
FUN_00056e60(param_1 + -0x90,1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030b40 @ 00030b40
|
|
|
|
void FUN_00030b40(undefined4 *param_1)
|
|
|
|
{
|
|
if (param_1 != (undefined4 *)0x0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a28);
|
|
*param_1 = DAT_00070a30;
|
|
DAT_00070a30 = param_1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a28);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator.delete @ 00030b70
|
|
|
|
/* operator delete(void*) */
|
|
|
|
void operator_delete(void *param_1)
|
|
|
|
{
|
|
if (param_1 != (void *)0x0) {
|
|
free(param_1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator.delete[] @ 00030b7e
|
|
|
|
/* operator delete[](void*) */
|
|
|
|
void operator_delete__(void *param_1)
|
|
|
|
{
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030b88 @ 00030b88
|
|
|
|
void FUN_00030b88(void *param_1)
|
|
|
|
{
|
|
if (param_1 != (void *)0x0) {
|
|
free(param_1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030b96 @ 00030b96
|
|
|
|
void FUN_00030b96(void)
|
|
|
|
{
|
|
FUN_00030b88();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030ba0 @ 00030ba0
|
|
|
|
int FUN_00030ba0(int *param_1,undefined4 param_2,undefined4 param_3,int param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
undefined4 uVar4;
|
|
undefined4 uVar5;
|
|
int iVar6;
|
|
int *local_2c;
|
|
undefined4 local_28;
|
|
undefined4 local_24;
|
|
int local_20;
|
|
undefined4 local_1c;
|
|
int local_18;
|
|
|
|
iVar1 = (int)param_1 + *(int *)(*param_1 + -8);
|
|
uVar4 = *(undefined4 *)(*(int *)((int)param_1 + *(int *)(*param_1 + -8)) + -4);
|
|
iVar2 = FUN_00030c3c(iVar1,uVar4,0);
|
|
if (iVar2 == 0) {
|
|
return 0;
|
|
}
|
|
if (param_4 != -2) {
|
|
if ((-1 < param_4) && (iVar2 != -1)) {
|
|
return (int)param_1 - param_4;
|
|
}
|
|
local_1c = 0;
|
|
local_18 = 0;
|
|
iVar6 = iVar1;
|
|
uVar5 = uVar4;
|
|
if (iVar2 != -1) {
|
|
iVar6 = iVar2;
|
|
uVar5 = param_3;
|
|
}
|
|
local_2c = param_1;
|
|
local_28 = param_2;
|
|
local_24 = param_3;
|
|
local_20 = param_4;
|
|
FUN_00030d20(iVar6,uVar5,&local_2c);
|
|
if (1 < local_18 + 1U) {
|
|
return local_18;
|
|
}
|
|
}
|
|
iVar6 = 0;
|
|
if ((iVar2 != -1) &&
|
|
(piVar3 = (int *)FUN_00030c3c(iVar1,uVar4,param_1,param_2), iVar6 = iVar2, piVar3 != param_1))
|
|
{
|
|
iVar6 = 0;
|
|
}
|
|
return iVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030c3c @ 00030c3c
|
|
|
|
int * FUN_00030c3c(int *param_1,int *param_2,int *param_3,undefined4 param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
int *piVar6;
|
|
uint uVar7;
|
|
|
|
while( true ) {
|
|
iVar1 = FUN_0003186c(param_2,param_4);
|
|
if (iVar1 != 0) {
|
|
piVar4 = param_1;
|
|
if (param_1 != param_3) {
|
|
piVar4 = (int *)0x0;
|
|
}
|
|
if (param_3 == (int *)0x0) {
|
|
return param_1;
|
|
}
|
|
return piVar4;
|
|
}
|
|
iVar1 = (**(code **)(*param_2 + 0xc))(param_2);
|
|
if (iVar1 != 1) break;
|
|
param_2 = (int *)param_2[2];
|
|
}
|
|
if (iVar1 != 0) {
|
|
if (iVar1 == 2) {
|
|
if (param_2[3] == 0) {
|
|
return (int *)0x0;
|
|
}
|
|
iVar1 = *param_1;
|
|
uVar7 = 0;
|
|
piVar4 = (int *)0x0;
|
|
do {
|
|
uVar5 = param_2[uVar7 * 2 + 5];
|
|
piVar6 = piVar4;
|
|
if ((uVar5 & 2) != 0) {
|
|
iVar2 = (int)uVar5 >> 8;
|
|
if ((uVar5 & 1) != 0) {
|
|
iVar2 = *(int *)(iVar1 + iVar2);
|
|
}
|
|
piVar3 = (int *)FUN_00030c3c((int)param_1 + iVar2,param_2[uVar7 * 2 + 4],param_3,param_4);
|
|
if (piVar3 != (int *)0x0) {
|
|
if (piVar3 == (int *)0xffffffff) {
|
|
return (int *)0xffffffff;
|
|
}
|
|
piVar6 = piVar3;
|
|
if ((piVar4 != (int *)0x0) && (piVar6 = piVar4, piVar4 != piVar3)) {
|
|
return (int *)0xffffffff;
|
|
}
|
|
}
|
|
}
|
|
uVar7 = uVar7 + 1;
|
|
piVar4 = piVar6;
|
|
if ((uint)param_2[3] <= uVar7) {
|
|
return piVar6;
|
|
}
|
|
} while( true );
|
|
}
|
|
__assert2("/usr/local/google/buildbot/src/android/ndk-release-r16/out/stlport/ndk/sources/cxx-stl/gabi++/src/dynamic_cast.cc"
|
|
,0xad,
|
|
"const void *(anonymous namespace)::walk_object(const void *, const abi::__class_type_info *, const void *, const abi::__class_type_info *)"
|
|
,&DAT_00030d1c);
|
|
}
|
|
return (int *)0x0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030d20 @ 00030d20
|
|
|
|
void FUN_00030d20(int *param_1,int *param_2,int *param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
|
|
iVar1 = param_3[4];
|
|
iVar2 = FUN_0003186c(param_2,param_3[2]);
|
|
if (iVar2 == 1) {
|
|
param_3[4] = (int)param_1;
|
|
}
|
|
if ((((int *)*param_3 == param_1) && (param_3[4] != 0)) &&
|
|
(iVar2 = FUN_0003186c(param_2,param_3[1]), iVar2 == 1)) {
|
|
if (param_3[5] == 0) {
|
|
param_3[5] = param_3[4];
|
|
}
|
|
else if (param_3[5] != param_3[4]) {
|
|
param_3[5] = -1;
|
|
}
|
|
}
|
|
else {
|
|
iVar2 = (**(code **)(*param_2 + 0xc))(param_2);
|
|
if (iVar2 != 0) {
|
|
if (iVar2 == 2) {
|
|
uVar3 = param_2[3];
|
|
if (uVar3 != 0) {
|
|
iVar2 = *param_1;
|
|
uVar6 = 0;
|
|
do {
|
|
uVar5 = param_2[uVar6 * 2 + 5];
|
|
if ((uVar5 & 2) != 0) {
|
|
iVar4 = (int)uVar5 >> 8;
|
|
if ((uVar5 & 1) != 0) {
|
|
iVar4 = *(int *)(iVar2 + iVar4);
|
|
}
|
|
FUN_00030d20((int)param_1 + iVar4,param_2[uVar6 * 2 + 4],param_3);
|
|
if (param_3[5] == -1) break;
|
|
uVar3 = param_2[3];
|
|
}
|
|
uVar6 = uVar6 + 1;
|
|
} while (uVar6 < uVar3);
|
|
}
|
|
}
|
|
else if (iVar2 == 1) {
|
|
FUN_00030d20(param_1,param_2[2],param_3);
|
|
}
|
|
else {
|
|
__assert2("/usr/local/google/buildbot/src/android/ndk-release-r16/out/stlport/ndk/sources/cxx-stl/gabi++/src/dynamic_cast.cc"
|
|
,0x105,
|
|
"void (anonymous namespace)::base_to_derived_cast(const void *, const abi::__class_type_info *, (anonymous namespace)::cast_context *)"
|
|
,&DAT_00030dfc);
|
|
}
|
|
}
|
|
}
|
|
param_3[4] = iVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030e00 @ 00030e00
|
|
|
|
void FUN_00030e00(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_00030e10_1_00068d34;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030e10 @ 00030e10
|
|
|
|
void FUN_00030e10(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030e12 @ 00030e12
|
|
|
|
void FUN_00030e12(void *param_1)
|
|
|
|
{
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030e64 @ 00030e64
|
|
|
|
bool FUN_00030e64(void)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = FUN_000306d8();
|
|
return *(int *)(iVar1 + 4) != 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030e78 @ 00030e78
|
|
|
|
void FUN_00030e78(undefined4 param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
code *pcVar2;
|
|
|
|
fprintf((FILE *)isupper,"PANIC:GAbi++:%s\n",param_1);
|
|
iVar1 = dlopen("liblog.so",0);
|
|
if (iVar1 != 0) {
|
|
pcVar2 = (code *)dlsym(iVar1,"__android_log_print");
|
|
if (pcVar2 != (code *)0x0) {
|
|
(*pcVar2)(7,"GAbi++",param_1);
|
|
}
|
|
dlclose(iVar1);
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_0003178c();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030efc @ 00030efc
|
|
|
|
void FUN_00030efc(void)
|
|
|
|
{
|
|
FUN_000308d8();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_0003178c();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00030f08 @ 00030f08
|
|
|
|
void FUN_00030f08(uint *param_1,uint param_2,int param_3,int param_4,undefined4 param_5)
|
|
|
|
{
|
|
char cVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
int *piVar8;
|
|
char *pcVar9;
|
|
char *pcVar10;
|
|
uint uVar11;
|
|
int *piVar12;
|
|
char *local_3c;
|
|
char *local_24;
|
|
char *local_20;
|
|
char *local_1c;
|
|
char *local_18;
|
|
|
|
uVar2 = 3;
|
|
*param_1 = 0;
|
|
param_1[1] = 0;
|
|
param_1[2] = 0;
|
|
param_1[3] = 0;
|
|
param_1[4] = 0;
|
|
param_1[5] = 0;
|
|
param_1[6] = 3;
|
|
uVar11 = param_2 & 1;
|
|
if (uVar11 == 0) {
|
|
if ((int)(param_2 << 0x1e) < 0) {
|
|
if ((param_2 & 0xc) != 0xc) goto LAB_00030f52;
|
|
uVar2 = 2;
|
|
}
|
|
param_1[6] = uVar2;
|
|
return;
|
|
}
|
|
if ((param_2 << 0x1c) >> 0x1d != 0) {
|
|
param_1[6] = 3;
|
|
return;
|
|
}
|
|
LAB_00030f52:
|
|
local_1c = (char *)_Unwind_GetLanguageSpecificData(param_5);
|
|
if (local_1c == (char *)0x0) {
|
|
param_1[6] = 8;
|
|
return;
|
|
}
|
|
param_1[3] = (uint)local_1c;
|
|
local_3c = (char *)0x0;
|
|
_Unwind_VRS_Get(param_5,0,0xf,0,&local_18);
|
|
pcVar10 = local_18;
|
|
iVar3 = _Unwind_GetRegionStart(param_5);
|
|
cVar1 = *local_1c;
|
|
local_1c = local_1c + 1;
|
|
iVar4 = FUN_0004e23c(&local_1c,cVar1);
|
|
pcVar9 = local_1c + 1;
|
|
uVar2 = (((uint)pcVar10 & 0xfffffffe) - 1) - iVar3;
|
|
if (iVar4 != 0) {
|
|
iVar3 = iVar4;
|
|
}
|
|
cVar1 = *local_1c;
|
|
local_1c = pcVar9;
|
|
if (cVar1 != -1) {
|
|
iVar4 = FUN_0004e1d4(&local_1c);
|
|
local_3c = local_1c + iVar4;
|
|
}
|
|
cVar1 = *local_1c;
|
|
local_1c = local_1c + 1;
|
|
iVar4 = FUN_0004e1d4(&local_1c);
|
|
local_20 = local_1c;
|
|
pcVar10 = local_1c + iVar4;
|
|
if (0 < iVar4) {
|
|
do {
|
|
uVar5 = FUN_0004e23c(&local_20,cVar1);
|
|
iVar4 = FUN_0004e23c(&local_20,cVar1);
|
|
iVar6 = FUN_0004e23c(&local_20,cVar1);
|
|
iVar7 = FUN_0004e1d4(&local_20);
|
|
if ((uVar5 <= uVar2) && (uVar2 < iVar4 + uVar5)) {
|
|
if (iVar6 == 0) {
|
|
param_1[6] = 8;
|
|
return;
|
|
}
|
|
uVar2 = iVar6 + iVar3;
|
|
if (iVar7 == 0) {
|
|
uVar11 = 6;
|
|
if ((param_2 & 6) == 2) {
|
|
*param_1 = 0;
|
|
param_1[1] = 0;
|
|
param_1[4] = uVar2;
|
|
}
|
|
else {
|
|
uVar11 = 8;
|
|
}
|
|
param_1[6] = uVar11;
|
|
return;
|
|
}
|
|
local_24 = pcVar10 + iVar7 + -1;
|
|
pcVar10 = (char *)(param_4 + 0x58);
|
|
goto LAB_000310bc;
|
|
}
|
|
} while ((uVar5 <= uVar2) && (local_20 < pcVar10));
|
|
}
|
|
LAB_000311de:
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030efc(param_4);
|
|
LAB_000310bc:
|
|
pcVar9 = local_24;
|
|
uVar5 = FUN_0004e1f8(&local_24);
|
|
if ((int)uVar5 < 1) {
|
|
if ((int)uVar5 < 0) {
|
|
if (param_3 != 1) goto joined_r0x00031094;
|
|
iVar3 = *(int *)(param_4 + -0x34);
|
|
if ((iVar3 == 0) || (local_3c == (char *)0x0)) goto LAB_000311de;
|
|
piVar12 = (int *)(local_3c + (uVar5 ^ 0xffffffff) * 4);
|
|
do {
|
|
if (*piVar12 == 0) {
|
|
if (uVar11 != 0) goto LAB_0003119e;
|
|
goto joined_r0x0003112a;
|
|
}
|
|
piVar8 = *(int **)(*piVar12 + (int)piVar12);
|
|
local_18 = pcVar10;
|
|
iVar4 = (**(code **)(*piVar8 + 8))(piVar8,iVar3,&local_18);
|
|
piVar12 = piVar12 + 1;
|
|
} while (iVar4 == 0);
|
|
}
|
|
else if ((param_2 & 6) == 2) goto LAB_0003119e;
|
|
}
|
|
else {
|
|
if (local_3c == (char *)0x0) goto LAB_000311de;
|
|
iVar3 = *(int *)(local_3c + uVar5 * -4);
|
|
if ((iVar3 == 0) ||
|
|
(piVar12 = *(int **)(iVar3 + (int)(local_3c + uVar5 * -4)), piVar12 == (int *)0x0)) {
|
|
joined_r0x00031094:
|
|
if ((param_2 & 4) != 0 || uVar11 != 0) {
|
|
LAB_0003119e:
|
|
param_1[4] = uVar2;
|
|
param_1[5] = (uint)pcVar10;
|
|
param_1[6] = 6;
|
|
*param_1 = uVar5;
|
|
param_1[1] = (int)uVar5 >> 0x1f;
|
|
param_1[2] = (uint)pcVar9;
|
|
return;
|
|
}
|
|
joined_r0x0003112a:
|
|
if ((param_2 & 8) == 0) goto LAB_000311de;
|
|
}
|
|
else if (param_3 == 1) {
|
|
iVar3 = *(int *)(param_4 + -0x34);
|
|
local_18 = pcVar10;
|
|
if (iVar3 == 0) goto LAB_000311de;
|
|
iVar4 = FUN_00030ba0(iVar3,&PTR_PTR_FUN_00031728_1_00068d20,&PTR_PTR_FUN_00031728_1_00068dc4,0
|
|
);
|
|
if (iVar4 != 0) {
|
|
local_18 = *(char **)pcVar10;
|
|
}
|
|
iVar3 = (**(code **)(*piVar12 + 8))(piVar12,iVar3,&local_18);
|
|
if (iVar3 == 1) {
|
|
if (uVar11 != 0) {
|
|
*param_1 = uVar5;
|
|
param_1[1] = (int)uVar5 >> 0x1f;
|
|
param_1[2] = (uint)pcVar9;
|
|
param_1[4] = uVar2;
|
|
param_1[5] = (uint)local_18;
|
|
param_1[6] = 6;
|
|
return;
|
|
}
|
|
goto joined_r0x0003112a;
|
|
}
|
|
}
|
|
}
|
|
local_18 = local_24;
|
|
iVar3 = FUN_0004e1f8(&local_18);
|
|
if (iVar3 == 0) {
|
|
param_1[6] = 8;
|
|
return;
|
|
}
|
|
local_24 = local_24 + iVar3;
|
|
goto LAB_000310bc;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000311ec @ 000311ec
|
|
|
|
undefined4
|
|
FUN_000311ec(int param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
|
|
if (param_3 != 0) {
|
|
piVar2 = (int *)(param_3 + param_1 * -4);
|
|
iVar3 = *piVar2;
|
|
uVar1 = 0;
|
|
if (iVar3 != 0) {
|
|
uVar1 = *(undefined4 *)(iVar3 + (int)piVar2);
|
|
}
|
|
return uVar1;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030efc(param_5);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003120a @ 0003120a
|
|
|
|
undefined4
|
|
FUN_0003120a(uint param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5,
|
|
undefined4 param_6,undefined4 param_7)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
undefined4 local_18;
|
|
|
|
if (param_3 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030efc(param_7);
|
|
}
|
|
piVar3 = (int *)(param_3 + ~param_1 * 4);
|
|
do {
|
|
if (*piVar3 == 0) {
|
|
return 1;
|
|
}
|
|
piVar1 = *(int **)(*piVar3 + (int)piVar3);
|
|
local_18 = param_6;
|
|
iVar2 = (**(code **)(*piVar1 + 8))(piVar1,param_5,&local_18);
|
|
piVar3 = piVar3 + 1;
|
|
} while (iVar2 != 1);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031256 @ 00031256
|
|
|
|
void FUN_00031256(uint param_1,undefined4 param_2,uint *param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint local_18;
|
|
|
|
local_18 = param_1;
|
|
_Unwind_VRS_Set(param_2,0,0,0,&local_18);
|
|
local_18 = *param_3;
|
|
_Unwind_VRS_Set(param_2,0,1,0,&local_18);
|
|
uVar1 = param_3[4];
|
|
_Unwind_VRS_Get(param_2,0,0xf,0,&local_18);
|
|
local_18 = local_18 & 1 | uVar1;
|
|
_Unwind_VRS_Set(param_2,0,0xf,0,&local_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000312cc @ 000312cc
|
|
|
|
undefined4 FUN_000312cc(void)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
iVar1 = __gnu_unwind_frame();
|
|
uVar2 = 8;
|
|
if (iVar1 != 0) {
|
|
uVar2 = 9;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000312e2 @ 000312e2
|
|
|
|
void FUN_000312e2(int param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
{
|
|
undefined4 local_14;
|
|
|
|
_Unwind_VRS_Get(param_2,0,0xd,0,&local_14);
|
|
*(undefined4 *)(param_1 + 0x20) = local_14;
|
|
*(undefined4 *)(param_1 + 0x24) = param_3[5];
|
|
*(undefined4 *)(param_1 + 0x28) = *param_3;
|
|
*(undefined4 *)(param_1 + 0x30) = param_3[4];
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031312 @ 00031312
|
|
|
|
void FUN_00031312(int param_1,undefined4 *param_2)
|
|
|
|
{
|
|
param_2[5] = *(undefined4 *)(param_1 + 0x24);
|
|
*param_2 = *(undefined4 *)(param_1 + 0x28);
|
|
param_2[1] = 0;
|
|
param_2[4] = *(undefined4 *)(param_1 + 0x30);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031322 @ 00031322
|
|
|
|
void FUN_00031322(void)
|
|
|
|
{
|
|
__cxa_begin_cleanup();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003132c @ 0003132c
|
|
|
|
void FUN_0003132c(int param_1,undefined4 param_2,int *param_3)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
char *pcVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
char *local_18;
|
|
|
|
__cxa_begin_cleanup();
|
|
puVar1 = (undefined1 *)_Unwind_GetLanguageSpecificData(param_2);
|
|
local_18 = puVar1 + 1;
|
|
FUN_0004e23c(&local_18,*puVar1);
|
|
_Unwind_GetRegionStart(param_2);
|
|
pcVar2 = (char *)0x0;
|
|
iVar5 = -1;
|
|
if (*local_18 != -1) {
|
|
local_18 = local_18 + 1;
|
|
iVar3 = FUN_0004e1d4(&local_18);
|
|
pcVar2 = local_18 + iVar3;
|
|
}
|
|
iVar3 = *param_3;
|
|
do {
|
|
iVar4 = iVar5 * 4;
|
|
iVar5 = iVar5 + 1;
|
|
} while (*(int *)(pcVar2 + iVar4 + iVar3 * -4) != 0);
|
|
*(int *)(param_1 + 0x28) = iVar5;
|
|
*(undefined4 *)(param_1 + 0x30) = 4;
|
|
*(char **)(param_1 + 0x34) = pcVar2 + iVar3 * -4 + -4;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031390 @ 00031390
|
|
|
|
void FUN_00031390(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)FUN_00030e00();
|
|
*puVar1 = &PTR_FUN_000313a8_1_00068d70;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000313a8 @ 000313a8
|
|
|
|
void FUN_000313a8(void)
|
|
|
|
{
|
|
FUN_00030e10();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000313b2 @ 000313b2
|
|
|
|
void FUN_000313b2(void)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)FUN_00030e10();
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator.new @ 00031440
|
|
|
|
/* operator new(unsigned int) */
|
|
|
|
void * operator_new(uint param_1)
|
|
|
|
{
|
|
void *pvVar1;
|
|
code *pcVar2;
|
|
undefined4 *puVar3;
|
|
|
|
while( true ) {
|
|
pvVar1 = malloc(param_1);
|
|
if (pvVar1 != (void *)0x0) {
|
|
return pvVar1;
|
|
}
|
|
pcVar2 = (code *)FUN_00056e60(&DAT_00070a34,0);
|
|
if (pcVar2 == (code *)0x0) break;
|
|
(*pcVar2)();
|
|
}
|
|
FUN_00030824(4);
|
|
puVar3 = (undefined4 *)FUN_00030e00();
|
|
*puVar3 = &PTR_FUN_000313a8_1_00068d70;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000314a8 @ 000314a8
|
|
|
|
void * FUN_000314a8(uint param_1)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = operator_new(param_1);
|
|
return pvVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator.new[] @ 000314ca
|
|
|
|
/* operator new[](unsigned int) */
|
|
|
|
void * operator_new__(uint param_1)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = operator_new(param_1);
|
|
return pvVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gxx_personality_v0 @ 000314e4
|
|
|
|
undefined4 __gxx_personality_v0(int param_1,int *param_2,int param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
int *piVar5;
|
|
int *local_38;
|
|
int local_34;
|
|
int local_30;
|
|
int local_2c;
|
|
int local_28;
|
|
int local_24;
|
|
int local_20;
|
|
|
|
iVar2 = *param_2;
|
|
iVar3 = param_2[1];
|
|
uVar4 = 1;
|
|
if (param_1 != 0) {
|
|
if (param_1 == 2) goto LAB_00031616;
|
|
if (param_1 != 1) {
|
|
return 9;
|
|
}
|
|
piVar5 = (int *)param_2[8];
|
|
_Unwind_VRS_Get(param_3,0,0xd,0,&local_38);
|
|
uVar4 = 6;
|
|
if (piVar5 != local_38) {
|
|
uVar4 = 2;
|
|
}
|
|
}
|
|
local_38 = param_2;
|
|
_Unwind_VRS_Set(param_3,0,0xc,0,&local_38);
|
|
if (param_3 == 0) {
|
|
return 3;
|
|
}
|
|
if ((uVar4 & 1) == 0) {
|
|
if (-1 < (int)(uVar4 << 0x1e)) {
|
|
return 3;
|
|
}
|
|
if ((int)(uVar4 << 0x1d) < 0) {
|
|
if (iVar3 == 0x474e5543 && iVar2 == 0x432b2b00) {
|
|
local_38 = (int *)param_2[-5];
|
|
local_30 = param_2[-4];
|
|
local_2c = param_2[-3];
|
|
local_28 = param_2[-2];
|
|
local_24 = param_2[-1];
|
|
local_34 = (int)local_38 >> 0x1f;
|
|
FUN_00031312(param_2,&local_38);
|
|
}
|
|
else {
|
|
FUN_00030f08(&local_38,uVar4,0,param_2,param_3);
|
|
if (local_20 != 6) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00030efc(param_2);
|
|
}
|
|
}
|
|
FUN_00031256(param_2,param_3,&local_38);
|
|
FUN_0003132c(param_2,param_3,&local_38);
|
|
return 7;
|
|
}
|
|
FUN_00030f08(&local_38,uVar4,iVar3 == 0x474e5543 && iVar2 == 0x432b2b00,param_2,param_3);
|
|
if (local_20 == 6) {
|
|
FUN_00031256(param_2,param_3,&local_38);
|
|
FUN_00031322(param_2);
|
|
return 7;
|
|
}
|
|
}
|
|
else {
|
|
FUN_00030f08(&local_38,uVar4,iVar3 == 0x474e5543 && iVar2 == 0x432b2b00,param_2,param_3);
|
|
if (local_20 == 6) {
|
|
if (iVar3 != 0x474e5543 || iVar2 != 0x432b2b00) {
|
|
return 6;
|
|
}
|
|
param_2[-5] = (int)local_38;
|
|
param_2[-4] = local_30;
|
|
param_2[-3] = local_2c;
|
|
param_2[-2] = local_28;
|
|
param_2[-1] = local_24;
|
|
FUN_000312e2(param_2,param_3,&local_38);
|
|
return 6;
|
|
}
|
|
}
|
|
LAB_00031616:
|
|
uVar1 = FUN_000312cc(param_2,param_3);
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000316a0 @ 000316a0
|
|
|
|
void FUN_000316a0(void)
|
|
|
|
{
|
|
FUN_0004e480();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000316aa @ 000316aa
|
|
|
|
void FUN_000316aa(void *param_1)
|
|
|
|
{
|
|
FUN_0004e480();
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031728 @ 00031728
|
|
|
|
void FUN_00031728(void)
|
|
|
|
{
|
|
FUN_000304ac();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031732 @ 00031732
|
|
|
|
void FUN_00031732(void *param_1)
|
|
|
|
{
|
|
FUN_000304ac();
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031784 @ 00031784
|
|
|
|
void FUN_00031784(void)
|
|
|
|
{
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_0003178c();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003178c @ 0003178c
|
|
|
|
void FUN_0003178c(void)
|
|
|
|
{
|
|
FUN_00056e60(&DAT_0006b89c,0);
|
|
FUN_000317b8();
|
|
DAT_deadcab1 = 0;
|
|
/* WARNING: Subroutine does not return */
|
|
abort();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000317a4 @ 000317a4
|
|
|
|
void FUN_000317a4(void)
|
|
|
|
{
|
|
DAT_deadcab1 = 0;
|
|
/* WARNING: Subroutine does not return */
|
|
abort();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000317b8 @ 000317b8
|
|
|
|
/* WARNING: Control flow encountered bad instruction data */
|
|
|
|
void FUN_000317b8(code *param_1)
|
|
|
|
{
|
|
if (param_1 == (code *)0x0) {
|
|
param_1 = FUN_000317a4;
|
|
}
|
|
(*param_1)();
|
|
FUN_000317a4();
|
|
FUN_000308d8();
|
|
FUN_0003094c();
|
|
FUN_000317a4();
|
|
/* WARNING: Bad instruction - Truncating control flow here */
|
|
halt_baddata();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000317dc @ 000317dc
|
|
|
|
void FUN_000317dc(void)
|
|
|
|
{
|
|
FUN_00056e60(&DAT_0006b89c,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000317f0 @ 000317f0
|
|
|
|
void FUN_000317f0(int param_1)
|
|
|
|
{
|
|
if (param_1 == 0) {
|
|
param_1 = 0x317a5;
|
|
}
|
|
FUN_00057c50(&DAT_0006b89c,param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031810 @ 00031810
|
|
|
|
void FUN_00031810(void)
|
|
|
|
{
|
|
FUN_00056e60(&DAT_0006b8a0,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031824 @ 00031824
|
|
|
|
void FUN_00031824(int param_1)
|
|
|
|
{
|
|
if (param_1 == 0) {
|
|
param_1 = 0x317a5;
|
|
}
|
|
FUN_00057c50(&DAT_0006b8a0,param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031844 @ 00031844
|
|
|
|
void FUN_00031844(void)
|
|
|
|
{
|
|
code *pcVar1;
|
|
|
|
pcVar1 = (code *)FUN_00056e60(&DAT_0006b8a0,0);
|
|
if (pcVar1 != (code *)0x0) {
|
|
(*pcVar1)();
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_0003178c();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031860 @ 00031860
|
|
|
|
void FUN_00031860(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031862 @ 00031862
|
|
|
|
void FUN_00031862(void *param_1)
|
|
|
|
{
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003186c @ 0003186c
|
|
|
|
bool FUN_0003186c(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = strcmp(*(char **)(param_1 + 4),*(char **)(param_2 + 4));
|
|
return iVar1 == 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031886 @ 00031886
|
|
|
|
bool FUN_00031886(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = strcmp(*(char **)(param_1 + 4),*(char **)(param_2 + 4));
|
|
return iVar1 != 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003189e @ 0003189e
|
|
|
|
uint FUN_0003189e(int param_1,int param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = strcmp(*(char **)(param_1 + 4),*(char **)(param_2 + 4));
|
|
return uVar1 >> 0x1f;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000318b0 @ 000318b0
|
|
|
|
void FUN_000318b0(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)FUN_00030e00();
|
|
*puVar1 = &PTR_FUN_000318c8_1_00068e00;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000318c8 @ 000318c8
|
|
|
|
void FUN_000318c8(void)
|
|
|
|
{
|
|
FUN_00030e10();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000318d2 @ 000318d2
|
|
|
|
void FUN_000318d2(void)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)FUN_00030e10();
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000318f4 @ 000318f4
|
|
|
|
void FUN_000318f4(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)FUN_00030e00();
|
|
*puVar1 = &PTR_FUN_0003190c_1_00068e14;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003190c @ 0003190c
|
|
|
|
void FUN_0003190c(void)
|
|
|
|
{
|
|
FUN_00030e10();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031916 @ 00031916
|
|
|
|
void FUN_00031916(void)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)FUN_00030e10();
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031938 @ 00031938
|
|
|
|
void FUN_00031938(void)
|
|
|
|
{
|
|
FUN_000304ac();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031942 @ 00031942
|
|
|
|
void FUN_00031942(void *param_1)
|
|
|
|
{
|
|
FUN_000304ac();
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __stl_throw_runtime_error @ 00031b54
|
|
|
|
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
|
|
/* std::__stl_throw_runtime_error(char const*) */
|
|
|
|
void std::__stl_throw_runtime_error(char *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
size_t sVar2;
|
|
size_t *__dest;
|
|
size_t *psVar3;
|
|
int *local_38;
|
|
undefined1 auStack_30 [4];
|
|
undefined1 auStack_2c [20];
|
|
char *local_18;
|
|
|
|
puVar1 = (undefined4 *)FUN_00030824(0x108);
|
|
FUN_00031c38(auStack_2c,param_1,auStack_30);
|
|
FUN_00030e00(puVar1);
|
|
*puVar1 = &PTR____Named_exception_00068e80;
|
|
sVar2 = strlen(local_18);
|
|
sVar2 = sVar2 + 1;
|
|
if (sVar2 < 0x101) {
|
|
__dest = puVar1 + 1;
|
|
puVar1[0x41] = __dest;
|
|
}
|
|
else {
|
|
__dest = (size_t *)malloc(sVar2);
|
|
puVar1[0x41] = __dest;
|
|
psVar3 = puVar1 + 1;
|
|
if (__dest == (size_t *)0x0) {
|
|
puVar1[0x41] = psVar3;
|
|
__dest = psVar3;
|
|
sVar2 = 0x100;
|
|
}
|
|
else {
|
|
*psVar3 = sVar2;
|
|
}
|
|
}
|
|
local_38 = puVar1 + 0x41;
|
|
strncpy((char *)__dest,local_18,sVar2 - 1);
|
|
*(undefined1 *)(*local_38 + (sVar2 - 1)) = 0;
|
|
*puVar1 = &PTR____Named_exception_00068ec0;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar1,&runtime_error::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00031c38 @ 00031c38
|
|
|
|
undefined4 * FUN_00031c38(undefined4 *param_1,char *param_2)
|
|
|
|
{
|
|
size_t sVar1;
|
|
undefined4 *puVar2;
|
|
uint uVar3;
|
|
uint local_18;
|
|
|
|
param_1[4] = param_1;
|
|
param_1[5] = param_1;
|
|
sVar1 = strlen(param_2);
|
|
uVar3 = sVar1 + 1;
|
|
if (uVar3 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
if (uVar3 < 0x11) {
|
|
puVar2 = param_1;
|
|
if (sVar1 == 0) goto LAB_00031c9c;
|
|
}
|
|
else {
|
|
local_18 = uVar3;
|
|
if (uVar3 < 0x81) {
|
|
puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar3 = local_18;
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)operator_new(uVar3);
|
|
}
|
|
param_1[4] = puVar2;
|
|
param_1[5] = puVar2;
|
|
*param_1 = (undefined1 *)((int)puVar2 + uVar3);
|
|
}
|
|
__aeabi_memcpy(puVar2,param_2);
|
|
puVar2 = (undefined4 *)((int)puVar2 + sVar1);
|
|
LAB_00031c9c:
|
|
param_1[4] = puVar2;
|
|
*(undefined1 *)puVar2 = 0;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __stl_throw_range_error @ 00031cec
|
|
|
|
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
|
|
/* std::__stl_throw_range_error(char const*) */
|
|
|
|
void std::__stl_throw_range_error(char *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
size_t sVar2;
|
|
size_t *__dest;
|
|
size_t *psVar3;
|
|
int *local_38;
|
|
undefined1 auStack_30 [4];
|
|
undefined1 auStack_2c [20];
|
|
char *local_18;
|
|
|
|
puVar1 = (undefined4 *)FUN_00030824(0x108);
|
|
FUN_00031c38(auStack_2c,param_1,auStack_30);
|
|
FUN_00030e00(puVar1);
|
|
*puVar1 = &PTR____Named_exception_00068e80;
|
|
sVar2 = strlen(local_18);
|
|
sVar2 = sVar2 + 1;
|
|
if (sVar2 < 0x101) {
|
|
__dest = puVar1 + 1;
|
|
puVar1[0x41] = __dest;
|
|
}
|
|
else {
|
|
__dest = (size_t *)malloc(sVar2);
|
|
puVar1[0x41] = __dest;
|
|
psVar3 = puVar1 + 1;
|
|
if (__dest == (size_t *)0x0) {
|
|
puVar1[0x41] = psVar3;
|
|
__dest = psVar3;
|
|
sVar2 = 0x100;
|
|
}
|
|
else {
|
|
*psVar3 = sVar2;
|
|
}
|
|
}
|
|
local_38 = puVar1 + 0x41;
|
|
strncpy((char *)__dest,local_18,sVar2 - 1);
|
|
*(undefined1 *)(*local_38 + (sVar2 - 1)) = 0;
|
|
*puVar1 = &PTR____Named_exception_00068f60;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar1,&range_error::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __stl_throw_out_of_range @ 00031dd0
|
|
|
|
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
|
|
/* std::__stl_throw_out_of_range(char const*) */
|
|
|
|
void std::__stl_throw_out_of_range(char *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
size_t sVar2;
|
|
size_t *__dest;
|
|
size_t *psVar3;
|
|
int *local_38;
|
|
undefined1 auStack_30 [4];
|
|
undefined1 auStack_2c [20];
|
|
char *local_18;
|
|
|
|
puVar1 = (undefined4 *)FUN_00030824(0x108);
|
|
FUN_00031c38(auStack_2c,param_1,auStack_30);
|
|
FUN_00030e00(puVar1);
|
|
*puVar1 = &PTR____Named_exception_00068e80;
|
|
sVar2 = strlen(local_18);
|
|
sVar2 = sVar2 + 1;
|
|
if (sVar2 < 0x101) {
|
|
__dest = puVar1 + 1;
|
|
puVar1[0x41] = __dest;
|
|
}
|
|
else {
|
|
__dest = (size_t *)malloc(sVar2);
|
|
puVar1[0x41] = __dest;
|
|
psVar3 = puVar1 + 1;
|
|
if (__dest == (size_t *)0x0) {
|
|
puVar1[0x41] = psVar3;
|
|
__dest = psVar3;
|
|
sVar2 = 0x100;
|
|
}
|
|
else {
|
|
*psVar3 = sVar2;
|
|
}
|
|
}
|
|
local_38 = puVar1 + 0x41;
|
|
strncpy((char *)__dest,local_18,sVar2 - 1);
|
|
*(undefined1 *)(*local_38 + (sVar2 - 1)) = 0;
|
|
*puVar1 = &PTR____Named_exception_00068f40;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar1,&out_of_range::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __stl_throw_length_error @ 00031eb4
|
|
|
|
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
|
|
/* std::__stl_throw_length_error(char const*) */
|
|
|
|
void std::__stl_throw_length_error(char *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
size_t sVar2;
|
|
size_t *__dest;
|
|
size_t *psVar3;
|
|
int *local_38;
|
|
undefined1 auStack_30 [4];
|
|
undefined1 auStack_2c [20];
|
|
char *local_18;
|
|
|
|
puVar1 = (undefined4 *)FUN_00030824(0x108);
|
|
FUN_00031c38(auStack_2c,param_1,auStack_30);
|
|
FUN_00030e00(puVar1);
|
|
*puVar1 = &PTR____Named_exception_00068e80;
|
|
sVar2 = strlen(local_18);
|
|
sVar2 = sVar2 + 1;
|
|
if (sVar2 < 0x101) {
|
|
__dest = puVar1 + 1;
|
|
puVar1[0x41] = __dest;
|
|
}
|
|
else {
|
|
__dest = (size_t *)malloc(sVar2);
|
|
puVar1[0x41] = __dest;
|
|
psVar3 = puVar1 + 1;
|
|
if (__dest == (size_t *)0x0) {
|
|
puVar1[0x41] = psVar3;
|
|
__dest = psVar3;
|
|
sVar2 = 0x100;
|
|
}
|
|
else {
|
|
*psVar3 = sVar2;
|
|
}
|
|
}
|
|
local_38 = puVar1 + 0x41;
|
|
strncpy((char *)__dest,local_18,sVar2 - 1);
|
|
*(undefined1 *)(*local_38 + (sVar2 - 1)) = 0;
|
|
*puVar1 = &PTR____Named_exception_00068f20;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar1,&length_error::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __stl_throw_invalid_argument @ 00031f98
|
|
|
|
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
|
|
/* std::__stl_throw_invalid_argument(char const*) */
|
|
|
|
void std::__stl_throw_invalid_argument(char *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
size_t sVar2;
|
|
size_t *__dest;
|
|
size_t *psVar3;
|
|
int *local_38;
|
|
undefined1 auStack_30 [4];
|
|
undefined1 auStack_2c [20];
|
|
char *local_18;
|
|
|
|
puVar1 = (undefined4 *)FUN_00030824(0x108);
|
|
FUN_00031c38(auStack_2c,param_1,auStack_30);
|
|
FUN_00030e00(puVar1);
|
|
*puVar1 = &PTR____Named_exception_00068e80;
|
|
sVar2 = strlen(local_18);
|
|
sVar2 = sVar2 + 1;
|
|
if (sVar2 < 0x101) {
|
|
__dest = puVar1 + 1;
|
|
puVar1[0x41] = __dest;
|
|
}
|
|
else {
|
|
__dest = (size_t *)malloc(sVar2);
|
|
puVar1[0x41] = __dest;
|
|
psVar3 = puVar1 + 1;
|
|
if (__dest == (size_t *)0x0) {
|
|
puVar1[0x41] = psVar3;
|
|
__dest = psVar3;
|
|
sVar2 = 0x100;
|
|
}
|
|
else {
|
|
*psVar3 = sVar2;
|
|
}
|
|
}
|
|
local_38 = puVar1 + 0x41;
|
|
strncpy((char *)__dest,local_18,sVar2 - 1);
|
|
*(undefined1 *)(*local_38 + (sVar2 - 1)) = 0;
|
|
*puVar1 = &PTR____Named_exception_00068f00;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar1,&invalid_argument::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __stl_throw_overflow_error @ 0003207c
|
|
|
|
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
|
|
/* std::__stl_throw_overflow_error(char const*) */
|
|
|
|
void std::__stl_throw_overflow_error(char *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
size_t sVar2;
|
|
size_t *__dest;
|
|
size_t *psVar3;
|
|
int *local_38;
|
|
undefined1 auStack_30 [4];
|
|
undefined1 auStack_2c [20];
|
|
char *local_18;
|
|
|
|
puVar1 = (undefined4 *)FUN_00030824(0x108);
|
|
FUN_00031c38(auStack_2c,param_1,auStack_30);
|
|
FUN_00030e00(puVar1);
|
|
*puVar1 = &PTR____Named_exception_00068e80;
|
|
sVar2 = strlen(local_18);
|
|
sVar2 = sVar2 + 1;
|
|
if (sVar2 < 0x101) {
|
|
__dest = puVar1 + 1;
|
|
puVar1[0x41] = __dest;
|
|
}
|
|
else {
|
|
__dest = (size_t *)malloc(sVar2);
|
|
puVar1[0x41] = __dest;
|
|
psVar3 = puVar1 + 1;
|
|
if (__dest == (size_t *)0x0) {
|
|
puVar1[0x41] = psVar3;
|
|
__dest = psVar3;
|
|
sVar2 = 0x100;
|
|
}
|
|
else {
|
|
*psVar3 = sVar2;
|
|
}
|
|
}
|
|
local_38 = puVar1 + 0x41;
|
|
strncpy((char *)__dest,local_18,sVar2 - 1);
|
|
*(undefined1 *)(*local_38 + (sVar2 - 1)) = 0;
|
|
*puVar1 = &PTR____Named_exception_00068f80;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(puVar1,&overflow_error::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __Named_exception @ 00032160
|
|
|
|
/* std::__Named_exception::__Named_exception(std::string const&) */
|
|
|
|
__Named_exception * __thiscall
|
|
std::__Named_exception::__Named_exception(__Named_exception *this,string *param_1)
|
|
|
|
{
|
|
char *__s;
|
|
size_t sVar1;
|
|
__Named_exception *p_Var2;
|
|
__Named_exception *__dest;
|
|
size_t sVar3;
|
|
|
|
FUN_00030e00();
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
__s = *(char **)(param_1 + 0x14);
|
|
sVar1 = strlen(__s);
|
|
sVar3 = 0x100;
|
|
sVar1 = sVar1 + 1;
|
|
if (sVar1 < 0x101) {
|
|
*(__Named_exception **)(this + 0x104) = this + 4;
|
|
__dest = this + 4;
|
|
sVar3 = sVar1;
|
|
}
|
|
else {
|
|
p_Var2 = (__Named_exception *)malloc(sVar1);
|
|
*(__Named_exception **)(this + 0x104) = p_Var2;
|
|
__dest = this + 4;
|
|
if (p_Var2 == (__Named_exception *)0x0) {
|
|
*(__Named_exception **)(this + 0x104) = __dest;
|
|
}
|
|
else {
|
|
*(size_t *)__dest = sVar1;
|
|
__dest = p_Var2;
|
|
sVar3 = sVar1;
|
|
}
|
|
}
|
|
strncpy((char *)__dest,__s,sVar3 - 1);
|
|
*(undefined1 *)(*(int *)(this + 0x104) + (sVar3 - 1)) = 0;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __Named_exception @ 000321d8
|
|
|
|
/* std::__Named_exception::__Named_exception(std::__Named_exception const&) */
|
|
|
|
__Named_exception * __thiscall
|
|
std::__Named_exception::__Named_exception(__Named_exception *this,__Named_exception *param_1)
|
|
|
|
{
|
|
size_t sVar1;
|
|
__Named_exception *p_Var2;
|
|
__Named_exception *__dest;
|
|
|
|
FUN_00030e00();
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
sVar1 = strlen(*(char **)(param_1 + 0x104));
|
|
sVar1 = sVar1 + 1;
|
|
if (sVar1 < 0x101) {
|
|
__dest = this + 4;
|
|
*(__Named_exception **)(this + 0x104) = __dest;
|
|
}
|
|
else {
|
|
p_Var2 = (__Named_exception *)malloc(sVar1);
|
|
*(__Named_exception **)(this + 0x104) = p_Var2;
|
|
__dest = this + 4;
|
|
if (p_Var2 == (__Named_exception *)0x0) {
|
|
*(__Named_exception **)(this + 0x104) = __dest;
|
|
sVar1 = 0x100;
|
|
}
|
|
else {
|
|
*(size_t *)__dest = sVar1;
|
|
__dest = p_Var2;
|
|
}
|
|
}
|
|
strncpy((char *)__dest,*(char **)(param_1 + 0x104),sVar1 - 1);
|
|
*(undefined1 *)(*(int *)(this + 0x104) + (sVar1 - 1)) = 0;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator= @ 0003224c
|
|
|
|
/* std::__Named_exception::TEMPNAMEPLACEHOLDERVALUE(std::__Named_exception const&) */
|
|
|
|
__Named_exception * __thiscall
|
|
std::__Named_exception::operator=(__Named_exception *this,__Named_exception *param_1)
|
|
|
|
{
|
|
__Named_exception *p_Var1;
|
|
size_t sVar2;
|
|
__Named_exception *__dest;
|
|
uint uVar3;
|
|
__Named_exception *p_Var4;
|
|
|
|
p_Var1 = this + 0x104;
|
|
sVar2 = strlen(*(char **)(param_1 + 0x104));
|
|
__dest = *(__Named_exception **)(this + 0x104);
|
|
sVar2 = sVar2 + 1;
|
|
p_Var4 = this + 4;
|
|
uVar3 = 0x100;
|
|
if (__dest != p_Var4) {
|
|
uVar3 = *(uint *)p_Var4;
|
|
}
|
|
if (uVar3 < sVar2) {
|
|
if (__dest != p_Var4) {
|
|
free(__dest);
|
|
}
|
|
__dest = (__Named_exception *)malloc(sVar2);
|
|
*(__Named_exception **)p_Var1 = __dest;
|
|
if (__dest == (__Named_exception *)0x0) {
|
|
*(__Named_exception **)p_Var1 = p_Var4;
|
|
sVar2 = 0x100;
|
|
__dest = p_Var4;
|
|
}
|
|
else {
|
|
*(size_t *)p_Var4 = sVar2;
|
|
}
|
|
}
|
|
strncpy((char *)__dest,*(char **)(param_1 + 0x104),sVar2 - 1);
|
|
*(undefined1 *)(*(int *)p_Var1 + (sVar2 - 1)) = 0;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~__Named_exception @ 000322c0
|
|
|
|
/* std::__Named_exception::~__Named_exception() */
|
|
|
|
void __thiscall std::__Named_exception::~__Named_exception(__Named_exception *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(__Named_exception **)(this + 0x104) != this + 4) {
|
|
free(*(__Named_exception **)(this + 0x104));
|
|
}
|
|
FUN_00030e10(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~__Named_exception @ 000322ec
|
|
|
|
/* std::__Named_exception::~__Named_exception() */
|
|
|
|
void __thiscall std::__Named_exception::~__Named_exception(__Named_exception *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(__Named_exception **)(this + 0x104) != this + 4) {
|
|
free(*(__Named_exception **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC what @ 0003231c
|
|
|
|
/* std::__Named_exception::what() const */
|
|
|
|
undefined4 __thiscall std::__Named_exception::what(__Named_exception *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0x104);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~logic_error @ 00032324
|
|
|
|
/* std::logic_error::~logic_error() */
|
|
|
|
void __thiscall std::logic_error::~logic_error(logic_error *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(logic_error **)(this + 0x104) != this + 4) {
|
|
free(*(logic_error **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~runtime_error @ 00032354
|
|
|
|
/* std::runtime_error::~runtime_error() */
|
|
|
|
void __thiscall std::runtime_error::~runtime_error(runtime_error *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(runtime_error **)(this + 0x104) != this + 4) {
|
|
free(*(runtime_error **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~domain_error @ 00032384
|
|
|
|
/* std::domain_error::~domain_error() */
|
|
|
|
void __thiscall std::domain_error::~domain_error(domain_error *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(domain_error **)(this + 0x104) != this + 4) {
|
|
free(*(domain_error **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~invalid_argument @ 000323b4
|
|
|
|
/* std::invalid_argument::~invalid_argument() */
|
|
|
|
void __thiscall std::invalid_argument::~invalid_argument(invalid_argument *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(invalid_argument **)(this + 0x104) != this + 4) {
|
|
free(*(invalid_argument **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~length_error @ 000323e4
|
|
|
|
/* std::length_error::~length_error() */
|
|
|
|
void __thiscall std::length_error::~length_error(length_error *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(length_error **)(this + 0x104) != this + 4) {
|
|
free(*(length_error **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~out_of_range @ 00032414
|
|
|
|
/* std::out_of_range::~out_of_range() */
|
|
|
|
void __thiscall std::out_of_range::~out_of_range(out_of_range *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(out_of_range **)(this + 0x104) != this + 4) {
|
|
free(*(out_of_range **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~range_error @ 00032444
|
|
|
|
/* std::range_error::~range_error() */
|
|
|
|
void __thiscall std::range_error::~range_error(range_error *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(range_error **)(this + 0x104) != this + 4) {
|
|
free(*(range_error **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~overflow_error @ 00032474
|
|
|
|
/* std::overflow_error::~overflow_error() */
|
|
|
|
void __thiscall std::overflow_error::~overflow_error(overflow_error *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(overflow_error **)(this + 0x104) != this + 4) {
|
|
free(*(overflow_error **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~underflow_error @ 000324a4
|
|
|
|
/* std::underflow_error::~underflow_error() */
|
|
|
|
void __thiscall std::underflow_error::~underflow_error(underflow_error *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR____Named_exception_00068e80;
|
|
if (*(underflow_error **)(this + 0x104) != this + 4) {
|
|
free(*(underflow_error **)(this + 0x104));
|
|
}
|
|
pvVar1 = (void *)FUN_00030e10(this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC failure @ 000324d4
|
|
|
|
/* std::ios_base::failure::failure(std::string const&) */
|
|
|
|
void __thiscall std::ios_base::failure::failure(failure *this,string *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)__Named_exception::__Named_exception((__Named_exception *)this,param_1);
|
|
*puVar1 = &PTR__failure_00068fc0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~failure @ 000324ec
|
|
|
|
/* std::ios_base::failure::~failure() */
|
|
|
|
void __thiscall std::ios_base::failure::~failure(failure *this)
|
|
|
|
{
|
|
__Named_exception::~__Named_exception((__Named_exception *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~failure @ 000324f6
|
|
|
|
/* std::ios_base::failure::~failure() */
|
|
|
|
void __thiscall std::ios_base::failure::~failure(failure *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)__Named_exception::~__Named_exception((__Named_exception *)this);
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC imbue @ 00032504
|
|
|
|
/* std::ios_base::imbue(std::locale const&) */
|
|
|
|
void std::ios_base::imbue(locale *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int in_r1;
|
|
locale *in_r2;
|
|
locale *this;
|
|
int iVar2;
|
|
|
|
this = (locale *)(in_r1 + 0x20);
|
|
iVar1 = locale::operator!=(in_r2,this);
|
|
if (iVar1 == 1) {
|
|
locale::locale(param_1,this);
|
|
locale::operator=(this,in_r2);
|
|
iVar1 = *(int *)(in_r1 + 0x2c);
|
|
if (iVar1 != 0) {
|
|
iVar2 = 1 - iVar1;
|
|
iVar1 = iVar1 * -8 + 4;
|
|
do {
|
|
(**(code **)(*(int *)(in_r1 + 0x24) + iVar2 * -8))
|
|
(1,in_r1,*(undefined4 *)(*(int *)(in_r1 + 0x24) - iVar1));
|
|
iVar1 = iVar1 + 8;
|
|
iVar2 = iVar2 + 1;
|
|
} while (iVar2 != 1);
|
|
}
|
|
return;
|
|
}
|
|
iVar1 = *(int *)(in_r1 + 0x2c);
|
|
if (iVar1 != 0) {
|
|
iVar2 = 1 - iVar1;
|
|
iVar1 = iVar1 * -8 + 4;
|
|
do {
|
|
(**(code **)(*(int *)(in_r1 + 0x24) + iVar2 * -8))
|
|
(1,in_r1,*(undefined4 *)(*(int *)(in_r1 + 0x24) - iVar1));
|
|
iVar1 = iVar1 + 8;
|
|
iVar2 = iVar2 + 1;
|
|
} while (iVar2 != 1);
|
|
}
|
|
locale::locale(param_1,this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_invoke_callbacks @ 000325c6
|
|
|
|
/* std::ios_base::_M_invoke_callbacks(std::ios_base::event) */
|
|
|
|
void __thiscall std::ios_base::_M_invoke_callbacks(ios_base *this,undefined4 param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = *(int *)(this + 0x2c);
|
|
if (iVar1 != 0) {
|
|
iVar2 = 1 - iVar1;
|
|
iVar1 = iVar1 * -8 + 4;
|
|
do {
|
|
(**(code **)(*(int *)(this + 0x24) + iVar2 * -8))
|
|
(param_2,this,*(undefined4 *)(*(int *)(this + 0x24) - iVar1));
|
|
iVar1 = iVar1 + 8;
|
|
iVar2 = iVar2 + 1;
|
|
} while (iVar2 != 1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC xalloc @ 00032608
|
|
|
|
/* std::ios_base::xalloc() */
|
|
|
|
int std::ios_base::xalloc(void)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070a3c);
|
|
iVar1 = DAT_00070a38;
|
|
DAT_00070a38 = DAT_00070a38 + 1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070a3c);
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC iword @ 00032634
|
|
|
|
/* std::ios_base::iword(int) */
|
|
|
|
undefined * __thiscall std::ios_base::iword(ios_base *this,int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
void *__ptr;
|
|
|
|
__ptr = *(void **)(this + 0x30);
|
|
uVar4 = *(uint *)(this + 0x34);
|
|
uVar2 = uVar4;
|
|
if ((int)uVar4 <= param_1) {
|
|
uVar2 = param_1 + 1U;
|
|
if (param_1 + 1U <= uVar4 << 1) {
|
|
uVar2 = uVar4 << 1;
|
|
}
|
|
__ptr = realloc(__ptr,uVar2 << 2);
|
|
if (__ptr == (void *)0x0) goto LAB_000326ac;
|
|
uVar3 = uVar2 - uVar4;
|
|
if (0 < (int)(uVar3 * 4)) {
|
|
iVar1 = 0x3fffffff;
|
|
if ((uVar3 | 0xc0000000) != 0xc0000000) {
|
|
iVar1 = 0x3ffffffe;
|
|
}
|
|
__aeabi_memclr4((void *)((int)__ptr + uVar4 * 4),(iVar1 + uVar3) * 4 + 8);
|
|
}
|
|
}
|
|
if (__ptr != (void *)0x0) {
|
|
*(void **)(this + 0x30) = __ptr;
|
|
*(uint *)(this + 0x34) = uVar2;
|
|
return (undefined *)((int)__ptr + param_1 * 4);
|
|
}
|
|
LAB_000326ac:
|
|
uVar2 = *(uint *)(this + 8);
|
|
*(uint *)(this + 8) = uVar2 | 1;
|
|
if ((*(uint *)(this + 0x14) & (uVar2 | 1)) != 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
_M_throw_failure();
|
|
}
|
|
return &DAT_00070a40;
|
|
}
|
|
|
|
|
|
|
|
### FUNC pword @ 000326d0
|
|
|
|
/* std::ios_base::pword(int) */
|
|
|
|
undefined * __thiscall std::ios_base::pword(ios_base *this,int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
void *__ptr;
|
|
|
|
__ptr = *(void **)(this + 0x38);
|
|
uVar4 = *(uint *)(this + 0x3c);
|
|
uVar2 = uVar4;
|
|
if ((int)uVar4 <= param_1) {
|
|
uVar2 = param_1 + 1U;
|
|
if (param_1 + 1U <= uVar4 << 1) {
|
|
uVar2 = uVar4 << 1;
|
|
}
|
|
__ptr = realloc(__ptr,uVar2 << 2);
|
|
if (__ptr == (void *)0x0) goto LAB_00032748;
|
|
uVar3 = uVar2 - uVar4;
|
|
if (0 < (int)(uVar3 * 4)) {
|
|
iVar1 = 0x3fffffff;
|
|
if ((uVar3 | 0xc0000000) != 0xc0000000) {
|
|
iVar1 = 0x3ffffffe;
|
|
}
|
|
__aeabi_memclr4((void *)((int)__ptr + uVar4 * 4),(iVar1 + uVar3) * 4 + 8);
|
|
}
|
|
}
|
|
if (__ptr != (void *)0x0) {
|
|
*(void **)(this + 0x38) = __ptr;
|
|
*(uint *)(this + 0x3c) = uVar2;
|
|
return (undefined *)((int)__ptr + param_1 * 4);
|
|
}
|
|
LAB_00032748:
|
|
uVar2 = *(uint *)(this + 8);
|
|
*(uint *)(this + 8) = uVar2 | 1;
|
|
if ((*(uint *)(this + 0x14) & (uVar2 | 1)) != 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
_M_throw_failure();
|
|
}
|
|
return &DAT_00070a44;
|
|
}
|
|
|
|
|
|
|
|
### FUNC register_callback @ 0003276c
|
|
|
|
/* std::ios_base::register_callback(void (*)(std::ios_base::event, std::ios_base&, int), int) */
|
|
|
|
void __thiscall
|
|
std::ios_base::register_callback
|
|
(ios_base *this,_func_void_event_ios_base_ptr_int *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
void *__ptr;
|
|
uint uVar4;
|
|
|
|
__ptr = *(void **)(this + 0x24);
|
|
uVar4 = *(uint *)(this + 0x28);
|
|
uVar2 = uVar4;
|
|
if ((int)uVar4 <= *(int *)(this + 0x2c)) {
|
|
uVar2 = *(int *)(this + 0x2c) + 1;
|
|
if (uVar2 <= uVar4 << 1) {
|
|
uVar2 = uVar4 << 1;
|
|
}
|
|
__ptr = realloc(__ptr,uVar2 << 3);
|
|
if (__ptr == (void *)0x0) goto LAB_000327f6;
|
|
uVar3 = uVar2 - uVar4;
|
|
if (0 < (int)(uVar3 * 8)) {
|
|
iVar1 = 0x1fffffff;
|
|
if ((uVar3 | 0xe0000000) != 0xe0000000) {
|
|
iVar1 = 0x1ffffffe;
|
|
}
|
|
__aeabi_memclr4((void *)((int)__ptr + uVar4 * 8),(iVar1 + uVar3) * 8 + 0x10);
|
|
}
|
|
}
|
|
if (__ptr != (void *)0x0) {
|
|
*(uint *)(this + 0x28) = uVar2;
|
|
*(void **)(this + 0x24) = __ptr;
|
|
iVar1 = *(int *)(this + 0x2c);
|
|
*(int *)(this + 0x2c) = iVar1 + 1;
|
|
iVar1 = iVar1 * 8;
|
|
*(_func_void_event_ios_base_ptr_int **)((int)__ptr + iVar1) = param_1;
|
|
*(int *)((int)__ptr + iVar1 + 4) = param_2;
|
|
return;
|
|
}
|
|
LAB_000327f6:
|
|
uVar2 = *(uint *)(this + 8);
|
|
*(uint *)(this + 8) = uVar2 | 1;
|
|
if ((*(uint *)(this + 0x14) & (uVar2 | 1)) != 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
_M_throw_failure();
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_throw_failure @ 00032810
|
|
|
|
/* std::ios_base::_M_throw_failure() */
|
|
|
|
void std::ios_base::_M_throw_failure(void)
|
|
|
|
{
|
|
__Named_exception *this;
|
|
undefined1 auStack_30 [4];
|
|
string asStack_2c [24];
|
|
|
|
this = (__Named_exception *)FUN_00030824(0x108);
|
|
FUN_00031c38(asStack_2c,&LAB_00032890,auStack_30);
|
|
__Named_exception::__Named_exception(this,asStack_2c);
|
|
*(undefined ***)this = &PTR__failure_00068fc0;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(this,&failure::typeinfo,failure::~failure);
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_copy_state @ 000328a8
|
|
|
|
/* std::ios_base::_M_copy_state(std::ios_base const&) */
|
|
|
|
void __thiscall std::ios_base::_M_copy_state(ios_base *this,ios_base *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
size_t sVar2;
|
|
void *pvVar3;
|
|
undefined4 uVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
|
|
*(undefined4 *)(this + 4) = *(undefined4 *)(param_1 + 4);
|
|
*(undefined4 *)(this + 0xc) = *(undefined4 *)(param_1 + 0xc);
|
|
*(undefined4 *)(this + 0x10) = *(undefined4 *)(param_1 + 0x10);
|
|
*(undefined4 *)(this + 0x18) = *(undefined4 *)(param_1 + 0x18);
|
|
*(undefined4 *)(this + 0x1c) = *(undefined4 *)(param_1 + 0x1c);
|
|
locale::operator=((locale *)(this + 0x20),(locale *)(param_1 + 0x20));
|
|
iVar1 = *(int *)(param_1 + 0x24);
|
|
if (iVar1 != 0) {
|
|
iVar6 = *(int *)(param_1 + 0x2c);
|
|
sVar2 = iVar6 << 3;
|
|
pvVar3 = malloc(sVar2);
|
|
if ((iVar6 != 0) && (pvVar3 != (void *)0x0)) {
|
|
__aeabi_memcpy(pvVar3,iVar1,sVar2);
|
|
}
|
|
if (pvVar3 == (void *)0x0) {
|
|
uVar5 = *(uint *)(this + 8);
|
|
*(uint *)(this + 8) = uVar5 | 1;
|
|
if ((*(uint *)(this + 0x14) & (uVar5 | 1)) != 0) goto LAB_000329b4;
|
|
}
|
|
else {
|
|
free(*(void **)(this + 0x24));
|
|
*(void **)(this + 0x24) = pvVar3;
|
|
uVar4 = *(undefined4 *)(param_1 + 0x2c);
|
|
*(undefined4 *)(this + 0x28) = uVar4;
|
|
*(undefined4 *)(this + 0x2c) = uVar4;
|
|
}
|
|
}
|
|
iVar1 = *(int *)(param_1 + 0x30);
|
|
if (iVar1 != 0) {
|
|
iVar6 = *(int *)(param_1 + 0x34);
|
|
sVar2 = iVar6 << 2;
|
|
pvVar3 = malloc(sVar2);
|
|
if ((iVar6 != 0) && (pvVar3 != (void *)0x0)) {
|
|
__aeabi_memcpy(pvVar3,iVar1,sVar2);
|
|
}
|
|
if (pvVar3 == (void *)0x0) {
|
|
uVar5 = *(uint *)(this + 8);
|
|
*(uint *)(this + 8) = uVar5 | 1;
|
|
if ((*(uint *)(this + 0x14) & (uVar5 | 1)) != 0) goto LAB_000329b4;
|
|
}
|
|
else {
|
|
free(*(void **)(this + 0x30));
|
|
*(void **)(this + 0x30) = pvVar3;
|
|
*(undefined4 *)(this + 0x34) = *(undefined4 *)(param_1 + 0x34);
|
|
}
|
|
}
|
|
iVar1 = *(int *)(param_1 + 0x38);
|
|
if (iVar1 != 0) {
|
|
iVar6 = *(int *)(param_1 + 0x3c);
|
|
sVar2 = iVar6 << 2;
|
|
pvVar3 = malloc(sVar2);
|
|
if ((iVar6 != 0) && (pvVar3 != (void *)0x0)) {
|
|
__aeabi_memcpy(pvVar3,iVar1,sVar2);
|
|
}
|
|
if (pvVar3 != (void *)0x0) {
|
|
free(*(void **)(this + 0x38));
|
|
*(void **)(this + 0x38) = pvVar3;
|
|
*(undefined4 *)(this + 0x3c) = *(undefined4 *)(param_1 + 0x3c);
|
|
return;
|
|
}
|
|
uVar5 = *(uint *)(this + 8);
|
|
*(uint *)(this + 8) = uVar5 | 1;
|
|
if ((*(uint *)(this + 0x14) & (uVar5 | 1)) != 0) {
|
|
LAB_000329b4:
|
|
/* WARNING: Subroutine does not return */
|
|
_M_throw_failure();
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ios_base @ 000329b8
|
|
|
|
/* std::ios_base::ios_base() */
|
|
|
|
ios_base * __thiscall std::ios_base::ios_base(ios_base *this)
|
|
|
|
{
|
|
*(undefined4 *)(this + 0x1c) = 0;
|
|
*(undefined4 *)(this + 0x18) = 0;
|
|
*(undefined4 *)(this + 0x14) = 0;
|
|
*(undefined4 *)(this + 0x10) = 0;
|
|
*(undefined4 *)(this + 0xc) = 0;
|
|
*(undefined4 *)(this + 8) = 0;
|
|
*(undefined4 *)(this + 4) = 0;
|
|
*(undefined ***)this = &PTR__ios_base_00068fe0;
|
|
locale::locale((locale *)(this + 0x20));
|
|
*(undefined4 *)(this + 0x24) = 0;
|
|
*(undefined4 *)(this + 0x28) = 0;
|
|
*(undefined4 *)(this + 0x2c) = 0;
|
|
*(undefined4 *)(this + 0x30) = 0;
|
|
*(undefined4 *)(this + 0x34) = 0;
|
|
*(undefined4 *)(this + 0x38) = 0;
|
|
*(undefined4 *)(this + 0x3c) = 0;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ios_base @ 000329f8
|
|
|
|
/* std::ios_base::~ios_base() */
|
|
|
|
ios_base * __thiscall std::ios_base::~ios_base(ios_base *this)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
*(undefined ***)this = &PTR__ios_base_00068fe0;
|
|
iVar1 = *(int *)(this + 0x2c);
|
|
if (iVar1 != 0) {
|
|
iVar2 = 1 - iVar1;
|
|
iVar1 = iVar1 * -8 + 4;
|
|
do {
|
|
(**(code **)(*(int *)(this + 0x24) + iVar2 * -8))
|
|
(0,this,*(undefined4 *)(*(int *)(this + 0x24) - iVar1));
|
|
iVar1 = iVar1 + 8;
|
|
iVar2 = iVar2 + 1;
|
|
} while (iVar2 != 1);
|
|
}
|
|
free(*(void **)(this + 0x24));
|
|
free(*(void **)(this + 0x30));
|
|
free(*(void **)(this + 0x38));
|
|
locale::~locale((locale *)(this + 0x20));
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ios_base @ 00032a78
|
|
|
|
/* std::ios_base::~ios_base() */
|
|
|
|
void __thiscall std::ios_base::~ios_base(ios_base *this)
|
|
|
|
{
|
|
~ios_base(this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Init @ 00032a98
|
|
|
|
/* std::ios_base::Init::Init() */
|
|
|
|
Init * __thiscall std::ios_base::Init::Init(Init *this)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = _S_count;
|
|
_S_count = _S_count + 1;
|
|
if (iVar1 != 0) {
|
|
return this;
|
|
}
|
|
FUN_0004d7dc();
|
|
_S_initialize();
|
|
_Filebuf_base::_S_initialize();
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _S_initialize @ 00032ac8
|
|
|
|
/* std::ios_base::_S_initialize() */
|
|
|
|
void std::ios_base::_S_initialize(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
undefined4 uVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
undefined4 uVar5;
|
|
undefined4 *local_20;
|
|
undefined4 *local_1c;
|
|
undefined4 *local_18;
|
|
|
|
if (_S_is_synced == '\0') {
|
|
puVar1 = (undefined4 *)FUN_000333c0(&__sF,8);
|
|
}
|
|
else {
|
|
puVar1 = (undefined4 *)operator_new(0x24);
|
|
FUN_0004ec64(puVar1,&__sF);
|
|
*puVar1 = &DAT_00069e3c;
|
|
}
|
|
if (_S_is_synced == '\0') {
|
|
local_20 = (undefined4 *)FUN_000333c0(pthread_key_create,0x10);
|
|
local_1c = (undefined4 *)FUN_000333c0(isupper,0x10);
|
|
local_18 = (undefined4 *)FUN_000333c0(isupper,0x10);
|
|
}
|
|
else {
|
|
local_20 = (undefined4 *)operator_new(0x24);
|
|
FUN_0004ec64(local_20,pthread_key_create);
|
|
*local_20 = &DAT_00069e98;
|
|
local_1c = (undefined4 *)operator_new(0x24);
|
|
FUN_0004ec64(local_1c,isupper);
|
|
*local_1c = &DAT_00069e98;
|
|
local_18 = (undefined4 *)operator_new(0x24);
|
|
FUN_0004ec64(local_18,isupper);
|
|
*local_18 = &DAT_00069e98;
|
|
}
|
|
ios_base((ios_base *)(cin + 8));
|
|
cin[0x4c] = 0;
|
|
cin._80_4_ = 0;
|
|
cin._84_4_ = 0;
|
|
cin._0_4_ = &DAT_00069134;
|
|
cin._4_4_ = 0;
|
|
cin._8_4_ = &PTR_LAB_0003549a_1_00069148;
|
|
FUN_000353f8(0x70a50,puVar1);
|
|
ios_base((ios_base *)(cout + 4));
|
|
cout[0x48] = 0;
|
|
cout._76_4_ = 0;
|
|
cout._80_4_ = 0;
|
|
cout._0_4_ = &DAT_00069184;
|
|
cout._4_4_ = &PTR_LAB_000355ba_1_00069198;
|
|
FUN_000353f8(0x70aa4,local_20);
|
|
ios_base((ios_base *)(cerr + 4));
|
|
cerr[0x48] = 0;
|
|
cerr._76_4_ = 0;
|
|
cerr._80_4_ = 0;
|
|
cerr._0_4_ = &DAT_00069184;
|
|
cerr._4_4_ = &PTR_LAB_000355ba_1_00069198;
|
|
FUN_000353f8(0x70afc,local_1c);
|
|
ios_base((ios_base *)(clog + 4));
|
|
clog[0x48] = 0;
|
|
clog._76_4_ = 0;
|
|
clog._80_4_ = 0;
|
|
clog._0_4_ = &DAT_00069184;
|
|
clog._4_4_ = &PTR_LAB_000355ba_1_00069198;
|
|
FUN_000353f8(0x70b54,local_18);
|
|
*(undefined1 **)(cin + *(int *)(cin._0_4_ + -0xc) + 0x4c) = cout;
|
|
*(uint *)(cerr + *(int *)(cerr._0_4_ + -0xc) + 4) =
|
|
*(uint *)(cerr + *(int *)(cerr._0_4_ + -0xc) + 4) | 0x2000;
|
|
uVar2 = FUN_00033432(&__sF,8);
|
|
uVar3 = FUN_00033432(pthread_key_create,0x10);
|
|
uVar4 = FUN_00033432(isupper,0x10);
|
|
uVar5 = FUN_00033432(isupper,0x10);
|
|
ios_base((ios_base *)(wcin + 8));
|
|
wcin._76_4_ = 0;
|
|
wcin._80_4_ = 0;
|
|
wcin._84_4_ = 0;
|
|
wcin._0_4_ = &DAT_000691c4;
|
|
wcin._4_4_ = 0;
|
|
wcin._8_4_ = &PTR_LAB_000356a2_1_000691d8;
|
|
FUN_000355fc(0x70bb0,uVar2);
|
|
ios_base((ios_base *)(wcout + 4));
|
|
wcout._72_4_ = 0;
|
|
wcout._76_4_ = 0;
|
|
wcout._80_4_ = 0;
|
|
wcout._0_4_ = &DAT_00069214;
|
|
wcout._4_4_ = &PTR_LAB_000357c2_1_00069228;
|
|
FUN_000355fc(0x70c04,uVar3);
|
|
ios_base((ios_base *)(wcerr + 4));
|
|
wcerr._72_4_ = 0;
|
|
wcerr._76_4_ = 0;
|
|
wcerr._80_4_ = 0;
|
|
wcerr._0_4_ = &DAT_00069214;
|
|
wcerr._4_4_ = &PTR_LAB_000357c2_1_00069228;
|
|
FUN_000355fc(0x70c5c,uVar4);
|
|
ios_base((ios_base *)(wclog + 4));
|
|
wclog._72_4_ = 0;
|
|
wclog._76_4_ = 0;
|
|
wclog._80_4_ = 0;
|
|
wclog._0_4_ = &DAT_00069214;
|
|
wclog._4_4_ = &PTR_LAB_000357c2_1_00069228;
|
|
FUN_000355fc(0x70cb4,uVar5);
|
|
*(undefined1 **)(wcin + *(int *)(wcin._0_4_ + -0xc) + 0x4c) = wcout;
|
|
*(uint *)(wcerr + *(int *)(wcerr._0_4_ + -0xc) + 4) =
|
|
*(uint *)(wcerr + *(int *)(wcerr._0_4_ + -0xc) + 4) | 0x2000;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~Init @ 000330b4
|
|
|
|
/* std::ios_base::Init::~Init() */
|
|
|
|
Init * __thiscall std::ios_base::Init::~Init(Init *this)
|
|
|
|
{
|
|
_S_count = _S_count + -1;
|
|
if (_S_count != 0) {
|
|
return this;
|
|
}
|
|
_S_uninitialize();
|
|
FUN_0004d8ac();
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _S_uninitialize @ 000330dc
|
|
|
|
/* std::ios_base::_S_uninitialize() */
|
|
|
|
void std::ios_base::_S_uninitialize(void)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
|
|
iVar2 = *(int *)(cin._0_4_ + -0xc);
|
|
*(undefined4 *)(cin + iVar2 + 0x14) = 0;
|
|
*(uint *)(cin + iVar2 + 8) =
|
|
*(uint *)(cin + iVar2 + 8) | (uint)(*(int *)(cin + iVar2 + 0x48) == 0);
|
|
iVar2 = *(int *)(cout._0_4_ + -0xc);
|
|
*(undefined4 *)(cout + iVar2 + 0x14) = 0;
|
|
*(uint *)(cout + iVar2 + 8) =
|
|
*(uint *)(cout + iVar2 + 8) | (uint)(*(int *)(cout + iVar2 + 0x48) == 0);
|
|
iVar2 = *(int *)(cerr._0_4_ + -0xc);
|
|
*(undefined4 *)(cerr + iVar2 + 0x14) = 0;
|
|
*(uint *)(cerr + iVar2 + 8) =
|
|
*(uint *)(cerr + iVar2 + 8) | (uint)(*(int *)(cerr + iVar2 + 0x48) == 0);
|
|
iVar2 = *(int *)(clog._0_4_ + -0xc);
|
|
*(undefined4 *)(clog + iVar2 + 0x14) = 0;
|
|
*(uint *)(clog + iVar2 + 8) =
|
|
*(uint *)(clog + iVar2 + 8) | (uint)(*(int *)(clog + iVar2 + 0x48) == 0);
|
|
iVar2 = *(int *)(cin._0_4_ + -0xc);
|
|
*(undefined4 *)(cin + iVar2 + 8) = 1;
|
|
piVar1 = *(int **)(cin + iVar2 + 0x48);
|
|
*(undefined4 *)(cin + iVar2 + 0x48) = 0;
|
|
if ((cin[iVar2 + 0x14] & 1) == 0) {
|
|
if (piVar1 != (int *)0x0) {
|
|
(**(code **)(*piVar1 + 4))();
|
|
}
|
|
iVar2 = *(int *)(cout._0_4_ + -0xc);
|
|
*(undefined4 *)(cout + iVar2 + 8) = 1;
|
|
piVar1 = *(int **)(cout + iVar2 + 0x48);
|
|
*(undefined4 *)(cout + iVar2 + 0x48) = 0;
|
|
if ((cout[iVar2 + 0x14] & 1) == 0) {
|
|
if (piVar1 != (int *)0x0) {
|
|
(**(code **)(*piVar1 + 4))();
|
|
}
|
|
iVar2 = *(int *)(cerr._0_4_ + -0xc);
|
|
*(undefined4 *)(cerr + iVar2 + 8) = 1;
|
|
piVar1 = *(int **)(cerr + iVar2 + 0x48);
|
|
*(undefined4 *)(cerr + iVar2 + 0x48) = 0;
|
|
if ((cerr[iVar2 + 0x14] & 1) == 0) {
|
|
if (piVar1 != (int *)0x0) {
|
|
(**(code **)(*piVar1 + 4))();
|
|
}
|
|
iVar2 = *(int *)(clog._0_4_ + -0xc);
|
|
*(undefined4 *)(clog + iVar2 + 8) = 1;
|
|
piVar1 = *(int **)(clog + iVar2 + 0x48);
|
|
*(undefined4 *)(clog + iVar2 + 0x48) = 0;
|
|
if ((clog[iVar2 + 0x14] & 1) == 0) {
|
|
if (piVar1 != (int *)0x0) {
|
|
(**(code **)(*piVar1 + 4))();
|
|
}
|
|
(**(code **)cin._0_4_)();
|
|
(**(code **)cout._0_4_)();
|
|
(**(code **)cerr._0_4_)();
|
|
(**(code **)clog._0_4_)();
|
|
iVar2 = *(int *)(wcin._0_4_ + -0xc);
|
|
*(undefined4 *)(wcin + iVar2 + 0x14) = 0;
|
|
*(uint *)(wcin + iVar2 + 8) =
|
|
*(uint *)(wcin + iVar2 + 8) | (uint)(*(int *)(wcin + iVar2 + 0x48) == 0);
|
|
iVar2 = *(int *)(wcout._0_4_ + -0xc);
|
|
*(undefined4 *)(wcout + iVar2 + 0x14) = 0;
|
|
*(uint *)(wcout + iVar2 + 8) =
|
|
*(uint *)(wcout + iVar2 + 8) | (uint)(*(int *)(wcout + iVar2 + 0x48) == 0);
|
|
iVar2 = *(int *)(wcerr._0_4_ + -0xc);
|
|
*(undefined4 *)(wcerr + iVar2 + 0x14) = 0;
|
|
*(uint *)(wcerr + iVar2 + 8) =
|
|
*(uint *)(wcerr + iVar2 + 8) | (uint)(*(int *)(wcerr + iVar2 + 0x48) == 0);
|
|
iVar2 = *(int *)(wclog._0_4_ + -0xc);
|
|
*(undefined4 *)(wclog + iVar2 + 0x14) = 0;
|
|
*(uint *)(wclog + iVar2 + 8) =
|
|
*(uint *)(wclog + iVar2 + 8) | (uint)(*(int *)(wclog + iVar2 + 0x48) == 0);
|
|
iVar2 = *(int *)(wcin._0_4_ + -0xc);
|
|
*(undefined4 *)(wcin + iVar2 + 8) = 1;
|
|
piVar1 = *(int **)(wcin + iVar2 + 0x48);
|
|
*(undefined4 *)(wcin + iVar2 + 0x48) = 0;
|
|
if ((wcin[iVar2 + 0x14] & 1) == 0) {
|
|
if (piVar1 != (int *)0x0) {
|
|
(**(code **)(*piVar1 + 4))();
|
|
}
|
|
iVar2 = *(int *)(wcout._0_4_ + -0xc);
|
|
*(undefined4 *)(wcout + iVar2 + 8) = 1;
|
|
piVar1 = *(int **)(wcout + iVar2 + 0x48);
|
|
*(undefined4 *)(wcout + iVar2 + 0x48) = 0;
|
|
if ((wcout[iVar2 + 0x14] & 1) == 0) {
|
|
if (piVar1 != (int *)0x0) {
|
|
(**(code **)(*piVar1 + 4))();
|
|
}
|
|
iVar2 = *(int *)(wcerr._0_4_ + -0xc);
|
|
*(undefined4 *)(wcerr + iVar2 + 8) = 1;
|
|
piVar1 = *(int **)(wcerr + iVar2 + 0x48);
|
|
*(undefined4 *)(wcerr + iVar2 + 0x48) = 0;
|
|
if ((wcerr[iVar2 + 0x14] & 1) == 0) {
|
|
if (piVar1 != (int *)0x0) {
|
|
(**(code **)(*piVar1 + 4))();
|
|
}
|
|
iVar2 = *(int *)(wclog._0_4_ + -0xc);
|
|
*(undefined4 *)(wclog + iVar2 + 8) = 1;
|
|
piVar1 = *(int **)(wclog + iVar2 + 0x48);
|
|
*(undefined4 *)(wclog + iVar2 + 0x48) = 0;
|
|
if ((wclog[iVar2 + 0x14] & 1) == 0) {
|
|
if (piVar1 != (int *)0x0) {
|
|
(**(code **)(*piVar1 + 4))();
|
|
}
|
|
(**(code **)wcin._0_4_)();
|
|
(**(code **)wcout._0_4_)();
|
|
(**(code **)wcerr._0_4_)();
|
|
(**(code **)wclog._0_4_)();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
_M_throw_failure();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000333c0 @ 000333c0
|
|
|
|
int * FUN_000333c0(int param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
int *piVar5;
|
|
|
|
piVar3 = (int *)operator_new(0x7c);
|
|
iVar4 = FUN_0003469c();
|
|
std::_Filebuf_base::_M_open(iVar4 + 0x20,(int)*(short *)(param_1 + 0xe));
|
|
piVar5 = (int *)(uint)*(byte *)(piVar3 + 10);
|
|
piVar1 = piVar5;
|
|
piVar2 = piVar3;
|
|
if ((piVar5 != (int *)0x0) && (piVar2 = (int *)0x0, piVar5 != (int *)0x0)) {
|
|
piVar1 = piVar3;
|
|
piVar2 = (int *)0x0;
|
|
}
|
|
if (piVar5 == (int *)0x0) {
|
|
(**(code **)(*piVar2 + 4))(piVar2);
|
|
}
|
|
return piVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033432 @ 00033432
|
|
|
|
int * FUN_00033432(int param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
int *piVar5;
|
|
|
|
piVar3 = (int *)operator_new(0x94);
|
|
iVar4 = FUN_000337bc();
|
|
std::_Filebuf_base::_M_open(iVar4 + 0x20,(int)*(short *)(param_1 + 0xe));
|
|
piVar5 = (int *)(uint)*(byte *)(piVar3 + 10);
|
|
piVar1 = piVar5;
|
|
piVar2 = piVar3;
|
|
if ((piVar5 != (int *)0x0) && (piVar2 = (int *)0x0, piVar5 != (int *)0x0)) {
|
|
piVar1 = piVar3;
|
|
piVar2 = (int *)0x0;
|
|
}
|
|
if (piVar5 == (int *)0x0) {
|
|
(**(code **)(*piVar2 + 4))(piVar2);
|
|
}
|
|
return piVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC sync_with_stdio @ 000334a4
|
|
|
|
/* std::ios_base::sync_with_stdio(bool) */
|
|
|
|
undefined1 std::ios_base::sync_with_stdio(bool param_1)
|
|
|
|
{
|
|
char cVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
int *piVar5;
|
|
int *piVar6;
|
|
int iVar7;
|
|
|
|
cVar1 = _S_is_synced;
|
|
if ((param_1 != (bool)_S_is_synced) && (cVar1 = param_1, Init::_S_count != 0)) {
|
|
if (param_1) {
|
|
piVar2 = (int *)operator_new(0x24);
|
|
FUN_0004ec64(piVar2,&__sF);
|
|
*piVar2 = (int)&DAT_00069e3c;
|
|
piVar3 = (int *)operator_new(0x24);
|
|
FUN_0004ec64(piVar3,pthread_key_create);
|
|
*piVar3 = (int)&DAT_00069e98;
|
|
piVar4 = (int *)operator_new(0x24);
|
|
FUN_0004ec64(piVar4,isupper);
|
|
*piVar4 = (int)&DAT_00069e98;
|
|
piVar5 = (int *)operator_new(0x24);
|
|
FUN_0004ec64(piVar5,isupper);
|
|
*piVar5 = (int)&DAT_00069e98;
|
|
}
|
|
else {
|
|
piVar2 = (int *)FUN_000333c0(&__sF,8);
|
|
piVar3 = (int *)FUN_000333c0(pthread_key_create,0x10);
|
|
piVar4 = (int *)FUN_000333c0(isupper,0x10);
|
|
piVar5 = (int *)FUN_000333c0(isupper,0x10);
|
|
}
|
|
if ((((piVar2 == (int *)0x0) || (piVar3 == (int *)0x0)) || (piVar4 == (int *)0x0)) ||
|
|
(piVar5 == (int *)0x0)) {
|
|
param_1 = _S_is_synced != '\0';
|
|
if (piVar5 != (int *)0x0) {
|
|
(**(code **)(*piVar5 + 4))();
|
|
}
|
|
if (piVar4 != (int *)0x0) {
|
|
(**(code **)(*piVar4 + 4))(piVar4);
|
|
}
|
|
if (piVar3 != (int *)0x0) {
|
|
(**(code **)(*piVar3 + 4))(piVar3);
|
|
}
|
|
cVar1 = _S_is_synced;
|
|
if (piVar2 != (int *)0x0) {
|
|
(**(code **)(*piVar2 + 4))();
|
|
cVar1 = _S_is_synced;
|
|
}
|
|
}
|
|
else {
|
|
iVar7 = *(int *)(cin._0_4_ + -0xc);
|
|
*(undefined4 *)(cin + iVar7 + 8) = 0;
|
|
piVar6 = *(int **)(cin + iVar7 + 0x48);
|
|
*(int **)(cin + iVar7 + 0x48) = piVar2;
|
|
if (piVar6 != (int *)0x0) {
|
|
(**(code **)(*piVar6 + 4))();
|
|
}
|
|
iVar7 = *(int *)(cout._0_4_ + -0xc);
|
|
*(undefined4 *)(cout + iVar7 + 8) = 0;
|
|
piVar2 = *(int **)(cout + iVar7 + 0x48);
|
|
*(int **)(cout + iVar7 + 0x48) = piVar3;
|
|
if (piVar2 != (int *)0x0) {
|
|
(**(code **)(*piVar2 + 4))();
|
|
}
|
|
iVar7 = *(int *)(cerr._0_4_ + -0xc);
|
|
*(undefined4 *)(cerr + iVar7 + 8) = 0;
|
|
piVar2 = *(int **)(cerr + iVar7 + 0x48);
|
|
*(int **)(cerr + iVar7 + 0x48) = piVar4;
|
|
if (piVar2 != (int *)0x0) {
|
|
(**(code **)(*piVar2 + 4))();
|
|
}
|
|
iVar7 = *(int *)(clog._0_4_ + -0xc);
|
|
*(undefined4 *)(clog + iVar7 + 8) = 0;
|
|
piVar2 = *(int **)(clog + iVar7 + 0x48);
|
|
*(int **)(clog + iVar7 + 0x48) = piVar5;
|
|
cVar1 = param_1;
|
|
if (piVar2 != (int *)0x0) {
|
|
(**(code **)(*piVar2 + 4))();
|
|
cVar1 = param_1;
|
|
}
|
|
}
|
|
}
|
|
_S_is_synced = cVar1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000337bc @ 000337bc
|
|
|
|
undefined4 * FUN_000337bc(undefined4 *param_1)
|
|
|
|
{
|
|
locale alStack_18 [4];
|
|
|
|
param_1[6] = 0;
|
|
param_1[5] = 0;
|
|
param_1[4] = 0;
|
|
param_1[3] = 0;
|
|
param_1[2] = 0;
|
|
param_1[1] = 0;
|
|
*param_1 = &PTR_FUN_00034204_1_00069050;
|
|
std::locale::locale((locale *)(param_1 + 7));
|
|
*param_1 = &PTR_FUN_000338f0_1_00068ff8;
|
|
std::_Filebuf_base::_Filebuf_base((_Filebuf_base *)(param_1 + 8));
|
|
*(undefined1 *)((int)param_1 + 0x32) = 0;
|
|
*(undefined2 *)(param_1 + 0xc) = 0;
|
|
param_1[0xb] = 0;
|
|
__aeabi_memclr4(param_1 + 0xd,0x38);
|
|
param_1[0x1b] = 1;
|
|
param_1[0x1c] = 1;
|
|
std::locale::locale(alStack_18);
|
|
FUN_00033858(param_1,alStack_18,0);
|
|
std::locale::~locale(alStack_18);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033858 @ 00033858
|
|
|
|
void FUN_00033858(int param_1,locale *param_2,int param_3)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
undefined4 uVar5;
|
|
|
|
iVar2 = std::locale::_M_get_facet(param_2,(id *)&std::codecvt<wchar_t,char,mbstate_t>::id);
|
|
if (iVar2 != 0) {
|
|
piVar3 = (int *)std::locale::_M_use_facet
|
|
(param_2,(id *)&std::codecvt<wchar_t,char,mbstate_t>::id);
|
|
*(int **)(param_1 + 0x68) = piVar3;
|
|
iVar4 = (**(code **)(*piVar3 + 0x14))();
|
|
iVar2 = iVar4;
|
|
if (iVar4 < 2) {
|
|
iVar2 = 1;
|
|
}
|
|
*(int *)(param_1 + 0x6c) = iVar2;
|
|
uVar5 = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))();
|
|
*(bool *)(param_1 + 0x2c) = 0 < iVar4;
|
|
*(undefined4 *)(param_1 + 0x70) = uVar5;
|
|
uVar1 = (**(code **)(**(int **)(param_1 + 0x68) + 0x18))();
|
|
*(undefined1 *)(param_1 + 0x2d) = uVar1;
|
|
return;
|
|
}
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
*(undefined4 *)(param_1 + 0x6c) = 1;
|
|
*(undefined4 *)(param_1 + 0x70) = 1;
|
|
*(undefined2 *)(param_1 + 0x2c) = 0;
|
|
if (param_3 != 0) {
|
|
std::locale::_M_use_facet(param_2,(id *)&std::codecvt<wchar_t,char,mbstate_t>::id);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000338f0 @ 000338f0
|
|
|
|
undefined4 * FUN_000338f0(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_000338f0_1_00068ff8;
|
|
FUN_0003427a(param_1);
|
|
if (*(char *)((int)param_1 + 0x2e) != '\0') {
|
|
free((void *)param_1[0xd]);
|
|
}
|
|
free((void *)param_1[0xf]);
|
|
param_1[0xd] = 0;
|
|
param_1[0xe] = 0;
|
|
param_1[0xf] = 0;
|
|
param_1[0x10] = 0;
|
|
*param_1 = &PTR_FUN_00034204_1_00069050;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033960 @ 00033960
|
|
|
|
void FUN_00033960(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_000338f0_1_00068ff8;
|
|
FUN_0003427a(param_1);
|
|
if (*(char *)((int)param_1 + 0x2e) != '\0') {
|
|
free((void *)param_1[0xd]);
|
|
}
|
|
free((void *)param_1[0xf]);
|
|
param_1[0xd] = 0;
|
|
param_1[0xe] = 0;
|
|
param_1[0xf] = 0;
|
|
param_1[0x10] = 0;
|
|
*param_1 = &PTR_FUN_00034204_1_00069050;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000339d8 @ 000339d8
|
|
|
|
int FUN_000339d8(int param_1,int param_2,int param_3)
|
|
|
|
{
|
|
if ((((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) &&
|
|
(*(char *)(param_1 + 0x31) == '\0')) && (*(int *)(param_1 + 0x34) == 0)) {
|
|
if ((param_2 == 0) && (param_3 == 0)) {
|
|
param_2 = 0;
|
|
param_3 = 1;
|
|
}
|
|
else {
|
|
if (param_2 == 0) {
|
|
return param_1;
|
|
}
|
|
if (param_3 < 1) {
|
|
return param_1;
|
|
}
|
|
}
|
|
FUN_0003437c(param_1,param_2,param_3);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033a1c @ 00033a1c
|
|
|
|
int * FUN_00033a1c(int *param_1,int param_2,int param_3,int param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
char *pcVar4;
|
|
_Filebuf_base *p_Var5;
|
|
int *local_18;
|
|
|
|
if (*(char *)(param_2 + 0x28) == '\0') {
|
|
*param_1 = -1;
|
|
param_1[1] = 0;
|
|
return param_1;
|
|
}
|
|
if ((param_3 != 0) && (*(char *)(param_2 + 0x2c) == '\0')) {
|
|
*param_1 = -1;
|
|
param_1[1] = 0;
|
|
return param_1 + 2;
|
|
}
|
|
iVar1 = FUN_00034400(param_2,param_4 != 2 || param_3 != 0);
|
|
if (iVar1 != 0) {
|
|
if ((param_4 == 4) || (param_4 == 1)) {
|
|
iVar1 = std::_Filebuf_base::_M_seek
|
|
((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3,
|
|
param_4);
|
|
piVar2 = (int *)(iVar1 + 1);
|
|
if (piVar2 != (int *)0x0) {
|
|
if (*(char *)(param_2 + 0x2f) != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54),
|
|
*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*(undefined1 *)(param_2 + 0x2f) = 0;
|
|
}
|
|
piVar2 = (int *)0x0;
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*(undefined1 *)(param_2 + 0x2f) = 0;
|
|
}
|
|
LAB_00033ad4:
|
|
*param_1 = iVar1;
|
|
param_1[1] = 0;
|
|
return piVar2;
|
|
}
|
|
pcVar4 = (char *)(param_2 + 0x2f);
|
|
if (*(char *)(param_2 + 0x2f) == '\0') {
|
|
iVar1 = std::_Filebuf_base::_M_seek
|
|
((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3,
|
|
param_4);
|
|
piVar2 = (int *)(iVar1 + 1);
|
|
if (piVar2 != (int *)0x0) {
|
|
if (*pcVar4 != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54),
|
|
*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*pcVar4 = '\0';
|
|
}
|
|
piVar2 = (int *)0x0;
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*pcVar4 = '\0';
|
|
}
|
|
goto LAB_00033ad4;
|
|
}
|
|
if (*(int *)(param_2 + 0x54) != 0) {
|
|
iVar1 = *(int *)(param_2 + 0x58) - (*(int *)(param_2 + 8) - *(int *)(param_2 + 0x54) >> 2);
|
|
p_Var5 = (_Filebuf_base *)(param_2 + 0x20);
|
|
if (param_3 != 0) {
|
|
iVar1 = std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2);
|
|
piVar2 = (int *)(iVar1 + 1);
|
|
if (piVar2 != (int *)0x0) {
|
|
if (*pcVar4 != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
(p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*pcVar4 = '\0';
|
|
}
|
|
piVar2 = (int *)0x0;
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*pcVar4 = '\0';
|
|
}
|
|
*param_1 = iVar1;
|
|
param_1[1] = 0;
|
|
return piVar2;
|
|
}
|
|
iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2);
|
|
piVar2 = (int *)(iVar3 - iVar1);
|
|
LAB_00033c42:
|
|
*param_1 = (int)piVar2;
|
|
param_1[1] = 0;
|
|
return piVar2;
|
|
}
|
|
if (*(char *)(param_2 + 0x2c) == '\0') {
|
|
local_18 = *(int **)(param_2 + 0x4c);
|
|
iVar1 = (**(code **)(**(int **)(param_2 + 0x68) + 0x1c))
|
|
(*(int **)(param_2 + 0x68),&local_18,*(undefined4 *)(param_2 + 0x3c),
|
|
*(undefined4 *)(param_2 + 0x44),
|
|
*(int *)(param_2 + 8) - *(int *)(param_2 + 4) >> 2);
|
|
iVar3 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),0,2);
|
|
piVar2 = local_18;
|
|
if ((iVar3 != -1) &&
|
|
(iVar1 = ((iVar3 + iVar1) - *(int *)(param_2 + 0x48)) + *(int *)(param_2 + 0x3c),
|
|
-1 < iVar1)) {
|
|
if (param_3 != 0) {
|
|
if (*pcVar4 != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54),
|
|
*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*pcVar4 = '\0';
|
|
}
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*pcVar4 = '\0';
|
|
*param_1 = iVar1;
|
|
param_1[1] = (int)piVar2;
|
|
return piVar2;
|
|
}
|
|
*param_1 = iVar1;
|
|
goto LAB_00033cf0;
|
|
}
|
|
}
|
|
else {
|
|
iVar1 = (*(int *)(param_2 + 8) - *(int *)(param_2 + 4) >> 2) * *(int *)(param_2 + 0x6c);
|
|
iVar3 = *(int *)(param_2 + 0x48) - *(int *)(param_2 + 0x3c);
|
|
if (iVar1 - iVar3 == 0 || iVar1 < iVar3) {
|
|
iVar1 = *(int *)(param_2 + 0x48) - (*(int *)(param_2 + 0x3c) + iVar1);
|
|
p_Var5 = (_Filebuf_base *)(param_2 + 0x20);
|
|
if (param_3 != 0) {
|
|
piVar2 = (int *)std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2);
|
|
if (piVar2 != (int *)0xffffffff) {
|
|
if (*pcVar4 != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
(p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*pcVar4 = '\0';
|
|
}
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*pcVar4 = '\0';
|
|
}
|
|
*param_1 = (int)piVar2;
|
|
param_1[1] = 0;
|
|
return piVar2;
|
|
}
|
|
iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2);
|
|
piVar2 = (int *)(iVar3 - iVar1);
|
|
goto LAB_00033c42;
|
|
}
|
|
}
|
|
}
|
|
*param_1 = -1;
|
|
LAB_00033cf0:
|
|
param_1[1] = 0;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033d10 @ 00033d10
|
|
|
|
int * FUN_00033d10(int *param_1,int param_2,int param_3,int param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
if (((*(char *)(param_2 + 0x28) == '\0') || (iVar1 = FUN_00034400(param_2,1), param_3 == -1)) ||
|
|
(iVar1 != 1)) {
|
|
iVar3 = 0;
|
|
iVar1 = -1;
|
|
}
|
|
else {
|
|
iVar2 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),param_3,1);
|
|
iVar1 = -1;
|
|
iVar3 = 0;
|
|
if (iVar2 != -1) {
|
|
*(int *)(param_2 + 0x4c) = param_4;
|
|
if (*(char *)(param_2 + 0x2f) != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54),
|
|
*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*(undefined1 *)(param_2 + 0x2f) = 0;
|
|
}
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*(undefined1 *)(param_2 + 0x2f) = 0;
|
|
iVar1 = param_3;
|
|
iVar3 = param_4;
|
|
}
|
|
}
|
|
*param_1 = iVar1;
|
|
param_1[1] = iVar3;
|
|
return param_1 + 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033db4 @ 00033db4
|
|
|
|
undefined4 FUN_00033db4(int *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
uVar2 = 0;
|
|
if ((char)param_1[0xc] != '\0') {
|
|
uVar2 = 0;
|
|
iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);
|
|
if (iVar1 == -1) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033dd6 @ 00033dd6
|
|
|
|
int FUN_00033dd6(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
undefined4 uStack_1c;
|
|
|
|
uStack_1c = -1;
|
|
if (((*(char *)(param_1 + 0x28) != '\0') && (*(char *)(param_1 + 0x30) == '\0')) &&
|
|
(*(char *)(param_1 + 0x31) == '\0')) {
|
|
if (*(char *)(param_1 + 0x32) != '\0') {
|
|
return *(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2;
|
|
}
|
|
uStack_1c = 0;
|
|
if (*(char *)(param_1 + 0x2c) != '\0') {
|
|
iVar1 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_1 + 0x20),0,2);
|
|
iVar2 = std::_Filebuf_base::_M_file_size((_Filebuf_base *)(param_1 + 0x20));
|
|
uStack_1c = iVar2 - iVar1;
|
|
if (iVar2 <= iVar1) {
|
|
uStack_1c = 0;
|
|
}
|
|
if (iVar1 < 0) {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
return uStack_1c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033e48 @ 00033e48
|
|
|
|
int FUN_00033e48(int *param_1,wchar_t *param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
wchar_t wVar2;
|
|
wchar_t *__s2;
|
|
int iVar3;
|
|
uint __n;
|
|
|
|
iVar3 = 0;
|
|
if (0 < param_3) {
|
|
iVar3 = 0;
|
|
do {
|
|
__s2 = (wchar_t *)param_1[2];
|
|
if (__s2 < (wchar_t *)param_1[3]) {
|
|
uVar1 = param_1[3] - (int)__s2 >> 2;
|
|
__n = param_3 - iVar3;
|
|
if (uVar1 <= (uint)(param_3 - iVar3)) {
|
|
__n = uVar1;
|
|
}
|
|
wmemcpy(param_2,__s2,__n);
|
|
param_1[2] = param_1[2] + __n * 4;
|
|
iVar3 = __n + iVar3;
|
|
param_2 = param_2 + __n;
|
|
}
|
|
else {
|
|
wVar2 = (**(code **)(*param_1 + 0x24))(param_1);
|
|
if (wVar2 == L'\xffffffff') {
|
|
return iVar3;
|
|
}
|
|
*param_2 = wVar2;
|
|
param_2 = param_2 + 1;
|
|
iVar3 = iVar3 + 1;
|
|
}
|
|
} while (iVar3 < param_3);
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033eae @ 00033eae
|
|
|
|
void FUN_00033eae(void)
|
|
|
|
{
|
|
FUN_000344d4();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033eb8 @ 00033eb8
|
|
|
|
undefined4 FUN_00033eb8(int *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined4 *puVar3;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x20))(param_1);
|
|
uVar2 = 0xffffffff;
|
|
if (iVar1 != -1) {
|
|
puVar3 = (undefined4 *)param_1[2];
|
|
param_1[2] = (int)(puVar3 + 1);
|
|
uVar2 = *puVar3;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033eda @ 00033eda
|
|
|
|
int FUN_00033eda(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
|
|
if (*(char *)(param_1 + 0x2f) == '\0') {
|
|
return -1;
|
|
}
|
|
iVar1 = *(int *)(param_1 + 4);
|
|
iVar3 = *(int *)(param_1 + 8);
|
|
if (iVar3 == iVar1) {
|
|
if (param_2 == -1) {
|
|
return -1;
|
|
}
|
|
}
|
|
else {
|
|
piVar2 = (int *)(iVar3 + -4);
|
|
if (param_2 == -1) {
|
|
*(int **)(param_1 + 8) = piVar2;
|
|
return *piVar2;
|
|
}
|
|
if (*piVar2 == param_2) {
|
|
*(int **)(param_1 + 8) = piVar2;
|
|
return param_2;
|
|
}
|
|
if (*(int *)(param_1 + 0x54) == 0) {
|
|
*(int **)(param_1 + 8) = piVar2;
|
|
goto LAB_00033f60;
|
|
}
|
|
}
|
|
if (*(char *)(param_1 + 0x32) == '\0') {
|
|
*(int *)(param_1 + 0x5c) = iVar1;
|
|
*(int *)(param_1 + 0x60) = iVar3;
|
|
*(undefined4 *)(param_1 + 100) = *(undefined4 *)(param_1 + 0xc);
|
|
piVar2 = (int *)(param_1 + 0x90);
|
|
*(int **)(param_1 + 4) = piVar2;
|
|
*(int **)(param_1 + 8) = piVar2;
|
|
*(int *)(param_1 + 0xc) = param_1 + 0x94;
|
|
*(undefined1 *)(param_1 + 0x32) = 1;
|
|
}
|
|
else {
|
|
if (iVar1 == param_1 + 0x74) {
|
|
return -1;
|
|
}
|
|
piVar2 = (int *)(*(int *)(param_1 + 0xc) + -4);
|
|
*(int **)(param_1 + 4) = piVar2;
|
|
*(int **)(param_1 + 8) = piVar2;
|
|
*(int *)(param_1 + 0xc) = param_1 + 0x94;
|
|
}
|
|
LAB_00033f60:
|
|
*piVar2 = param_2;
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033f68 @ 00033f68
|
|
|
|
int FUN_00033f68(int *param_1,wchar_t *param_2,int param_3)
|
|
|
|
{
|
|
wchar_t *__s1;
|
|
int iVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
uint __n;
|
|
|
|
iVar3 = 0;
|
|
if (0 < param_3) {
|
|
iVar3 = 0;
|
|
do {
|
|
while( true ) {
|
|
__s1 = (wchar_t *)param_1[5];
|
|
if ((wchar_t *)param_1[6] <= __s1) break;
|
|
uVar2 = param_1[6] - (int)__s1 >> 2;
|
|
__n = param_3 - iVar3;
|
|
if (uVar2 <= (uint)(param_3 - iVar3)) {
|
|
__n = uVar2;
|
|
}
|
|
wmemcpy(__s1,param_2,__n);
|
|
param_1[5] = param_1[5] + __n * 4;
|
|
iVar3 = __n + iVar3;
|
|
param_2 = param_2 + __n;
|
|
if (param_3 <= iVar3) {
|
|
return iVar3;
|
|
}
|
|
}
|
|
iVar1 = (**(code **)(*param_1 + 0x34))(param_1,*param_2);
|
|
if (iVar1 == -1) {
|
|
return iVar3;
|
|
}
|
|
param_2 = param_2 + 1;
|
|
iVar3 = iVar3 + 1;
|
|
} while (iVar3 < param_3);
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00033fd8 @ 00033fd8
|
|
|
|
int FUN_00033fd8(int *param_1,wchar_t param_2,int param_3)
|
|
|
|
{
|
|
wchar_t *__s;
|
|
int iVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
uint __n;
|
|
|
|
iVar3 = 0;
|
|
if (0 < param_3) {
|
|
iVar3 = 0;
|
|
do {
|
|
while( true ) {
|
|
__s = (wchar_t *)param_1[5];
|
|
if (__s < (wchar_t *)param_1[6]) break;
|
|
iVar1 = (**(code **)(*param_1 + 0x34))(param_1,param_2);
|
|
if (iVar1 == -1) {
|
|
return iVar3;
|
|
}
|
|
iVar3 = iVar3 + 1;
|
|
if (param_3 <= iVar3) {
|
|
return iVar3;
|
|
}
|
|
}
|
|
uVar2 = param_1[6] - (int)__s >> 2;
|
|
__n = param_3 - iVar3;
|
|
if (uVar2 <= (uint)(param_3 - iVar3)) {
|
|
__n = uVar2;
|
|
}
|
|
wmemset(__s,param_2,__n);
|
|
param_1[5] = param_1[5] + __n * 4;
|
|
iVar3 = __n + iVar3;
|
|
} while (iVar3 < param_3);
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034038 @ 00034038
|
|
|
|
int FUN_00034038(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
int extraout_r1;
|
|
char *pcVar3;
|
|
int *piVar4;
|
|
int *piVar5;
|
|
int local_1c;
|
|
int *local_18;
|
|
|
|
if (*(char *)(param_1 + 0x30) == '\0') {
|
|
if (*(char *)(param_1 + 0x28) == '\0') {
|
|
return -1;
|
|
}
|
|
uVar2 = *(uint *)(param_1 + 0x24);
|
|
if ((uVar2 & 0x10) == 0) {
|
|
return -1;
|
|
}
|
|
if (*(char *)(param_1 + 0x2f) != '\0') {
|
|
return -1;
|
|
}
|
|
if (*(char *)(param_1 + 0x31) != '\0') {
|
|
return -1;
|
|
}
|
|
if (*(int *)(param_1 + 0x34) == 0) {
|
|
iVar1 = std::_Filebuf_base::_M_page_size + 0xfff;
|
|
__aeabi_uidivmod(iVar1);
|
|
iVar1 = FUN_0003437c(param_1,0,iVar1 - extraout_r1);
|
|
if (iVar1 != 1) {
|
|
return -1;
|
|
}
|
|
uVar2 = *(uint *)(param_1 + 0x24);
|
|
}
|
|
if ((uVar2 & 1) != 0) {
|
|
*(undefined4 *)(param_1 + 0x4c) = 0;
|
|
}
|
|
piVar4 = *(int **)(param_1 + 0x34);
|
|
iVar1 = *(int *)(param_1 + 0x38);
|
|
*(int **)(param_1 + 0x10) = piVar4;
|
|
*(int **)(param_1 + 0x14) = piVar4;
|
|
*(int *)(param_1 + 0x18) = iVar1 + -4;
|
|
*(undefined1 *)(param_1 + 0x30) = 1;
|
|
piVar5 = piVar4;
|
|
}
|
|
else {
|
|
piVar4 = *(int **)(param_1 + 0x34);
|
|
iVar1 = *(int *)(param_1 + 0x38);
|
|
piVar5 = *(int **)(param_1 + 0x14);
|
|
}
|
|
*(int **)(param_1 + 0x10) = piVar4;
|
|
*(int **)(param_1 + 0x14) = piVar4;
|
|
*(int *)(param_1 + 0x18) = iVar1 + -4;
|
|
if (param_2 != -1) {
|
|
*piVar5 = param_2;
|
|
piVar5 = piVar5 + 1;
|
|
}
|
|
if (piVar4 != piVar5) {
|
|
do {
|
|
local_1c = *(int *)(param_1 + 0x3c);
|
|
local_18 = piVar4;
|
|
uVar2 = (**(code **)(**(int **)(param_1 + 0x68) + 8))
|
|
(*(int **)(param_1 + 0x68),param_1 + 0x4c,piVar4,piVar5,&local_18,local_1c,
|
|
*(undefined4 *)(param_1 + 0x40),&local_1c);
|
|
if ((uVar2 & 0xfffffffe) == 2) {
|
|
LAB_000341b4:
|
|
*(undefined1 *)(param_1 + 0x30) = 0;
|
|
*(undefined1 *)(param_1 + 0x31) = 1;
|
|
*(undefined1 *)(param_1 + 0x2f) = 0;
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
*(undefined4 *)(param_1 + 0x18) = 0;
|
|
return -1;
|
|
}
|
|
if ((local_18 != piVar5) ||
|
|
(pcVar3 = *(char **)(param_1 + 0x3c),
|
|
local_1c - (int)pcVar3 != ((int)piVar5 - (int)piVar4 >> 2) * *(int *)(param_1 + 0x6c))) {
|
|
if ((*(char *)(param_1 + 0x2c) != '\0') || (local_18 == piVar4)) goto LAB_000341b4;
|
|
pcVar3 = *(char **)(param_1 + 0x3c);
|
|
}
|
|
iVar1 = std::_Filebuf_base::_M_write
|
|
((_Filebuf_base *)(param_1 + 0x20),pcVar3,local_1c - (int)pcVar3);
|
|
if (iVar1 != 1) goto LAB_000341b4;
|
|
piVar4 = local_18;
|
|
} while (local_18 != piVar5);
|
|
}
|
|
iVar1 = 0;
|
|
if (param_2 != -1) {
|
|
iVar1 = param_2;
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000341dc @ 000341dc
|
|
|
|
void FUN_000341dc(int param_1,undefined4 param_2)
|
|
|
|
{
|
|
if (((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) &&
|
|
(*(char *)(param_1 + 0x31) == '\0')) {
|
|
FUN_00033858(param_1,param_2,1);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034204 @ 00034204
|
|
|
|
undefined4 * FUN_00034204(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_00034204_1_00069050;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034224 @ 00034224
|
|
|
|
void FUN_00034224(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_00034204_1_00069050;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003427a @ 0003427a
|
|
|
|
int * FUN_0003427a(int *param_1)
|
|
|
|
{
|
|
char cVar1;
|
|
bool bVar2;
|
|
bool bVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
char *pcVar6;
|
|
char *local_18;
|
|
|
|
cVar1 = (char)param_1[10];
|
|
if ((char)param_1[0xc] == '\0') {
|
|
bVar2 = cVar1 != '\0';
|
|
if (*(char *)((int)param_1 + 0x2f) != '\0') {
|
|
if ((void *)param_1[0x15] != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_1 + 8),(void *)param_1[0x15],param_1[0x16]);
|
|
param_1[0x15] = 0;
|
|
param_1[0x16] = 0;
|
|
}
|
|
*(undefined1 *)((int)param_1 + 0x2f) = 0;
|
|
}
|
|
}
|
|
else {
|
|
bVar2 = false;
|
|
if (cVar1 != '\0') {
|
|
iVar4 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);
|
|
bVar2 = false;
|
|
if (((iVar4 != -1) && (bVar2 = true, (char)param_1[0xc] != '\0')) &&
|
|
((char)param_1[0xb] == '\0')) {
|
|
bVar3 = true;
|
|
while( true ) {
|
|
local_18 = (char *)param_1[0xf];
|
|
iVar4 = (**(code **)(*(int *)param_1[0x1a] + 0x10))
|
|
((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18);
|
|
bVar2 = bVar3;
|
|
if (((iVar4 == 3) || ((pcVar6 = (char *)param_1[0xf], iVar4 == 0 && (local_18 == pcVar6)))
|
|
) || (bVar2 = false, iVar4 == 2)) break;
|
|
iVar5 = std::_Filebuf_base::_M_write
|
|
((_Filebuf_base *)(param_1 + 8),pcVar6,(int)local_18 - (int)pcVar6);
|
|
if ((iVar5 != 1) || (bVar2 = bVar3, iVar4 != 1)) break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
iVar4 = std::_Filebuf_base::_M_close((_Filebuf_base *)(param_1 + 8));
|
|
*(undefined1 *)((int)param_1 + 0x32) = 0;
|
|
*(undefined1 *)((int)param_1 + 0x31) = 0;
|
|
*(undefined1 *)(param_1 + 0xc) = 0;
|
|
*(undefined1 *)((int)param_1 + 0x2f) = 0;
|
|
param_1[1] = 0;
|
|
param_1[2] = 0;
|
|
param_1[3] = 0;
|
|
param_1[4] = 0;
|
|
param_1[5] = 0;
|
|
param_1[6] = 0;
|
|
__aeabi_memclr4(param_1 + 0x11,0x24);
|
|
if (iVar4 == 0) {
|
|
param_1 = (int *)0x0;
|
|
}
|
|
if (!bVar2) {
|
|
param_1 = (int *)0x0;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003437c @ 0003437c
|
|
|
|
undefined4 FUN_0003437c(int param_1,int param_2,int param_3)
|
|
|
|
{
|
|
size_t __size;
|
|
void *pvVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
undefined1 uVar4;
|
|
size_t sVar5;
|
|
|
|
if (param_2 == 0) {
|
|
pvVar1 = malloc(param_3 << 2);
|
|
*(void **)(param_1 + 0x34) = pvVar1;
|
|
uVar4 = 1;
|
|
if (pvVar1 == (void *)0x0) {
|
|
return 0;
|
|
}
|
|
}
|
|
else {
|
|
*(int *)(param_1 + 0x34) = param_2;
|
|
uVar4 = 0;
|
|
}
|
|
*(undefined1 *)(param_1 + 0x2e) = uVar4;
|
|
sVar5 = param_3 * *(int *)(param_1 + 0x6c);
|
|
__size = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))();
|
|
if ((int)__size <= (int)sVar5) {
|
|
__size = sVar5;
|
|
}
|
|
pvVar1 = malloc(__size);
|
|
*(void **)(param_1 + 0x3c) = pvVar1;
|
|
if (pvVar1 == (void *)0x0) {
|
|
pvVar1 = (void *)0x0;
|
|
if (*(char *)(param_1 + 0x2e) != '\0') {
|
|
free(*(void **)(param_1 + 0x34));
|
|
pvVar1 = *(void **)(param_1 + 0x3c);
|
|
}
|
|
free(pvVar1);
|
|
iVar3 = 0;
|
|
*(undefined4 *)(param_1 + 0x34) = 0;
|
|
*(undefined4 *)(param_1 + 0x38) = 0;
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
uVar2 = 0;
|
|
}
|
|
else {
|
|
*(int *)(param_1 + 0x38) = *(int *)(param_1 + 0x34) + param_3 * 4;
|
|
iVar3 = (int)pvVar1 + __size;
|
|
uVar2 = 1;
|
|
}
|
|
*(int *)(param_1 + 0x40) = iVar3;
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034400 @ 00034400
|
|
|
|
undefined4 FUN_00034400(int *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
char *pcVar3;
|
|
char *local_18;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x31) = 0;
|
|
if ((char)param_1[0xc] != '\0') {
|
|
iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);
|
|
if (param_2 == 1) {
|
|
if (iVar1 == -1) {
|
|
LAB_000344be:
|
|
*(char *)(param_1 + 0xc) = '\0';
|
|
*(undefined1 *)((int)param_1 + 0x31) = 1;
|
|
param_1[4] = 0;
|
|
param_1[5] = 0;
|
|
param_1[6] = 0;
|
|
return 0;
|
|
}
|
|
if (((char)param_1[0xc] != '\0') && ((char)param_1[0xb] == '\0')) {
|
|
do {
|
|
local_18 = (char *)param_1[0xf];
|
|
iVar1 = (**(code **)(*(int *)param_1[0x1a] + 0x10))
|
|
((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18);
|
|
if ((iVar1 == 3) || ((pcVar3 = (char *)param_1[0xf], iVar1 == 0 && (local_18 == pcVar3))))
|
|
break;
|
|
if ((iVar1 == 2) ||
|
|
(iVar2 = std::_Filebuf_base::_M_write
|
|
((_Filebuf_base *)(param_1 + 8),pcVar3,(int)local_18 - (int)pcVar3),
|
|
iVar2 != 1)) goto LAB_000344be;
|
|
} while (iVar1 == 1);
|
|
}
|
|
}
|
|
else if (iVar1 == -1) goto LAB_000344be;
|
|
}
|
|
if ((*(char *)((int)param_1 + 0x2f) != '\0') && (*(char *)((int)param_1 + 0x32) != '\0')) {
|
|
param_1[1] = param_1[0x17];
|
|
param_1[2] = param_1[0x18];
|
|
param_1[3] = param_1[0x19];
|
|
*(undefined1 *)((int)param_1 + 0x32) = 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000344d4 @ 000344d4
|
|
|
|
undefined4 FUN_000344d4(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined4 *puVar3;
|
|
int extraout_r1;
|
|
|
|
if (*(char *)(param_1 + 0x2f) == '\0') {
|
|
if (*(char *)(param_1 + 0x28) == '\0') {
|
|
return 0xffffffff;
|
|
}
|
|
if (-1 < (int)((uint)*(byte *)(param_1 + 0x24) << 0x1c)) {
|
|
return 0xffffffff;
|
|
}
|
|
if (*(char *)(param_1 + 0x30) != '\0') {
|
|
return 0xffffffff;
|
|
}
|
|
if (*(char *)(param_1 + 0x31) != '\0') {
|
|
return 0xffffffff;
|
|
}
|
|
if (*(int *)(param_1 + 0x34) == 0) {
|
|
iVar1 = std::_Filebuf_base::_M_page_size + 0xfff;
|
|
__aeabi_uidivmod();
|
|
iVar1 = FUN_0003437c(param_1,0,iVar1 - extraout_r1);
|
|
if (iVar1 != 1) {
|
|
return 0xffffffff;
|
|
}
|
|
}
|
|
*(undefined4 *)(param_1 + 0x44) = *(undefined4 *)(param_1 + 0x3c);
|
|
*(undefined4 *)(param_1 + 0x48) = *(undefined4 *)(param_1 + 0x3c);
|
|
*(undefined4 *)(param_1 + 0x50) = *(undefined4 *)(param_1 + 0x4c);
|
|
*(undefined1 *)(param_1 + 0x2f) = 1;
|
|
}
|
|
else if (*(char *)(param_1 + 0x32) != '\0') {
|
|
puVar3 = *(undefined4 **)(param_1 + 0x60);
|
|
*(undefined4 *)(param_1 + 4) = *(undefined4 *)(param_1 + 0x5c);
|
|
*(undefined4 **)(param_1 + 8) = puVar3;
|
|
*(undefined4 **)(param_1 + 0xc) = *(undefined4 **)(param_1 + 100);
|
|
*(undefined1 *)(param_1 + 0x32) = 0;
|
|
if (puVar3 != *(undefined4 **)(param_1 + 100)) {
|
|
return *puVar3;
|
|
}
|
|
}
|
|
uVar2 = FUN_0003457c(param_1);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003457c @ 0003457c
|
|
|
|
undefined4 FUN_0003457c(int param_1)
|
|
|
|
{
|
|
_Filebuf_base *this;
|
|
undefined4 *puVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
char *pcVar5;
|
|
undefined4 *local_1c;
|
|
int local_18;
|
|
|
|
*(undefined4 *)(param_1 + 0x4c) = *(undefined4 *)(param_1 + 0x50);
|
|
pcVar5 = *(char **)(param_1 + 0x3c);
|
|
uVar2 = *(uint *)(param_1 + 0x44);
|
|
if ((uVar2 < *(uint *)(param_1 + 0x48)) && (iVar4 = *(uint *)(param_1 + 0x48) - uVar2, iVar4 != 0)
|
|
) {
|
|
__aeabi_memmove(pcVar5,uVar2,iVar4);
|
|
pcVar5 = pcVar5 + iVar4;
|
|
}
|
|
*(char **)(param_1 + 0x48) = pcVar5;
|
|
this = (_Filebuf_base *)(param_1 + 0x20);
|
|
iVar4 = std::_Filebuf_base::_M_read(this,pcVar5,*(int *)(param_1 + 0x40) - (int)pcVar5);
|
|
if (-1 < iVar4) {
|
|
while( true ) {
|
|
iVar3 = *(int *)(param_1 + 0x48) + iVar4;
|
|
*(int *)(param_1 + 0x48) = iVar3;
|
|
if (*(int *)(param_1 + 0x3c) == iVar3) break;
|
|
iVar3 = (**(code **)(**(int **)(param_1 + 0x68) + 0xc))
|
|
(*(int **)(param_1 + 0x68),param_1 + 0x50,*(int *)(param_1 + 0x3c),iVar3,
|
|
&local_18,*(undefined4 *)(param_1 + 0x34),*(undefined4 *)(param_1 + 0x38),
|
|
&local_1c);
|
|
if (iVar3 == 2) {
|
|
LAB_0003465e:
|
|
if (*(void **)(param_1 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap(this,*(void **)(param_1 + 0x54),*(long *)(param_1 + 0x58));
|
|
*(undefined4 *)(param_1 + 0x54) = 0;
|
|
*(undefined4 *)(param_1 + 0x58) = 0;
|
|
}
|
|
*(undefined1 *)(param_1 + 0x30) = 0;
|
|
*(undefined1 *)(param_1 + 0x2f) = 0;
|
|
*(undefined1 *)(param_1 + 0x31) = 1;
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
return 0xffffffff;
|
|
}
|
|
if (iVar3 == 3) {
|
|
return 0xffffffff;
|
|
}
|
|
puVar1 = *(undefined4 **)(param_1 + 0x34);
|
|
if (((local_1c != puVar1) && (local_18 == *(int *)(param_1 + 0x3c))) ||
|
|
((*(char *)(param_1 + 0x2c) != '\0' &&
|
|
(((int)local_1c - (int)puVar1 >> 2) * *(int *)(param_1 + 0x6c) -
|
|
(local_18 - *(int *)(param_1 + 0x3c)) != 0)))) goto LAB_0003465e;
|
|
if (local_1c != puVar1) {
|
|
*(int *)(param_1 + 0x44) = local_18;
|
|
*(undefined4 **)(param_1 + 4) = puVar1;
|
|
*(undefined4 **)(param_1 + 8) = puVar1;
|
|
*(undefined4 **)(param_1 + 0xc) = local_1c;
|
|
return *puVar1;
|
|
}
|
|
if (*(int *)(param_1 + 0x70) <= local_18 - *(int *)(param_1 + 0x3c)) goto LAB_0003465e;
|
|
if ((iVar4 < 1) ||
|
|
(iVar4 = std::_Filebuf_base::_M_read
|
|
(this,*(char **)(param_1 + 0x48),
|
|
*(int *)(param_1 + 0x40) - (int)*(char **)(param_1 + 0x48)), iVar4 < 0)
|
|
) break;
|
|
}
|
|
}
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003469c @ 0003469c
|
|
|
|
undefined4 * FUN_0003469c(undefined4 *param_1)
|
|
|
|
{
|
|
locale alStack_18 [4];
|
|
|
|
param_1[6] = 0;
|
|
param_1[5] = 0;
|
|
param_1[4] = 0;
|
|
param_1[3] = 0;
|
|
param_1[2] = 0;
|
|
param_1[1] = 0;
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::locale((locale *)(param_1 + 7));
|
|
*param_1 = &PTR_FUN_000347d0_1_00069094;
|
|
std::_Filebuf_base::_Filebuf_base((_Filebuf_base *)(param_1 + 8));
|
|
*(undefined1 *)((int)param_1 + 0x32) = 0;
|
|
*(undefined2 *)(param_1 + 0xc) = 0;
|
|
param_1[0xb] = 0;
|
|
__aeabi_memclr4(param_1 + 0xd,0x38);
|
|
param_1[0x1b] = 1;
|
|
param_1[0x1c] = 1;
|
|
std::locale::locale(alStack_18);
|
|
FUN_00034738(param_1,alStack_18,0);
|
|
std::locale::~locale(alStack_18);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034738 @ 00034738
|
|
|
|
void FUN_00034738(int param_1,locale *param_2,int param_3)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
undefined4 uVar5;
|
|
|
|
iVar2 = std::locale::_M_get_facet(param_2,(id *)&std::codecvt<char,char,mbstate_t>::id);
|
|
if (iVar2 != 0) {
|
|
piVar3 = (int *)std::locale::_M_use_facet(param_2,(id *)&std::codecvt<char,char,mbstate_t>::id);
|
|
*(int **)(param_1 + 0x68) = piVar3;
|
|
iVar4 = (**(code **)(*piVar3 + 0x14))();
|
|
iVar2 = iVar4;
|
|
if (iVar4 < 2) {
|
|
iVar2 = 1;
|
|
}
|
|
*(int *)(param_1 + 0x6c) = iVar2;
|
|
uVar5 = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))();
|
|
*(bool *)(param_1 + 0x2c) = 0 < iVar4;
|
|
*(undefined4 *)(param_1 + 0x70) = uVar5;
|
|
uVar1 = (**(code **)(**(int **)(param_1 + 0x68) + 0x18))();
|
|
*(undefined1 *)(param_1 + 0x2d) = uVar1;
|
|
return;
|
|
}
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
*(undefined4 *)(param_1 + 0x6c) = 1;
|
|
*(undefined4 *)(param_1 + 0x70) = 1;
|
|
*(undefined2 *)(param_1 + 0x2c) = 0;
|
|
if (param_3 != 0) {
|
|
std::locale::_M_use_facet(param_2,(id *)&std::codecvt<char,char,mbstate_t>::id);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000347d0 @ 000347d0
|
|
|
|
undefined4 * FUN_000347d0(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_000347d0_1_00069094;
|
|
FUN_0003519e(param_1);
|
|
if (*(char *)((int)param_1 + 0x2e) != '\0') {
|
|
free((void *)param_1[0xd]);
|
|
}
|
|
free((void *)param_1[0xf]);
|
|
param_1[0xd] = 0;
|
|
param_1[0xe] = 0;
|
|
param_1[0xf] = 0;
|
|
param_1[0x10] = 0;
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034840 @ 00034840
|
|
|
|
void FUN_00034840(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_000347d0_1_00069094;
|
|
FUN_0003519e(param_1);
|
|
if (*(char *)((int)param_1 + 0x2e) != '\0') {
|
|
free((void *)param_1[0xd]);
|
|
}
|
|
free((void *)param_1[0xf]);
|
|
param_1[0xd] = 0;
|
|
param_1[0xe] = 0;
|
|
param_1[0xf] = 0;
|
|
param_1[0x10] = 0;
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000348b8 @ 000348b8
|
|
|
|
int FUN_000348b8(int param_1,int param_2,int param_3)
|
|
|
|
{
|
|
if ((((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) &&
|
|
(*(char *)(param_1 + 0x31) == '\0')) && (*(int *)(param_1 + 0x34) == 0)) {
|
|
if ((param_2 == 0) && (param_3 == 0)) {
|
|
param_2 = 0;
|
|
param_3 = 1;
|
|
}
|
|
else {
|
|
if (param_2 == 0) {
|
|
return param_1;
|
|
}
|
|
if (param_3 < 1) {
|
|
return param_1;
|
|
}
|
|
}
|
|
FUN_000352a0(param_1,param_2,param_3);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000348fc @ 000348fc
|
|
|
|
int * FUN_000348fc(int *param_1,int param_2,int param_3,int param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
char *pcVar4;
|
|
_Filebuf_base *p_Var5;
|
|
int *local_18;
|
|
|
|
if (*(char *)(param_2 + 0x28) == '\0') {
|
|
*param_1 = -1;
|
|
param_1[1] = 0;
|
|
return param_1;
|
|
}
|
|
if ((param_3 != 0) && (*(char *)(param_2 + 0x2c) == '\0')) {
|
|
*param_1 = -1;
|
|
param_1[1] = 0;
|
|
return param_1 + 2;
|
|
}
|
|
iVar1 = FUN_00035322(param_2,param_4 != 2 || param_3 != 0);
|
|
if (iVar1 != 0) {
|
|
if ((param_4 == 4) || (param_4 == 1)) {
|
|
iVar1 = std::_Filebuf_base::_M_seek
|
|
((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3,
|
|
param_4);
|
|
piVar2 = (int *)(iVar1 + 1);
|
|
if (piVar2 != (int *)0x0) {
|
|
if (*(char *)(param_2 + 0x2f) != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54),
|
|
*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*(undefined1 *)(param_2 + 0x2f) = 0;
|
|
}
|
|
piVar2 = (int *)0x0;
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*(undefined1 *)(param_2 + 0x2f) = 0;
|
|
}
|
|
LAB_000349b4:
|
|
*param_1 = iVar1;
|
|
param_1[1] = 0;
|
|
return piVar2;
|
|
}
|
|
pcVar4 = (char *)(param_2 + 0x2f);
|
|
if (*(char *)(param_2 + 0x2f) == '\0') {
|
|
iVar1 = std::_Filebuf_base::_M_seek
|
|
((_Filebuf_base *)(param_2 + 0x20),*(int *)(param_2 + 0x6c) * param_3,
|
|
param_4);
|
|
piVar2 = (int *)(iVar1 + 1);
|
|
if (piVar2 != (int *)0x0) {
|
|
if (*pcVar4 != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54),
|
|
*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*pcVar4 = '\0';
|
|
}
|
|
piVar2 = (int *)0x0;
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*pcVar4 = '\0';
|
|
}
|
|
goto LAB_000349b4;
|
|
}
|
|
if (*(int *)(param_2 + 0x54) != 0) {
|
|
iVar1 = (*(int *)(param_2 + 0x54) - *(int *)(param_2 + 8)) + *(int *)(param_2 + 0x58);
|
|
p_Var5 = (_Filebuf_base *)(param_2 + 0x20);
|
|
if (param_3 != 0) {
|
|
iVar1 = std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2);
|
|
piVar2 = (int *)(iVar1 + 1);
|
|
if (piVar2 != (int *)0x0) {
|
|
if (*pcVar4 != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
(p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*pcVar4 = '\0';
|
|
}
|
|
piVar2 = (int *)0x0;
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*pcVar4 = '\0';
|
|
}
|
|
*param_1 = iVar1;
|
|
param_1[1] = 0;
|
|
return piVar2;
|
|
}
|
|
iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2);
|
|
piVar2 = (int *)(iVar3 - iVar1);
|
|
LAB_00034b1e:
|
|
*param_1 = (int)piVar2;
|
|
param_1[1] = 0;
|
|
return piVar2;
|
|
}
|
|
if (*(char *)(param_2 + 0x2c) == '\0') {
|
|
local_18 = *(int **)(param_2 + 0x4c);
|
|
iVar1 = (**(code **)(**(int **)(param_2 + 0x68) + 0x1c))
|
|
(*(int **)(param_2 + 0x68),&local_18,*(undefined4 *)(param_2 + 0x3c),
|
|
*(undefined4 *)(param_2 + 0x44),
|
|
*(int *)(param_2 + 8) - *(int *)(param_2 + 4));
|
|
iVar3 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),0,2);
|
|
piVar2 = local_18;
|
|
if ((iVar3 != -1) &&
|
|
(iVar1 = ((iVar3 + iVar1) - *(int *)(param_2 + 0x48)) + *(int *)(param_2 + 0x3c),
|
|
-1 < iVar1)) {
|
|
if (param_3 != 0) {
|
|
if (*pcVar4 != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54),
|
|
*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*pcVar4 = '\0';
|
|
}
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*pcVar4 = '\0';
|
|
*param_1 = iVar1;
|
|
param_1[1] = (int)piVar2;
|
|
return piVar2;
|
|
}
|
|
*param_1 = iVar1;
|
|
goto LAB_00034bca;
|
|
}
|
|
}
|
|
else {
|
|
iVar1 = (*(int *)(param_2 + 8) - *(int *)(param_2 + 4)) * *(int *)(param_2 + 0x6c);
|
|
iVar3 = *(int *)(param_2 + 0x48) - *(int *)(param_2 + 0x3c);
|
|
if (iVar1 - iVar3 == 0 || iVar1 < iVar3) {
|
|
iVar1 = *(int *)(param_2 + 0x48) - (*(int *)(param_2 + 0x3c) + iVar1);
|
|
p_Var5 = (_Filebuf_base *)(param_2 + 0x20);
|
|
if (param_3 != 0) {
|
|
piVar2 = (int *)std::_Filebuf_base::_M_seek(p_Var5,param_3 - iVar1,2);
|
|
if (piVar2 != (int *)0xffffffff) {
|
|
if (*pcVar4 != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
(p_Var5,*(void **)(param_2 + 0x54),*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*pcVar4 = '\0';
|
|
}
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*pcVar4 = '\0';
|
|
}
|
|
*param_1 = (int)piVar2;
|
|
param_1[1] = 0;
|
|
return piVar2;
|
|
}
|
|
iVar3 = std::_Filebuf_base::_M_seek(p_Var5,0,2);
|
|
piVar2 = (int *)(iVar3 - iVar1);
|
|
goto LAB_00034b1e;
|
|
}
|
|
}
|
|
}
|
|
*param_1 = -1;
|
|
LAB_00034bca:
|
|
param_1[1] = 0;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034bea @ 00034bea
|
|
|
|
int * FUN_00034bea(int *param_1,int param_2,int param_3,int param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
if (((*(char *)(param_2 + 0x28) == '\0') || (iVar1 = FUN_00035322(param_2,1), param_3 == -1)) ||
|
|
(iVar1 != 1)) {
|
|
iVar3 = 0;
|
|
iVar1 = -1;
|
|
}
|
|
else {
|
|
iVar2 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_2 + 0x20),param_3,1);
|
|
iVar1 = -1;
|
|
iVar3 = 0;
|
|
if (iVar2 != -1) {
|
|
*(int *)(param_2 + 0x4c) = param_4;
|
|
if (*(char *)(param_2 + 0x2f) != '\0') {
|
|
if (*(void **)(param_2 + 0x54) != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_2 + 0x20),*(void **)(param_2 + 0x54),
|
|
*(long *)(param_2 + 0x58));
|
|
*(undefined4 *)(param_2 + 0x54) = 0;
|
|
*(undefined4 *)(param_2 + 0x58) = 0;
|
|
}
|
|
*(undefined1 *)(param_2 + 0x2f) = 0;
|
|
}
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
*(undefined4 *)(param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 0x10) = 0;
|
|
*(undefined4 *)(param_2 + 0x14) = 0;
|
|
*(undefined4 *)(param_2 + 0x18) = 0;
|
|
*(undefined1 *)(param_2 + 0x32) = 0;
|
|
*(undefined1 *)(param_2 + 0x31) = 0;
|
|
*(undefined1 *)(param_2 + 0x30) = 0;
|
|
*(undefined1 *)(param_2 + 0x2f) = 0;
|
|
iVar1 = param_3;
|
|
iVar3 = param_4;
|
|
}
|
|
}
|
|
*param_1 = iVar1;
|
|
param_1[1] = iVar3;
|
|
return param_1 + 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034c8e @ 00034c8e
|
|
|
|
undefined4 FUN_00034c8e(int *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
uVar2 = 0;
|
|
if ((char)param_1[0xc] != '\0') {
|
|
uVar2 = 0;
|
|
iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);
|
|
if (iVar1 == -1) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034cb0 @ 00034cb0
|
|
|
|
int FUN_00034cb0(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
undefined4 uStack_1c;
|
|
|
|
uStack_1c = -1;
|
|
if (((*(char *)(param_1 + 0x28) != '\0') && (*(char *)(param_1 + 0x30) == '\0')) &&
|
|
(*(char *)(param_1 + 0x31) == '\0')) {
|
|
if (*(char *)(param_1 + 0x32) != '\0') {
|
|
return *(int *)(param_1 + 0xc) - *(int *)(param_1 + 8);
|
|
}
|
|
uStack_1c = 0;
|
|
if (*(char *)(param_1 + 0x2c) != '\0') {
|
|
iVar1 = std::_Filebuf_base::_M_seek((_Filebuf_base *)(param_1 + 0x20),0,2);
|
|
iVar2 = std::_Filebuf_base::_M_file_size((_Filebuf_base *)(param_1 + 0x20));
|
|
uStack_1c = iVar2 - iVar1;
|
|
if (iVar2 <= iVar1) {
|
|
uStack_1c = 0;
|
|
}
|
|
if (iVar1 < 0) {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
return uStack_1c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034d20 @ 00034d20
|
|
|
|
int FUN_00034d20(int *param_1,undefined1 *param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar4 = 0;
|
|
if (0 < param_3) {
|
|
iVar4 = 0;
|
|
do {
|
|
uVar3 = param_1[2];
|
|
if (uVar3 < (uint)param_1[3]) {
|
|
uVar1 = param_1[3] - uVar3;
|
|
uVar5 = param_3 - iVar4;
|
|
if (uVar1 <= (uint)(param_3 - iVar4)) {
|
|
uVar5 = uVar1;
|
|
}
|
|
if (uVar5 != 0) {
|
|
__aeabi_memcpy(param_2,uVar3,uVar5);
|
|
uVar3 = param_1[2];
|
|
}
|
|
param_1[2] = uVar3 + uVar5;
|
|
param_2 = param_2 + uVar5;
|
|
iVar4 = uVar5 + iVar4;
|
|
}
|
|
else {
|
|
iVar2 = (**(code **)(*param_1 + 0x24))(param_1);
|
|
if (iVar2 == -1) {
|
|
return iVar4;
|
|
}
|
|
*param_2 = (char)iVar2;
|
|
param_2 = param_2 + 1;
|
|
iVar4 = iVar4 + 1;
|
|
}
|
|
} while (iVar4 < param_3);
|
|
}
|
|
return iVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034d90 @ 00034d90
|
|
|
|
void FUN_00034d90(filebuf *param_1)
|
|
|
|
{
|
|
std::_Underflow<char,std::char_traits<char>>::_M_doit(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034d9a @ 00034d9a
|
|
|
|
uint FUN_00034d9a(int *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
byte *pbVar3;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x20))(param_1);
|
|
uVar2 = 0xffffffff;
|
|
if (iVar1 != -1) {
|
|
pbVar3 = (byte *)param_1[2];
|
|
param_1[2] = (int)(pbVar3 + 1);
|
|
uVar2 = (uint)*pbVar3;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034dbc @ 00034dbc
|
|
|
|
uint FUN_00034dbc(int param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
byte *pbVar3;
|
|
|
|
if (*(char *)(param_1 + 0x2f) == '\0') {
|
|
return 0xffffffff;
|
|
}
|
|
iVar2 = *(int *)(param_1 + 4);
|
|
iVar1 = *(int *)(param_1 + 8);
|
|
if (iVar1 == iVar2) {
|
|
if (param_2 == 0xffffffff) {
|
|
return 0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
if (param_2 == 0xffffffff) {
|
|
*(int *)(param_1 + 8) = iVar1 + -1;
|
|
param_2 = (uint)*(byte *)(iVar1 + -1);
|
|
LAB_00034e30:
|
|
return param_2 & 0xff;
|
|
}
|
|
pbVar3 = (byte *)(iVar1 + -1);
|
|
if (((uint)*(byte *)(iVar1 + -1) == (param_2 & 0xff)) || (*(int *)(param_1 + 0x54) == 0)) {
|
|
*(byte **)(param_1 + 8) = pbVar3;
|
|
if ((uint)*pbVar3 == (param_2 & 0xff)) goto LAB_00034e30;
|
|
goto LAB_00034e50;
|
|
}
|
|
}
|
|
if (*(char *)(param_1 + 0x32) == '\0') {
|
|
*(int *)(param_1 + 0x5c) = iVar2;
|
|
*(int *)(param_1 + 0x60) = iVar1;
|
|
*(undefined4 *)(param_1 + 100) = *(undefined4 *)(param_1 + 0xc);
|
|
pbVar3 = (byte *)(param_1 + 0x7b);
|
|
*(byte **)(param_1 + 4) = pbVar3;
|
|
*(byte **)(param_1 + 8) = pbVar3;
|
|
*(int *)(param_1 + 0xc) = param_1 + 0x7c;
|
|
*(undefined1 *)(param_1 + 0x32) = 1;
|
|
}
|
|
else {
|
|
if (iVar2 == param_1 + 0x74) {
|
|
return 0xffffffff;
|
|
}
|
|
pbVar3 = (byte *)(*(int *)(param_1 + 0xc) + -1);
|
|
*(byte **)(param_1 + 4) = pbVar3;
|
|
*(byte **)(param_1 + 8) = pbVar3;
|
|
*(int *)(param_1 + 0xc) = param_1 + 0x7c;
|
|
}
|
|
LAB_00034e50:
|
|
*pbVar3 = (byte)param_2;
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034e58 @ 00034e58
|
|
|
|
int FUN_00034e58(int *param_1,undefined1 *param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar4 = 0;
|
|
if (0 < param_3) {
|
|
iVar4 = 0;
|
|
do {
|
|
while( true ) {
|
|
uVar1 = param_1[5];
|
|
if ((uint)param_1[6] <= uVar1) break;
|
|
uVar3 = param_1[6] - uVar1;
|
|
uVar5 = param_3 - iVar4;
|
|
if (uVar3 <= (uint)(param_3 - iVar4)) {
|
|
uVar5 = uVar3;
|
|
}
|
|
if (uVar5 != 0) {
|
|
__aeabi_memcpy(uVar1,param_2,uVar5);
|
|
uVar1 = param_1[5];
|
|
}
|
|
param_1[5] = uVar1 + uVar5;
|
|
param_2 = param_2 + uVar5;
|
|
iVar4 = uVar5 + iVar4;
|
|
if (param_3 <= iVar4) {
|
|
return iVar4;
|
|
}
|
|
}
|
|
iVar2 = (**(code **)(*param_1 + 0x34))(param_1,*param_2);
|
|
if (iVar2 == -1) {
|
|
return iVar4;
|
|
}
|
|
param_2 = param_2 + 1;
|
|
iVar4 = iVar4 + 1;
|
|
} while (iVar4 < param_3);
|
|
}
|
|
return iVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034ed0 @ 00034ed0
|
|
|
|
int FUN_00034ed0(int *param_1,undefined4 param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar4 = 0;
|
|
if (0 < param_3) {
|
|
iVar4 = 0;
|
|
do {
|
|
while( true ) {
|
|
uVar1 = param_1[5];
|
|
if (uVar1 < (uint)param_1[6]) break;
|
|
iVar2 = (**(code **)(*param_1 + 0x34))(param_1,param_2);
|
|
if (iVar2 == -1) {
|
|
return iVar4;
|
|
}
|
|
iVar4 = iVar4 + 1;
|
|
if (param_3 <= iVar4) {
|
|
return iVar4;
|
|
}
|
|
}
|
|
uVar3 = param_1[6] - uVar1;
|
|
uVar5 = param_3 - iVar4;
|
|
if (uVar3 <= (uint)(param_3 - iVar4)) {
|
|
uVar5 = uVar3;
|
|
}
|
|
__aeabi_memset(uVar1,uVar5,param_2);
|
|
param_1[5] = param_1[5] + uVar5;
|
|
iVar4 = uVar5 + iVar4;
|
|
} while (iVar4 < param_3);
|
|
}
|
|
return iVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00034f2c @ 00034f2c
|
|
|
|
int FUN_00034f2c(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
char *pcVar3;
|
|
int extraout_r1;
|
|
undefined1 *puVar4;
|
|
char *pcVar5;
|
|
char *local_20;
|
|
int local_1c;
|
|
char *local_18;
|
|
|
|
puVar4 = (undefined1 *)(param_1 + 0x30);
|
|
if (*(char *)(param_1 + 0x30) == '\0') {
|
|
if (*(char *)(param_1 + 0x28) == '\0') {
|
|
return -1;
|
|
}
|
|
uVar2 = *(uint *)(param_1 + 0x24);
|
|
if ((uVar2 & 0x10) == 0) {
|
|
return -1;
|
|
}
|
|
if (*(char *)(param_1 + 0x2f) != '\0') {
|
|
return -1;
|
|
}
|
|
if (*(char *)(param_1 + 0x31) != '\0') {
|
|
return -1;
|
|
}
|
|
if (*(int *)(param_1 + 0x34) == 0) {
|
|
iVar1 = std::_Filebuf_base::_M_page_size + 0xfff;
|
|
__aeabi_uidivmod(iVar1);
|
|
iVar1 = FUN_000352a0(param_1,0,iVar1 - extraout_r1);
|
|
if (iVar1 != 1) {
|
|
return -1;
|
|
}
|
|
uVar2 = *(uint *)(param_1 + 0x24);
|
|
}
|
|
if ((uVar2 & 1) != 0) {
|
|
*(undefined4 *)(param_1 + 0x4c) = 0;
|
|
}
|
|
pcVar5 = *(char **)(param_1 + 0x34);
|
|
iVar1 = *(int *)(param_1 + 0x38);
|
|
*(char **)(param_1 + 0x10) = pcVar5;
|
|
*(char **)(param_1 + 0x14) = pcVar5;
|
|
*(int *)(param_1 + 0x18) = iVar1 + -1;
|
|
*puVar4 = 1;
|
|
local_20 = pcVar5;
|
|
}
|
|
else {
|
|
pcVar5 = *(char **)(param_1 + 0x34);
|
|
iVar1 = *(int *)(param_1 + 0x38);
|
|
local_20 = *(char **)(param_1 + 0x14);
|
|
}
|
|
*(char **)(param_1 + 0x10) = pcVar5;
|
|
*(char **)(param_1 + 0x14) = pcVar5;
|
|
*(int *)(param_1 + 0x18) = iVar1 + -1;
|
|
if (param_2 != -1) {
|
|
*local_20 = (char)param_2;
|
|
local_20 = local_20 + 1;
|
|
}
|
|
if (pcVar5 != local_20) {
|
|
do {
|
|
local_1c = *(int *)(param_1 + 0x3c);
|
|
local_18 = pcVar5;
|
|
iVar1 = (**(code **)(**(int **)(param_1 + 0x68) + 8))
|
|
(*(int **)(param_1 + 0x68),param_1 + 0x4c,pcVar5,local_20,&local_18,local_1c
|
|
,*(undefined4 *)(param_1 + 0x40),&local_1c);
|
|
if (iVar1 == 2) {
|
|
LAB_000350a2:
|
|
*puVar4 = 0;
|
|
*(undefined1 *)(param_1 + 0x31) = 1;
|
|
*(undefined1 *)(param_1 + 0x2f) = 0;
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
*(undefined4 *)(param_1 + 0x18) = 0;
|
|
return -1;
|
|
}
|
|
if (iVar1 == 3) {
|
|
iVar1 = std::_Filebuf_base::_M_write
|
|
((_Filebuf_base *)(param_1 + 0x20),pcVar5,(int)local_20 - (int)pcVar5);
|
|
if (iVar1 != 1) {
|
|
LAB_000350d6:
|
|
*puVar4 = 0;
|
|
*(undefined1 *)(param_1 + 0x31) = 1;
|
|
*(undefined1 *)(param_1 + 0x2f) = 0;
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
*(undefined4 *)(param_1 + 0x18) = 0;
|
|
return -1;
|
|
}
|
|
break;
|
|
}
|
|
if ((local_18 != local_20) ||
|
|
(pcVar3 = *(char **)(param_1 + 0x3c),
|
|
local_1c - (int)pcVar3 != ((int)local_20 - (int)pcVar5) * *(int *)(param_1 + 0x6c))) {
|
|
if ((*(char *)(param_1 + 0x2c) != '\0') || (local_18 == pcVar5)) goto LAB_000350a2;
|
|
pcVar3 = *(char **)(param_1 + 0x3c);
|
|
}
|
|
iVar1 = std::_Filebuf_base::_M_write
|
|
((_Filebuf_base *)(param_1 + 0x20),pcVar3,local_1c - (int)pcVar3);
|
|
if (iVar1 != 1) goto LAB_000350d6;
|
|
pcVar5 = local_18;
|
|
} while (local_18 != local_20);
|
|
}
|
|
iVar1 = 0;
|
|
if (param_2 != -1) {
|
|
iVar1 = param_2;
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035100 @ 00035100
|
|
|
|
void FUN_00035100(int param_1,undefined4 param_2)
|
|
|
|
{
|
|
if (((*(char *)(param_1 + 0x2f) == '\0') && (*(char *)(param_1 + 0x30) == '\0')) &&
|
|
(*(char *)(param_1 + 0x31) == '\0')) {
|
|
FUN_00034738(param_1,param_2,1);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035128 @ 00035128
|
|
|
|
undefined4 * FUN_00035128(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035148 @ 00035148
|
|
|
|
void FUN_00035148(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003519e @ 0003519e
|
|
|
|
int * FUN_0003519e(int *param_1)
|
|
|
|
{
|
|
char cVar1;
|
|
bool bVar2;
|
|
bool bVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
char *pcVar6;
|
|
char *local_18;
|
|
|
|
cVar1 = (char)param_1[10];
|
|
if ((char)param_1[0xc] == '\0') {
|
|
bVar2 = cVar1 != '\0';
|
|
if (*(char *)((int)param_1 + 0x2f) != '\0') {
|
|
if ((void *)param_1[0x15] != (void *)0x0) {
|
|
std::_Filebuf_base::_M_unmap
|
|
((_Filebuf_base *)(param_1 + 8),(void *)param_1[0x15],param_1[0x16]);
|
|
param_1[0x15] = 0;
|
|
param_1[0x16] = 0;
|
|
}
|
|
*(undefined1 *)((int)param_1 + 0x2f) = 0;
|
|
}
|
|
}
|
|
else {
|
|
bVar2 = false;
|
|
if (cVar1 != '\0') {
|
|
iVar4 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);
|
|
bVar2 = false;
|
|
if (((iVar4 != -1) && (bVar2 = true, (char)param_1[0xc] != '\0')) &&
|
|
((char)param_1[0xb] == '\0')) {
|
|
bVar3 = true;
|
|
while( true ) {
|
|
local_18 = (char *)param_1[0xf];
|
|
iVar4 = (**(code **)(*(int *)param_1[0x1a] + 0x10))
|
|
((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18);
|
|
bVar2 = bVar3;
|
|
if (((iVar4 == 3) || ((pcVar6 = (char *)param_1[0xf], iVar4 == 0 && (local_18 == pcVar6)))
|
|
) || (bVar2 = false, iVar4 == 2)) break;
|
|
iVar5 = std::_Filebuf_base::_M_write
|
|
((_Filebuf_base *)(param_1 + 8),pcVar6,(int)local_18 - (int)pcVar6);
|
|
if ((iVar5 != 1) || (bVar2 = bVar3, iVar4 != 1)) break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
iVar4 = std::_Filebuf_base::_M_close((_Filebuf_base *)(param_1 + 8));
|
|
*(undefined1 *)((int)param_1 + 0x32) = 0;
|
|
*(undefined1 *)((int)param_1 + 0x31) = 0;
|
|
*(undefined1 *)(param_1 + 0xc) = 0;
|
|
*(undefined1 *)((int)param_1 + 0x2f) = 0;
|
|
param_1[1] = 0;
|
|
param_1[2] = 0;
|
|
param_1[3] = 0;
|
|
param_1[4] = 0;
|
|
param_1[5] = 0;
|
|
param_1[6] = 0;
|
|
__aeabi_memclr4(param_1 + 0x11,0x24);
|
|
if (iVar4 == 0) {
|
|
param_1 = (int *)0x0;
|
|
}
|
|
if (!bVar2) {
|
|
param_1 = (int *)0x0;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000352a0 @ 000352a0
|
|
|
|
undefined4 FUN_000352a0(int param_1,int param_2,size_t param_3)
|
|
|
|
{
|
|
size_t __size;
|
|
void *pvVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
undefined1 uVar4;
|
|
size_t sVar5;
|
|
|
|
if (param_2 == 0) {
|
|
pvVar1 = malloc(param_3);
|
|
*(void **)(param_1 + 0x34) = pvVar1;
|
|
uVar4 = 1;
|
|
if (pvVar1 == (void *)0x0) {
|
|
return 0;
|
|
}
|
|
}
|
|
else {
|
|
*(int *)(param_1 + 0x34) = param_2;
|
|
uVar4 = 0;
|
|
}
|
|
*(undefined1 *)(param_1 + 0x2e) = uVar4;
|
|
sVar5 = param_3 * *(int *)(param_1 + 0x6c);
|
|
__size = (**(code **)(**(int **)(param_1 + 0x68) + 0x20))();
|
|
if ((int)__size <= (int)sVar5) {
|
|
__size = sVar5;
|
|
}
|
|
pvVar1 = malloc(__size);
|
|
*(void **)(param_1 + 0x3c) = pvVar1;
|
|
if (pvVar1 == (void *)0x0) {
|
|
pvVar1 = (void *)0x0;
|
|
if (*(char *)(param_1 + 0x2e) != '\0') {
|
|
free(*(void **)(param_1 + 0x34));
|
|
pvVar1 = *(void **)(param_1 + 0x3c);
|
|
}
|
|
free(pvVar1);
|
|
iVar3 = 0;
|
|
*(undefined4 *)(param_1 + 0x34) = 0;
|
|
*(undefined4 *)(param_1 + 0x38) = 0;
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
uVar2 = 0;
|
|
}
|
|
else {
|
|
*(size_t *)(param_1 + 0x38) = *(int *)(param_1 + 0x34) + param_3;
|
|
iVar3 = (int)pvVar1 + __size;
|
|
uVar2 = 1;
|
|
}
|
|
*(int *)(param_1 + 0x40) = iVar3;
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035322 @ 00035322
|
|
|
|
undefined4 FUN_00035322(int *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
char *pcVar3;
|
|
char *local_18;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x31) = 0;
|
|
if ((char)param_1[0xc] != '\0') {
|
|
iVar1 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);
|
|
if (param_2 == 1) {
|
|
if (iVar1 == -1) {
|
|
LAB_000353e0:
|
|
*(char *)(param_1 + 0xc) = '\0';
|
|
*(undefined1 *)((int)param_1 + 0x31) = 1;
|
|
param_1[4] = 0;
|
|
param_1[5] = 0;
|
|
param_1[6] = 0;
|
|
return 0;
|
|
}
|
|
if (((char)param_1[0xc] != '\0') && ((char)param_1[0xb] == '\0')) {
|
|
do {
|
|
local_18 = (char *)param_1[0xf];
|
|
iVar1 = (**(code **)(*(int *)param_1[0x1a] + 0x10))
|
|
((int *)param_1[0x1a],param_1 + 0x13,local_18,param_1[0x10],&local_18);
|
|
if ((iVar1 == 3) || ((pcVar3 = (char *)param_1[0xf], iVar1 == 0 && (local_18 == pcVar3))))
|
|
break;
|
|
if ((iVar1 == 2) ||
|
|
(iVar2 = std::_Filebuf_base::_M_write
|
|
((_Filebuf_base *)(param_1 + 8),pcVar3,(int)local_18 - (int)pcVar3),
|
|
iVar2 != 1)) goto LAB_000353e0;
|
|
} while (iVar1 == 1);
|
|
}
|
|
}
|
|
else if (iVar1 == -1) goto LAB_000353e0;
|
|
}
|
|
if ((*(char *)((int)param_1 + 0x2f) != '\0') && (*(char *)((int)param_1 + 0x32) != '\0')) {
|
|
param_1[1] = param_1[0x17];
|
|
param_1[2] = param_1[0x18];
|
|
param_1[3] = param_1[0x19];
|
|
*(undefined1 *)((int)param_1 + 0x32) = 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000353f8 @ 000353f8
|
|
|
|
void FUN_000353f8(int param_1,int param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
locale alStack_1c [4];
|
|
locale alStack_18 [4];
|
|
|
|
*(int *)(param_1 + 0x48) = param_2;
|
|
uVar1 = (uint)(param_2 == 0);
|
|
*(uint *)(param_1 + 8) = uVar1;
|
|
if ((*(uint *)(param_1 + 0x14) & uVar1) == 0) {
|
|
std::locale::locale(alStack_1c);
|
|
FUN_000354dc(alStack_18,param_1,alStack_1c);
|
|
std::locale::~locale(alStack_18);
|
|
std::locale::~locale(alStack_1c);
|
|
*(undefined1 *)(param_1 + 0x44) = 0x20;
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
*(undefined4 *)(param_1 + 0x4c) = 0;
|
|
*(uint *)(param_1 + 8) = uVar1;
|
|
*(undefined4 *)(param_1 + 4) = 0x1008;
|
|
*(undefined4 *)(param_1 + 0x1c) = 0;
|
|
*(undefined4 *)(param_1 + 0x18) = 6;
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
std::ios_base::_M_throw_failure();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035468 @ 00035468
|
|
|
|
int FUN_00035468(int param_1)
|
|
|
|
{
|
|
std::ios_base::~ios_base((ios_base *)(param_1 + 8));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035478 @ 00035478
|
|
|
|
void FUN_00035478(void *param_1)
|
|
|
|
{
|
|
std::ios_base::~ios_base((ios_base *)((int)param_1 + 8));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000354b0 @ 000354b0
|
|
|
|
void FUN_000354b0(int *param_1)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc));
|
|
std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 8));
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000354dc @ 000354dc
|
|
|
|
void FUN_000354dc(locale *param_1,int param_2,locale *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int *piVar2;
|
|
locale alStack_18 [4];
|
|
|
|
std::ios_base::imbue(param_1);
|
|
piVar2 = *(int **)(param_2 + 0x48);
|
|
if (piVar2 != (int *)0x0) {
|
|
(**(code **)(*piVar2 + 0x38))(piVar2,param_3);
|
|
std::locale::locale(alStack_18,(locale *)(piVar2 + 7));
|
|
std::locale::operator=((locale *)(piVar2 + 7),param_3);
|
|
std::locale::~locale(alStack_18);
|
|
}
|
|
uVar1 = std::locale::_M_use_facet(param_3,(id *)&std::ctype<char>::id);
|
|
*(undefined4 *)(param_2 + 0x40) = uVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035588 @ 00035588
|
|
|
|
int FUN_00035588(int param_1)
|
|
|
|
{
|
|
std::ios_base::~ios_base((ios_base *)(param_1 + 4));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035598 @ 00035598
|
|
|
|
void FUN_00035598(void *param_1)
|
|
|
|
{
|
|
std::ios_base::~ios_base((ios_base *)((int)param_1 + 4));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000355d0 @ 000355d0
|
|
|
|
void FUN_000355d0(int *param_1)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc));
|
|
std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 4));
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000355fc @ 000355fc
|
|
|
|
void FUN_000355fc(int param_1,int param_2)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
locale alStack_1c [4];
|
|
locale alStack_18 [4];
|
|
|
|
*(int *)(param_1 + 0x48) = param_2;
|
|
uVar2 = (uint)(param_2 == 0);
|
|
*(uint *)(param_1 + 8) = uVar2;
|
|
if ((*(uint *)(param_1 + 0x14) & uVar2) == 0) {
|
|
std::locale::locale(alStack_1c);
|
|
FUN_000356e4(alStack_18,param_1,alStack_1c);
|
|
std::locale::~locale(alStack_18);
|
|
std::locale::~locale(alStack_1c);
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
*(undefined4 *)(param_1 + 0x4c) = 0;
|
|
*(uint *)(param_1 + 8) = uVar2;
|
|
*(undefined4 *)(param_1 + 4) = 0x1008;
|
|
*(undefined4 *)(param_1 + 0x1c) = 0;
|
|
*(undefined4 *)(param_1 + 0x18) = 6;
|
|
uVar1 = (**(code **)(**(int **)(param_1 + 0x40) + 0x28))(*(int **)(param_1 + 0x40),0x20);
|
|
*(undefined4 *)(param_1 + 0x44) = uVar1;
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
std::ios_base::_M_throw_failure();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035670 @ 00035670
|
|
|
|
int FUN_00035670(int param_1)
|
|
|
|
{
|
|
std::ios_base::~ios_base((ios_base *)(param_1 + 8));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035680 @ 00035680
|
|
|
|
void FUN_00035680(void *param_1)
|
|
|
|
{
|
|
std::ios_base::~ios_base((ios_base *)((int)param_1 + 8));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000356b8 @ 000356b8
|
|
|
|
void FUN_000356b8(int *param_1)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc));
|
|
std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 8));
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000356e4 @ 000356e4
|
|
|
|
void FUN_000356e4(locale *param_1,int param_2,locale *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int *piVar2;
|
|
locale alStack_18 [4];
|
|
|
|
std::ios_base::imbue(param_1);
|
|
piVar2 = *(int **)(param_2 + 0x48);
|
|
if (piVar2 != (int *)0x0) {
|
|
(**(code **)(*piVar2 + 0x38))(piVar2,param_3);
|
|
std::locale::locale(alStack_18,(locale *)(piVar2 + 7));
|
|
std::locale::operator=((locale *)(piVar2 + 7),param_3);
|
|
std::locale::~locale(alStack_18);
|
|
}
|
|
uVar1 = std::locale::_M_use_facet(param_3,(id *)&std::ctype<wchar_t>::id);
|
|
*(undefined4 *)(param_2 + 0x40) = uVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00035790 @ 00035790
|
|
|
|
int FUN_00035790(int param_1)
|
|
|
|
{
|
|
std::ios_base::~ios_base((ios_base *)(param_1 + 4));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000357a0 @ 000357a0
|
|
|
|
void FUN_000357a0(void *param_1)
|
|
|
|
{
|
|
std::ios_base::~ios_base((ios_base *)((int)param_1 + 4));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000357d8 @ 000357d8
|
|
|
|
void FUN_000357d8(int *param_1)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = (void *)((int)param_1 + *(int *)(*param_1 + -0xc));
|
|
std::ios_base::~ios_base((ios_base *)((int)pvVar1 + 4));
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~facet @ 00035804
|
|
|
|
/* std::locale::facet::~facet() */
|
|
|
|
facet * __thiscall std::locale::facet::~facet(facet *this)
|
|
|
|
{
|
|
pthread_mutex_destroy((pthread_mutex_t *)(this + 8));
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~facet @ 00035814
|
|
|
|
/* std::locale::facet::~facet() */
|
|
|
|
void __thiscall std::locale::facet::~facet(facet *this)
|
|
|
|
{
|
|
pthread_mutex_destroy((pthread_mutex_t *)(this + 8));
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_throw_on_null_name @ 00035838
|
|
|
|
/* std::locale::_M_throw_on_null_name() */
|
|
|
|
void std::locale::_M_throw_on_null_name(void)
|
|
|
|
{
|
|
__Named_exception *this;
|
|
undefined1 auStack_30 [4];
|
|
string asStack_2c [24];
|
|
|
|
this = (__Named_exception *)FUN_00030824(0x108);
|
|
FUN_00031c38(asStack_2c,&LAB_000358b8,auStack_30);
|
|
__Named_exception::__Named_exception(this,asStack_2c);
|
|
*(undefined ***)this = &PTR____Named_exception_00068ec0;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(this,&runtime_error::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_throw_on_combine_error @ 000358e0
|
|
|
|
/* std::locale::_M_throw_on_combine_error(std::string const&) */
|
|
|
|
void std::locale::_M_throw_on_combine_error(string *param_1)
|
|
|
|
{
|
|
size_t sVar1;
|
|
__Named_exception *this;
|
|
char *__s;
|
|
undefined1 auStack_48 [4];
|
|
string asStack_44 [24];
|
|
undefined1 auStack_2c [20];
|
|
undefined4 local_18;
|
|
|
|
FUN_00031c38(auStack_2c,&LAB_000359d4,asStack_44);
|
|
FUN_00037294(auStack_2c,&LAB_000359ec,&LAB_000359f0);
|
|
__s = *(char **)(param_1 + 0x14);
|
|
if (__s == *(char **)(param_1 + 0x10)) {
|
|
__s = "system";
|
|
}
|
|
sVar1 = strlen(__s);
|
|
FUN_00037294(auStack_2c,__s,__s + sVar1);
|
|
FUN_00037294(auStack_2c," locale","");
|
|
this = (__Named_exception *)FUN_00030824(0x108);
|
|
FUN_00031c38(asStack_44,local_18,auStack_48);
|
|
__Named_exception::__Named_exception(this,asStack_44);
|
|
*(undefined ***)this = &PTR____Named_exception_00068ec0;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(this,&runtime_error::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_throw_on_creation_failure @ 00035a08
|
|
|
|
/* std::locale::_M_throw_on_creation_failure(int, char const*, char const*) */
|
|
|
|
void std::locale::_M_throw_on_creation_failure(int param_1,char *param_2,char *param_3)
|
|
|
|
{
|
|
size_t sVar1;
|
|
undefined4 uVar2;
|
|
__Named_exception *this;
|
|
undefined1 auStack_48 [4];
|
|
string asStack_44 [24];
|
|
undefined1 local_2c [16];
|
|
undefined1 *local_1c;
|
|
undefined1 *local_18;
|
|
|
|
local_1c = local_2c;
|
|
local_2c[0] = 0;
|
|
local_18 = local_1c;
|
|
if (param_1 != 4) {
|
|
if (param_1 == 3) {
|
|
FUN_00037294(local_2c,&LAB_00035bb8,&LAB_00035bea_1);
|
|
if (*param_2 == '\0') {
|
|
param_2 = "system";
|
|
}
|
|
sVar1 = strlen(param_2);
|
|
FUN_00037294(local_2c,param_2,param_2 + sVar1);
|
|
FUN_00037294(local_2c," locale","");
|
|
}
|
|
else if (param_1 == 1) {
|
|
FUN_00037294(local_2c,&LAB_00035bf4,&LAB_00035c18_1);
|
|
sVar1 = strlen(param_3);
|
|
FUN_00037294(local_2c,param_3,param_3 + sVar1);
|
|
FUN_00037294(local_2c," facet category, unable to create facet for ","");
|
|
if (*param_2 == '\0') {
|
|
param_2 = "system";
|
|
}
|
|
sVar1 = strlen(param_2);
|
|
FUN_00037294(local_2c,param_2,param_2 + sVar1);
|
|
FUN_00037294(local_2c," locale","");
|
|
}
|
|
else {
|
|
FUN_00037294(local_2c,&LAB_00035c28,&LAB_00035c3e_1);
|
|
sVar1 = strlen(param_3);
|
|
FUN_00037294(local_2c,param_3,param_3 + sVar1);
|
|
FUN_00037294(local_2c,&LAB_00035c40,&LAB_00035c4c);
|
|
sVar1 = strlen(param_2);
|
|
FUN_00037294(local_2c,param_2,param_2 + sVar1);
|
|
FUN_00037294(local_2c,&LAB_00035c50,&LAB_00035c50_1);
|
|
}
|
|
this = (__Named_exception *)FUN_00030824(0x108);
|
|
FUN_00031c38(asStack_44,local_18,auStack_48);
|
|
__Named_exception::__Named_exception(this,asStack_44);
|
|
*(undefined ***)this = &PTR____Named_exception_00068ec0;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(this,&runtime_error::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
FUN_00030824(4);
|
|
uVar2 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC locale @ 00035c60
|
|
|
|
/* std::locale::locale() */
|
|
|
|
locale * __thiscall std::locale::locale(locale *this)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
undefined4 uVar2;
|
|
|
|
puVar1 = (undefined4 *)FUN_000395ec();
|
|
uVar2 = _get_Locale_impl((_Locale_impl *)*puVar1);
|
|
*(undefined4 *)this = uVar2;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC locale @ 00035c7a
|
|
|
|
/* std::locale::locale(std::locale const&) */
|
|
|
|
locale * __thiscall std::locale::locale(locale *this,locale *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = _get_Locale_impl(*(_Locale_impl **)param_1);
|
|
*(undefined4 *)this = uVar1;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_insert @ 00035c90
|
|
|
|
/* std::locale::_M_insert(std::locale::facet*, std::locale::id&) */
|
|
|
|
void __thiscall std::locale::_M_insert(locale *this,facet *param_1,id *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
_Locale_impl *this_00;
|
|
|
|
if (param_1 != (facet *)0x0) {
|
|
this_00 = *(_Locale_impl **)this;
|
|
if (*(int *)param_2 == 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070d3c);
|
|
iVar1 = id::_S_max + 1;
|
|
*(int *)param_2 = id::_S_max;
|
|
id::_S_max = iVar1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070d3c);
|
|
}
|
|
_Locale_impl::insert(this_00,param_1,param_2);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC locale @ 00035ce0
|
|
|
|
/* std::locale::locale(std::_Locale_impl*) */
|
|
|
|
locale * __thiscall std::locale::locale(locale *this,_Locale_impl *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = _get_Locale_impl(param_1);
|
|
*(undefined4 *)this = uVar1;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC locale @ 00035cf4
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00035e6a) */
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
/* std::locale::locale(char const*) */
|
|
|
|
locale * __thiscall std::locale::locale(locale *this,char *param_1)
|
|
|
|
{
|
|
char *__s1;
|
|
_Locale_impl *this_00;
|
|
_Locale_name_hint *p_Var1;
|
|
int iVar2;
|
|
size_t sVar3;
|
|
undefined4 *puVar4;
|
|
undefined4 uVar5;
|
|
int iVar6;
|
|
char acStack_62c [256];
|
|
char *local_52c;
|
|
char acStack_528 [256];
|
|
char *local_428;
|
|
char acStack_424 [256];
|
|
char *local_324;
|
|
char acStack_320 [256];
|
|
char *local_220;
|
|
char acStack_21c [256];
|
|
char *local_11c;
|
|
char acStack_118 [256];
|
|
char *local_18;
|
|
|
|
*(undefined4 *)this = 0;
|
|
if (param_1 == (char *)0x0) {
|
|
uVar5 = _M_throw_on_null_name();
|
|
operator_delete(this);
|
|
FUN_000308d8(uVar5);
|
|
uVar5 = FUN_00030a44();
|
|
operator_delete((void *)0x0);
|
|
FUN_0003094c();
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar5);
|
|
}
|
|
if ((*param_1 == 'C') && (param_1[1] == '\0')) {
|
|
puVar4 = (undefined4 *)FUN_0003956c();
|
|
uVar5 = _get_Locale_impl((_Locale_impl *)*puVar4);
|
|
}
|
|
else {
|
|
this_00 = (_Locale_impl *)operator_new(0x2c);
|
|
_Locale_impl::_Locale_impl(this_00,id::_S_max,param_1);
|
|
local_52c = param_1;
|
|
local_428 = param_1;
|
|
local_324 = param_1;
|
|
local_11c = param_1;
|
|
local_220 = param_1;
|
|
local_18 = param_1;
|
|
p_Var1 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_ctype_facets
|
|
(this_00,&local_18,acStack_118,(_Locale_name_hint *)0x0);
|
|
p_Var1 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_numeric_facets(this_00,&local_11c,acStack_21c,p_Var1);
|
|
p_Var1 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_time_facets(this_00,&local_220,acStack_320,p_Var1);
|
|
p_Var1 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_collate_facets(this_00,&local_324,acStack_424,p_Var1);
|
|
p_Var1 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_monetary_facets(this_00,&local_428,acStack_528,p_Var1);
|
|
_Locale_impl::insert_messages_facets(this_00,&local_52c,acStack_62c,p_Var1);
|
|
__s1 = local_18;
|
|
iVar2 = strcmp(local_18,local_11c);
|
|
if (((iVar2 == 0) &&
|
|
(((iVar2 = strcmp(__s1,local_220), iVar2 == 0 &&
|
|
(iVar2 = strcmp(__s1,local_324), iVar2 == 0)) &&
|
|
(iVar2 = strcmp(__s1,local_428), iVar2 == 0)))) &&
|
|
(iVar2 = strcmp(__s1,local_52c), iVar2 == 0)) {
|
|
sVar3 = strlen(__s1);
|
|
iVar6 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
if ((uint)(iVar6 - iVar2) < sVar3) {
|
|
if (iVar6 != iVar2) {
|
|
__aeabi_memmove(iVar2,__s1);
|
|
iVar6 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
FUN_00037294(this_00 + 8,__s1 + (iVar6 - iVar2),__s1 + sVar3);
|
|
}
|
|
else {
|
|
if (sVar3 != 0) {
|
|
__aeabi_memmove(iVar2,__s1,sVar3);
|
|
iVar6 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
iVar2 = iVar2 + sVar3;
|
|
if (iVar2 != iVar6) {
|
|
__aeabi_memmove(iVar2,iVar6);
|
|
*(int *)(this_00 + 0x18) = *(int *)(this_00 + 0x18) + (iVar2 - iVar6);
|
|
}
|
|
}
|
|
}
|
|
uVar5 = _get_Locale_impl(this_00);
|
|
}
|
|
*(undefined4 *)this = uVar5;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC classic @ 00035ee4
|
|
|
|
/* std::locale::classic() */
|
|
|
|
void std::locale::classic(void)
|
|
|
|
{
|
|
FUN_0003956c();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC locale @ 00035ef0
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00036698) */
|
|
/* WARNING: Removing unreachable block (ram,0x000361de) */
|
|
/* WARNING: Removing unreachable block (ram,0x000361ee) */
|
|
/* std::locale::locale(std::locale const&, char const*, int) */
|
|
|
|
locale * __thiscall std::locale::locale(locale *this,locale *param_1,char *param_2,int param_3)
|
|
|
|
{
|
|
char *__s2;
|
|
int *piVar1;
|
|
int iVar2;
|
|
_Locale_impl *this_00;
|
|
size_t sVar3;
|
|
int iVar4;
|
|
char *__s2_00;
|
|
char *__s2_01;
|
|
char *__s2_02;
|
|
char *__s2_03;
|
|
undefined4 uVar5;
|
|
__Named_exception *this_01;
|
|
_Locale_impl *p_Var6;
|
|
char *__s1;
|
|
_Locale_name_hint *p_Var7;
|
|
int iVar8;
|
|
char *__s1_00;
|
|
uint uVar9;
|
|
char *local_8f8;
|
|
int local_8f0;
|
|
char acStack_8e0 [256];
|
|
char *local_7e0;
|
|
char acStack_7dc [256];
|
|
char *local_6dc;
|
|
char acStack_6d8 [256];
|
|
char *local_5d8;
|
|
char acStack_5d4 [256];
|
|
char *local_4d4;
|
|
char acStack_4d0 [256];
|
|
char *local_3d0;
|
|
char acStack_3cc [256];
|
|
char *local_2cc;
|
|
undefined1 auStack_2c8 [4];
|
|
int local_2c4 [5];
|
|
int *local_2b0;
|
|
int local_2ac [4];
|
|
undefined4 local_29c;
|
|
int *local_298;
|
|
undefined1 auStack_294 [4];
|
|
int local_290 [5];
|
|
int *local_27c;
|
|
int local_278 [5];
|
|
int *local_264;
|
|
int local_260 [4];
|
|
undefined4 local_250;
|
|
int *local_24c;
|
|
undefined1 auStack_248 [4];
|
|
int local_244 [5];
|
|
int *local_230;
|
|
int local_22c [5];
|
|
int *local_218;
|
|
int local_214 [4];
|
|
undefined4 local_204;
|
|
int *local_200;
|
|
undefined1 auStack_1fc [4];
|
|
int local_1f8 [5];
|
|
int *local_1e4;
|
|
int local_1e0 [5];
|
|
int *local_1cc;
|
|
int local_1c8 [4];
|
|
undefined4 local_1b8;
|
|
int *local_1b4;
|
|
undefined1 auStack_1b0 [4];
|
|
int local_1ac [5];
|
|
int *local_198;
|
|
int local_194 [5];
|
|
int *local_180;
|
|
int local_17c [4];
|
|
undefined4 local_16c;
|
|
int *local_168;
|
|
undefined1 auStack_164 [4];
|
|
int local_160 [5];
|
|
int *local_14c;
|
|
int local_148 [5];
|
|
int *local_134;
|
|
int local_130 [4];
|
|
int local_120;
|
|
int *local_11c;
|
|
string asStack_118 [256];
|
|
undefined1 auStack_18 [4];
|
|
|
|
p_Var7 = (_Locale_name_hint *)0x0;
|
|
*(undefined4 *)this = 0;
|
|
if (param_2 == (char *)0x0) {
|
|
_M_throw_on_null_name();
|
|
LAB_000366a4:
|
|
this_01 = (__Named_exception *)FUN_00030824(local_8f0 + 8);
|
|
FUN_00031c38(asStack_118,&LAB_00036a9c,acStack_3cc);
|
|
__Named_exception::__Named_exception(this_01,asStack_118);
|
|
*(undefined ***)this_01 = &PTR____Named_exception_00068ec0;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(this_01,&runtime_error::typeinfo,__Named_exception::~__Named_exception);
|
|
}
|
|
iVar2 = strcmp("*",param_2);
|
|
local_8f0 = 0x100;
|
|
if (iVar2 == 0) goto LAB_000366a4;
|
|
this_00 = (_Locale_impl *)operator_new(0x2c);
|
|
_Locale_impl::_Locale_impl(this_00,*(_Locale_impl **)param_1);
|
|
local_7e0 = param_2;
|
|
local_6dc = param_2;
|
|
local_5d8 = param_2;
|
|
local_4d4 = param_2;
|
|
local_3d0 = param_2;
|
|
local_2cc = param_2;
|
|
if ((param_3 & 0x20U) != 0) {
|
|
p_Var7 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_ctype_facets
|
|
(this_00,&local_2cc,acStack_3cc,(_Locale_name_hint *)0x0);
|
|
}
|
|
if ((param_3 & 0x100U) != 0) {
|
|
p_Var7 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_numeric_facets(this_00,&local_3d0,acStack_4d0,p_Var7);
|
|
}
|
|
if ((param_3 & 0x200U) != 0) {
|
|
p_Var7 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_time_facets(this_00,&local_4d4,acStack_5d4,p_Var7);
|
|
}
|
|
if ((param_3 & 0x10U) != 0) {
|
|
p_Var7 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_collate_facets(this_00,&local_5d8,acStack_6d8,p_Var7);
|
|
}
|
|
if ((param_3 & 0x40U) != 0) {
|
|
p_Var7 = (_Locale_name_hint *)
|
|
_Locale_impl::insert_monetary_facets(this_00,&local_6dc,acStack_7dc,p_Var7);
|
|
}
|
|
if ((param_3 & 0x400U) != 0) {
|
|
_Locale_impl::insert_messages_facets(this_00,&local_7e0,acStack_8e0,p_Var7);
|
|
}
|
|
__s1_00 = local_2cc;
|
|
__s2_00 = local_3d0;
|
|
__s2 = local_4d4;
|
|
__s2_01 = local_5d8;
|
|
__s2_02 = local_6dc;
|
|
__s2_03 = local_7e0;
|
|
__s1 = *(char **)(*(int *)param_1 + 0x1c);
|
|
if ((param_3 & 0x770U) == 0) {
|
|
LAB_00036154:
|
|
sVar3 = strlen(__s1);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
if ((uint)(iVar8 - iVar2) < sVar3) {
|
|
if (iVar8 != iVar2) {
|
|
__aeabi_memmove(iVar2,__s1);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
FUN_00037294(this_00 + 8,__s1 + (iVar8 - iVar2),__s1 + sVar3);
|
|
goto LAB_00036612;
|
|
}
|
|
if (sVar3 != 0) {
|
|
__aeabi_memmove(iVar2,__s1,sVar3);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
iVar2 = iVar2 + sVar3;
|
|
if (iVar2 == iVar8) goto LAB_00036612;
|
|
__aeabi_memmove(iVar2,iVar8);
|
|
iVar4 = *(int *)(this_00 + 0x18);
|
|
iVar2 = iVar2 - iVar8;
|
|
}
|
|
else {
|
|
local_8f8 = local_4d4;
|
|
iVar2 = strcmp(__s1,local_2cc);
|
|
if (((((iVar2 == 0) && (iVar2 = strcmp(__s1,__s2), iVar2 == 0)) &&
|
|
(iVar2 = strcmp(__s1,__s2_00), iVar2 == 0)) &&
|
|
((iVar2 = strcmp(__s1,__s2_01), iVar2 == 0 && (iVar2 = strcmp(__s1,__s2_02), iVar2 == 0))))
|
|
&& (iVar2 = strcmp(__s1,__s2_03), iVar2 == 0)) goto LAB_00036154;
|
|
if ((((param_3 & 0x770U) != 0x770) || (iVar2 = strcmp(__s1_00,__s2), iVar2 != 0)) ||
|
|
((iVar2 = strcmp(__s1_00,__s2_00), iVar2 != 0 ||
|
|
(((iVar2 = strcmp(__s1_00,__s2_01), iVar2 != 0 ||
|
|
(iVar2 = strcmp(__s1_00,__s2_02), iVar2 != 0)) ||
|
|
(iVar2 = strcmp(__s1_00,__s2_03), iVar2 != 0)))))) {
|
|
FUN_00031c38(local_160,"LC_CTYPE=",auStack_164);
|
|
if ((param_3 & 0x20U) == 0) {
|
|
__s1_00 = __s1;
|
|
}
|
|
uVar5 = FUN_0004d9d8(__s1_00,asStack_118,0,auStack_18);
|
|
FUN_000371e8(local_148,local_160,uVar5);
|
|
FUN_000371e8(local_130,local_148,&DAT_00036334);
|
|
piVar1 = local_11c;
|
|
uVar9 = local_120 - (int)local_11c;
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
p_Var6 = this_00 + 8;
|
|
if ((uint)(iVar8 - iVar2) < uVar9) {
|
|
if (iVar8 != iVar2) {
|
|
__aeabi_memmove(iVar2,local_11c);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
FUN_00037294(p_Var6,(int)piVar1 + (iVar8 - iVar2),local_120);
|
|
}
|
|
else {
|
|
if (uVar9 != 0) {
|
|
__aeabi_memmove(iVar2,local_11c,uVar9);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
iVar2 = iVar2 + uVar9;
|
|
if (iVar2 != iVar8) {
|
|
__aeabi_memmove(iVar2,iVar8);
|
|
*(int *)(this_00 + 0x18) = *(int *)(this_00 + 0x18) + (iVar2 - iVar8);
|
|
}
|
|
}
|
|
if ((local_11c != local_130) && (local_11c != (int *)0x0)) {
|
|
if ((uint)(local_130[0] - (int)local_11c) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_11c,local_130[0] - (int)local_11c);
|
|
}
|
|
else {
|
|
operator_delete(local_11c);
|
|
}
|
|
}
|
|
if ((local_134 != local_148) && (local_134 != (int *)0x0)) {
|
|
if ((uint)(local_148[0] - (int)local_134) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134);
|
|
}
|
|
else {
|
|
operator_delete(local_134);
|
|
}
|
|
}
|
|
if ((local_14c != local_160) && (local_14c != (int *)0x0)) {
|
|
if ((uint)(local_160[0] - (int)local_14c) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_14c,local_160[0] - (int)local_14c);
|
|
}
|
|
else {
|
|
operator_delete(local_14c);
|
|
}
|
|
}
|
|
FUN_00031c38(local_1ac,"LC_TIME=",auStack_1b0);
|
|
if ((param_3 & 0x200U) == 0) {
|
|
local_8f8 = __s1;
|
|
}
|
|
uVar5 = FUN_0004da18(local_8f8,asStack_118,0,auStack_18);
|
|
FUN_000371e8(local_194,local_1ac,uVar5);
|
|
FUN_000371e8(local_17c,local_194,&DAT_00036334);
|
|
FUN_00037294(p_Var6,local_168,local_16c);
|
|
if ((local_168 != local_17c) && (local_168 != (int *)0x0)) {
|
|
if ((uint)(local_17c[0] - (int)local_168) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_168,local_17c[0] - (int)local_168);
|
|
}
|
|
else {
|
|
operator_delete(local_168);
|
|
}
|
|
}
|
|
if ((local_180 != local_194) && (local_180 != (int *)0x0)) {
|
|
if ((uint)(local_194[0] - (int)local_180) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_180,local_194[0] - (int)local_180);
|
|
}
|
|
else {
|
|
operator_delete(local_180);
|
|
}
|
|
}
|
|
if ((local_198 != local_1ac) && (local_198 != (int *)0x0)) {
|
|
if ((uint)(local_1ac[0] - (int)local_198) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_198,local_1ac[0] - (int)local_198);
|
|
}
|
|
else {
|
|
operator_delete(local_198);
|
|
}
|
|
}
|
|
FUN_00031c38(local_1f8,"LC_NUMERIC=",auStack_1fc);
|
|
if ((param_3 & 0x100U) == 0) {
|
|
__s2_00 = __s1;
|
|
}
|
|
uVar5 = FUN_0004d9f8(__s2_00,asStack_118,0,auStack_18);
|
|
FUN_000371e8(local_1e0,local_1f8,uVar5);
|
|
FUN_000371e8(local_1c8,local_1e0,&DAT_00036780);
|
|
FUN_00037294(p_Var6,local_1b4,local_1b8);
|
|
if ((local_1b4 != local_1c8) && (local_1b4 != (int *)0x0)) {
|
|
if ((uint)(local_1c8[0] - (int)local_1b4) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_1b4,local_1c8[0] - (int)local_1b4);
|
|
}
|
|
else {
|
|
operator_delete(local_1b4);
|
|
}
|
|
}
|
|
if ((local_1cc != local_1e0) && (local_1cc != (int *)0x0)) {
|
|
if ((uint)(local_1e0[0] - (int)local_1cc) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_1cc,local_1e0[0] - (int)local_1cc);
|
|
}
|
|
else {
|
|
operator_delete(local_1cc);
|
|
}
|
|
}
|
|
if ((local_1e4 != local_1f8) && (local_1e4 != (int *)0x0)) {
|
|
if ((uint)(local_1f8[0] - (int)local_1e4) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_1e4,local_1f8[0] - (int)local_1e4);
|
|
}
|
|
else {
|
|
operator_delete(local_1e4);
|
|
}
|
|
}
|
|
FUN_00031c38(local_244,"LC_COLLATE=",auStack_248);
|
|
if ((param_3 & 0x10U) == 0) {
|
|
__s2_01 = __s1;
|
|
}
|
|
uVar5 = FUN_0004da38(__s2_01,asStack_118,0,auStack_18);
|
|
FUN_000371e8(local_22c,local_244,uVar5);
|
|
FUN_000371e8(local_214,local_22c,&DAT_00036780);
|
|
FUN_00037294(p_Var6,local_200,local_204);
|
|
if ((local_200 != local_214) && (local_200 != (int *)0x0)) {
|
|
if ((uint)(local_214[0] - (int)local_200) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_200,local_214[0] - (int)local_200);
|
|
}
|
|
else {
|
|
operator_delete(local_200);
|
|
}
|
|
}
|
|
if ((local_218 != local_22c) && (local_218 != (int *)0x0)) {
|
|
if ((uint)(local_22c[0] - (int)local_218) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_218,local_22c[0] - (int)local_218);
|
|
}
|
|
else {
|
|
operator_delete(local_218);
|
|
}
|
|
}
|
|
if ((local_230 != local_244) && (local_230 != (int *)0x0)) {
|
|
if ((uint)(local_244[0] - (int)local_230) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_230,local_244[0] - (int)local_230);
|
|
}
|
|
else {
|
|
operator_delete(local_230);
|
|
}
|
|
}
|
|
FUN_00031c38(local_290,"LC_MONETARY=",auStack_294);
|
|
if ((param_3 & 0x40U) == 0) {
|
|
__s2_02 = __s1;
|
|
}
|
|
uVar5 = FUN_0004da58(__s2_02,asStack_118,0,auStack_18);
|
|
FUN_000371e8(local_278,local_290,uVar5);
|
|
FUN_000371e8(local_260,local_278,&DAT_00036780);
|
|
FUN_00037294(p_Var6,local_24c,local_250);
|
|
if ((local_24c != local_260) && (local_24c != (int *)0x0)) {
|
|
if ((uint)(local_260[0] - (int)local_24c) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_24c,local_260[0] - (int)local_24c);
|
|
}
|
|
else {
|
|
operator_delete(local_24c);
|
|
}
|
|
}
|
|
if ((local_264 != local_278) && (local_264 != (int *)0x0)) {
|
|
if ((uint)(local_278[0] - (int)local_264) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_264,local_278[0] - (int)local_264);
|
|
}
|
|
else {
|
|
operator_delete(local_264);
|
|
}
|
|
}
|
|
if ((local_27c != local_290) && (local_27c != (int *)0x0)) {
|
|
if ((uint)(local_290[0] - (int)local_27c) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_27c,local_290[0] - (int)local_27c);
|
|
}
|
|
else {
|
|
operator_delete(local_27c);
|
|
}
|
|
}
|
|
FUN_00031c38(local_2c4,"LC_MESSAGES=",auStack_2c8);
|
|
if ((param_3 & 0x400U) == 0) {
|
|
__s2_03 = __s1;
|
|
}
|
|
uVar5 = FUN_0004da78(__s2_03,asStack_118,0,auStack_18);
|
|
FUN_000371e8(local_2ac,local_2c4,uVar5);
|
|
FUN_00037294(p_Var6,local_298,local_29c);
|
|
if ((local_298 != local_2ac) && (local_298 != (int *)0x0)) {
|
|
if ((uint)(local_2ac[0] - (int)local_298) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_298,local_2ac[0] - (int)local_298);
|
|
}
|
|
else {
|
|
operator_delete(local_298);
|
|
}
|
|
}
|
|
if ((local_2b0 != local_2c4) && (local_2b0 != (int *)0x0)) {
|
|
if ((uint)(local_2c4[0] - (int)local_2b0) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_2b0,local_2c4[0] - (int)local_2b0);
|
|
}
|
|
else {
|
|
operator_delete(local_2b0);
|
|
}
|
|
}
|
|
goto LAB_00036612;
|
|
}
|
|
sVar3 = strlen(__s1_00);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
if ((uint)(iVar8 - iVar2) < sVar3) {
|
|
if (iVar8 != iVar2) {
|
|
__aeabi_memmove(iVar2,__s1_00);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
FUN_00037294(this_00 + 8,__s1_00 + (iVar8 - iVar2),__s1_00 + sVar3);
|
|
goto LAB_00036612;
|
|
}
|
|
if (sVar3 != 0) {
|
|
__aeabi_memmove(iVar2,__s1_00,sVar3);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar2 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
iVar2 = iVar2 + sVar3;
|
|
if (iVar2 == iVar8) goto LAB_00036612;
|
|
__aeabi_memmove(iVar2,iVar8);
|
|
iVar4 = *(int *)(this_00 + 0x18);
|
|
iVar2 = iVar2 - iVar8;
|
|
}
|
|
*(int *)(this_00 + 0x18) = iVar4 + iVar2;
|
|
LAB_00036612:
|
|
uVar5 = _get_Locale_impl(this_00);
|
|
*(undefined4 *)this = uVar5;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC locale @ 00036b08
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00036c52) */
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
/* std::locale::locale(std::locale const&, std::locale const&, int) */
|
|
|
|
locale * __thiscall std::locale::locale(locale *this,locale *param_1,locale *param_2,int param_3)
|
|
|
|
{
|
|
bool bVar1;
|
|
_Locale_impl *this_00;
|
|
_Locale_impl *p_Var2;
|
|
size_t sVar3;
|
|
int iVar4;
|
|
undefined1 *puVar5;
|
|
undefined1 *puVar6;
|
|
undefined4 uVar7;
|
|
int iVar8;
|
|
char *__s;
|
|
int local_44 [4];
|
|
int local_34;
|
|
int *local_30;
|
|
int local_2c [4];
|
|
int local_1c;
|
|
int *local_18;
|
|
|
|
*(undefined4 *)this = 0;
|
|
this_00 = (_Locale_impl *)operator_new(0x2c);
|
|
_Locale_impl::_Locale_impl(this_00,*(_Locale_impl **)param_1);
|
|
p_Var2 = *(_Locale_impl **)param_2;
|
|
FUN_00036f1c(local_2c,*(int *)param_1 + 8);
|
|
if ((local_1c - (int)local_18 != 1) || (bVar1 = false, (char)*local_18 != '*')) {
|
|
FUN_00036f1c(local_44,*(int *)param_2 + 8);
|
|
bVar1 = true;
|
|
if ((local_34 - (int)local_30 == 1) && (bVar1 = true, (char)*local_30 == '*')) {
|
|
bVar1 = false;
|
|
}
|
|
if ((local_30 != local_44) && (local_30 != (int *)0x0)) {
|
|
if ((uint)(local_44[0] - (int)local_30) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_30,local_44[0] - (int)local_30);
|
|
}
|
|
else {
|
|
operator_delete(local_30);
|
|
}
|
|
}
|
|
}
|
|
if ((local_18 == local_2c) || (local_18 == (int *)0x0)) {
|
|
LAB_00036ba4:
|
|
if (bVar1) goto LAB_00036ba8;
|
|
LAB_00036c20:
|
|
if (*(undefined1 **)(this_00 + 0x18) == *(undefined1 **)(this_00 + 0x1c)) {
|
|
FUN_00037294(this_00 + 8,&DAT_00064e87,&DAT_00064e88);
|
|
goto LAB_00036c5a;
|
|
}
|
|
**(undefined1 **)(this_00 + 0x1c) = 0x2a;
|
|
puVar5 = *(undefined1 **)(this_00 + 0x18);
|
|
puVar6 = (undefined1 *)(*(int *)(this_00 + 0x1c) + 1);
|
|
if (puVar6 == puVar5) goto LAB_00036c5a;
|
|
*puVar6 = *puVar5;
|
|
puVar6 = puVar6 + (*(int *)(this_00 + 0x18) - (int)puVar5);
|
|
}
|
|
else {
|
|
if (0x80 < (uint)(local_2c[0] - (int)local_18)) {
|
|
operator_delete(local_18);
|
|
goto LAB_00036ba4;
|
|
}
|
|
__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
if (!bVar1) goto LAB_00036c20;
|
|
LAB_00036ba8:
|
|
__s = *(char **)(*(int *)param_1 + 0x1c);
|
|
sVar3 = strlen(__s);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar4 = *(int *)(this_00 + 0x1c);
|
|
if ((uint)(iVar8 - iVar4) < sVar3) {
|
|
if (iVar8 != iVar4) {
|
|
__aeabi_memmove(iVar4,__s);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar4 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
FUN_00037294(this_00 + 8,__s + (iVar8 - iVar4),__s + sVar3);
|
|
goto LAB_00036c5a;
|
|
}
|
|
if (sVar3 != 0) {
|
|
__aeabi_memmove(iVar4,__s,sVar3);
|
|
iVar8 = *(int *)(this_00 + 0x18);
|
|
iVar4 = *(int *)(this_00 + 0x1c);
|
|
}
|
|
iVar4 = iVar4 + sVar3;
|
|
if (iVar4 == iVar8) goto LAB_00036c5a;
|
|
__aeabi_memmove(iVar4,iVar8);
|
|
puVar6 = (undefined1 *)(*(int *)(this_00 + 0x18) + (iVar4 - iVar8));
|
|
}
|
|
*(undefined1 **)(this_00 + 0x18) = puVar6;
|
|
LAB_00036c5a:
|
|
if (param_3 << 0x1b < 0) {
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&collate<char>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&collate<wchar_t>::id);
|
|
}
|
|
if (param_3 << 0x1a < 0) {
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&ctype<char>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&codecvt<char,char,mbstate_t>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&ctype<wchar_t>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&codecvt<wchar_t,char,mbstate_t>::id);
|
|
}
|
|
if (param_3 << 0x19 < 0) {
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct<char,true>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct<char,false>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d0c);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d10);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct<wchar_t,true>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&moneypunct<wchar_t,false>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d14);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d18);
|
|
}
|
|
if (param_3 << 0x17 < 0) {
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&numpunct<char>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d1c);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d20);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&numpunct<wchar_t>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d24);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d28);
|
|
}
|
|
if (param_3 << 0x16 < 0) {
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d2c);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d30);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d34);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&DAT_00070d38);
|
|
}
|
|
if (param_3 << 0x15 < 0) {
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&messages<char>::id);
|
|
_Locale_impl::insert(this_00,p_Var2,(id *)&messages<wchar_t>::id);
|
|
}
|
|
uVar7 = _get_Locale_impl(this_00);
|
|
*(undefined4 *)this = uVar7;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC name @ 00036e90
|
|
|
|
/* std::locale::name() const */
|
|
|
|
void std::locale::name(void)
|
|
|
|
{
|
|
undefined4 in_r0;
|
|
int *in_r1;
|
|
|
|
FUN_00036f1c(in_r0,*in_r1 + 8);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~locale @ 00036e9e
|
|
|
|
/* std::locale::~locale() */
|
|
|
|
locale * __thiscall std::locale::~locale(locale *this)
|
|
|
|
{
|
|
if (*(int *)this != 0) {
|
|
FUN_0003968c(this);
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator= @ 00036eb8
|
|
|
|
/* std::locale::TEMPNAMEPLACEHOLDERVALUE(std::locale const&) */
|
|
|
|
locale * __thiscall std::locale::operator=(locale *this,locale *param_1)
|
|
|
|
{
|
|
_Locale_impl *p_Var1;
|
|
undefined4 uVar2;
|
|
|
|
p_Var1 = *(_Locale_impl **)param_1;
|
|
if (*(_Locale_impl **)this != p_Var1) {
|
|
if (*(_Locale_impl **)this != (_Locale_impl *)0x0) {
|
|
FUN_0003968c(this);
|
|
p_Var1 = *(_Locale_impl **)param_1;
|
|
}
|
|
uVar2 = _get_Locale_impl(p_Var1);
|
|
*(undefined4 *)this = uVar2;
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_get_facet @ 00036ee2
|
|
|
|
/* std::locale::_M_get_facet(std::locale::id const&) const */
|
|
|
|
undefined4 __thiscall std::locale::_M_get_facet(locale *this,id *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int iVar2;
|
|
|
|
iVar2 = *(int *)(*(int *)this + 0x20);
|
|
uVar1 = 0;
|
|
if (*(uint *)param_1 < (uint)(*(int *)(*(int *)this + 0x24) - iVar2 >> 2)) {
|
|
uVar1 = *(undefined4 *)(iVar2 + *(uint *)param_1 * 4);
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_use_facet @ 00036efa
|
|
|
|
/* std::locale::_M_use_facet(std::locale::id const&) const */
|
|
|
|
undefined4 * __thiscall std::locale::_M_use_facet(locale *this,id *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
undefined4 *puVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
undefined8 uVar7;
|
|
uint uStack_20;
|
|
|
|
iVar1 = *(int *)(*(int *)this + 0x20);
|
|
if ((*(uint *)param_1 < (uint)(*(int *)(*(int *)this + 0x24) - iVar1 >> 2)) &&
|
|
(puVar2 = *(undefined4 **)(iVar1 + *(uint *)param_1 * 4), puVar2 != (undefined4 *)0x0)) {
|
|
return puVar2;
|
|
}
|
|
uVar7 = _Locale_impl::_M_throw_bad_cast();
|
|
iVar1 = (int)((ulonglong)uVar7 >> 0x20);
|
|
puVar2 = (undefined4 *)uVar7;
|
|
puVar2[4] = puVar2;
|
|
puVar2[5] = puVar2;
|
|
iVar5 = *(int *)(iVar1 + 0x10);
|
|
iVar1 = *(int *)(iVar1 + 0x14);
|
|
iVar4 = iVar5 - iVar1;
|
|
uVar6 = iVar4 + 1;
|
|
if (uVar6 != 0) {
|
|
puVar3 = puVar2;
|
|
if (0x10 < uVar6) {
|
|
uStack_20 = uVar6;
|
|
if (uVar6 < 0x81) {
|
|
puVar3 = (undefined4 *)__node_alloc::_M_allocate(&uStack_20);
|
|
uVar6 = uStack_20;
|
|
}
|
|
else {
|
|
puVar3 = (undefined4 *)operator_new(uVar6);
|
|
}
|
|
puVar2[4] = puVar3;
|
|
puVar2[5] = puVar3;
|
|
*puVar2 = (undefined1 *)((int)puVar3 + uVar6);
|
|
}
|
|
if (iVar5 != iVar1) {
|
|
__aeabi_memcpy(puVar3);
|
|
puVar3 = (undefined4 *)((int)puVar3 + iVar4);
|
|
}
|
|
puVar2[4] = puVar3;
|
|
*(undefined1 *)puVar3 = 0;
|
|
return puVar2;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
__stl_throw_length_error("basic_string");
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00036f1c @ 00036f1c
|
|
|
|
undefined4 * FUN_00036f1c(undefined4 *param_1,int param_2)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint local_18;
|
|
|
|
param_1[4] = param_1;
|
|
param_1[5] = param_1;
|
|
iVar4 = *(int *)(param_2 + 0x10);
|
|
iVar2 = *(int *)(param_2 + 0x14);
|
|
iVar3 = iVar4 - iVar2;
|
|
uVar5 = iVar3 + 1;
|
|
if (uVar5 != 0) {
|
|
puVar1 = param_1;
|
|
if (0x10 < uVar5) {
|
|
local_18 = uVar5;
|
|
if (uVar5 < 0x81) {
|
|
puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar5 = local_18;
|
|
}
|
|
else {
|
|
puVar1 = (undefined4 *)operator_new(uVar5);
|
|
}
|
|
param_1[4] = puVar1;
|
|
param_1[5] = puVar1;
|
|
*param_1 = (undefined1 *)((int)puVar1 + uVar5);
|
|
}
|
|
if (iVar4 != iVar2) {
|
|
__aeabi_memcpy(puVar1);
|
|
puVar1 = (undefined4 *)((int)puVar1 + iVar3);
|
|
}
|
|
param_1[4] = puVar1;
|
|
*(undefined1 *)puVar1 = 0;
|
|
return param_1;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator== @ 00036fbc
|
|
|
|
/* std::locale::TEMPNAMEPLACEHOLDERVALUE(std::locale const&) const */
|
|
|
|
undefined4 __thiscall std::locale::operator==(locale *this,locale *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
int *piVar3;
|
|
int local_5c [4];
|
|
int local_4c;
|
|
int *local_48;
|
|
int local_44 [4];
|
|
int local_34;
|
|
int *local_30;
|
|
int local_2c [4];
|
|
int local_1c;
|
|
int *local_18;
|
|
|
|
if (*(int *)this == *(int *)param_1) {
|
|
uVar2 = 1;
|
|
}
|
|
else {
|
|
FUN_00036f1c(local_2c,*(int *)this + 8);
|
|
FUN_00036f1c(local_44,*(int *)param_1 + 8);
|
|
piVar3 = local_30;
|
|
uVar2 = 0;
|
|
if ((local_1c - (int)local_18 == local_34 - (int)local_30) &&
|
|
(iVar1 = memcmp(local_18,local_30,local_1c - (int)local_18), iVar1 == 0)) {
|
|
FUN_00036f1c(local_5c,*(int *)this + 8);
|
|
uVar2 = 1;
|
|
if ((local_4c - (int)local_48 == 1) && (uVar2 = 1, (char)*local_48 == '*')) {
|
|
uVar2 = 0;
|
|
}
|
|
piVar3 = local_30;
|
|
if ((local_48 != local_5c) && (local_48 != (int *)0x0)) {
|
|
if ((uint)(local_5c[0] - (int)local_48) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_48,local_5c[0] - (int)local_48);
|
|
piVar3 = local_30;
|
|
}
|
|
else {
|
|
operator_delete(local_48);
|
|
piVar3 = local_30;
|
|
}
|
|
}
|
|
}
|
|
if ((piVar3 != local_44) && (piVar3 != (int *)0x0)) {
|
|
if ((uint)(local_44[0] - (int)piVar3) < 0x81) {
|
|
__node_alloc::_M_deallocate(piVar3,local_44[0] - (int)piVar3);
|
|
}
|
|
else {
|
|
operator_delete(piVar3);
|
|
}
|
|
}
|
|
if ((local_18 != local_2c) && (local_18 != (int *)0x0)) {
|
|
if ((uint)(local_2c[0] - (int)local_18) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC operator!= @ 000370e6
|
|
|
|
/* std::locale::TEMPNAMEPLACEHOLDERVALUE(std::locale const&) const */
|
|
|
|
uint __thiscall std::locale::operator!=(locale *this,locale *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = operator==(this,param_1);
|
|
return uVar1 ^ 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC global @ 000370f4
|
|
|
|
/* std::locale::global(std::locale const&) */
|
|
|
|
void __thiscall std::locale::global(locale *this,locale *param_1)
|
|
|
|
{
|
|
bool bVar1;
|
|
undefined4 *puVar2;
|
|
undefined4 uVar3;
|
|
int *piVar4;
|
|
int local_44 [5];
|
|
int *local_30;
|
|
int local_2c [4];
|
|
int local_1c;
|
|
int *local_18;
|
|
|
|
puVar2 = (undefined4 *)FUN_000395ec();
|
|
uVar3 = _get_Locale_impl((_Locale_impl *)*puVar2);
|
|
*(undefined4 *)this = uVar3;
|
|
piVar4 = (int *)FUN_000395ec();
|
|
if (*piVar4 != *(int *)param_1) {
|
|
FUN_000395ec();
|
|
FUN_0003968c();
|
|
uVar3 = _get_Locale_impl(*(_Locale_impl **)param_1);
|
|
puVar2 = (undefined4 *)FUN_000395ec();
|
|
*puVar2 = uVar3;
|
|
FUN_00036f1c(local_2c,*(int *)param_1 + 8);
|
|
bVar1 = true;
|
|
if ((local_1c - (int)local_18 == 1) && (bVar1 = true, (char)*local_18 == '*')) {
|
|
bVar1 = false;
|
|
}
|
|
if ((local_18 != local_2c) && (local_18 != (int *)0x0)) {
|
|
if ((uint)(local_2c[0] - (int)local_18) < 0x81) {
|
|
__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
if (bVar1) {
|
|
FUN_00036f1c(local_44,*(int *)param_1 + 8);
|
|
setlocale(6,(char *)local_30);
|
|
if ((local_30 != local_44) && (local_30 != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_44[0] - (int)local_30)) {
|
|
operator_delete(local_30);
|
|
return;
|
|
}
|
|
__node_alloc::_M_deallocate(local_30,local_44[0] - (int)local_30);
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000371e8 @ 000371e8
|
|
|
|
void FUN_000371e8(undefined4 *param_1,int param_2,char *param_3)
|
|
|
|
{
|
|
size_t sVar1;
|
|
undefined4 *puVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint local_1c;
|
|
undefined1 auStack_18 [4];
|
|
|
|
sVar1 = strlen(param_3);
|
|
iVar4 = *(int *)(param_2 + 0x10);
|
|
iVar3 = *(int *)(param_2 + 0x14);
|
|
param_1[4] = param_1;
|
|
param_1[5] = param_1;
|
|
uVar5 = (sVar1 + iVar4 + 1) - iVar3;
|
|
if (uVar5 != 0) {
|
|
puVar2 = param_1;
|
|
if (0x10 < uVar5) {
|
|
local_1c = uVar5;
|
|
if (uVar5 < 0x81) {
|
|
puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_1c);
|
|
uVar5 = local_1c;
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)operator_new(uVar5);
|
|
}
|
|
param_1[4] = puVar2;
|
|
param_1[5] = puVar2;
|
|
*param_1 = (undefined1 *)((int)puVar2 + uVar5);
|
|
}
|
|
*(undefined1 *)puVar2 = 0;
|
|
FUN_00037294(param_1,*(undefined4 *)(param_2 + 0x14),*(undefined4 *)(param_2 + 0x10));
|
|
FUN_000373cc(param_1,param_3,param_3 + sVar1,auStack_18);
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00037294 @ 00037294
|
|
|
|
int * FUN_00037294(int *param_1,undefined1 *param_2,undefined1 *param_3)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
undefined1 *puVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int *piVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
int *piVar8;
|
|
uint uVar9;
|
|
undefined1 *puVar10;
|
|
uint local_28;
|
|
uint local_18;
|
|
|
|
if (param_2 != param_3) {
|
|
uVar9 = (int)param_3 - (int)param_2;
|
|
piVar8 = (int *)param_1[5];
|
|
if (piVar8 == param_1) {
|
|
puVar2 = (undefined1 *)param_1[4];
|
|
piVar5 = param_1 + 4;
|
|
}
|
|
else {
|
|
puVar2 = (undefined1 *)param_1[4];
|
|
piVar5 = (int *)*param_1;
|
|
}
|
|
if (uVar9 < (uint)((int)piVar5 - (int)puVar2)) {
|
|
puVar1 = param_2 + 1;
|
|
if (0 < (int)param_3 - (int)puVar1) {
|
|
param_3 = param_3 + (1 - (int)puVar1);
|
|
do {
|
|
puVar2 = puVar2 + 1;
|
|
*puVar2 = *puVar1;
|
|
param_3 = param_3 + -1;
|
|
puVar1 = puVar1 + 1;
|
|
} while (1 < (int)param_3);
|
|
puVar2 = (undefined1 *)param_1[4];
|
|
}
|
|
puVar2[uVar9] = 0;
|
|
*(undefined1 *)param_1[4] = *param_2;
|
|
param_1[4] = param_1[4] + uVar9;
|
|
}
|
|
else {
|
|
uVar3 = (int)puVar2 - (int)piVar8;
|
|
if (-uVar3 - 2 < uVar9) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar6 = uVar3;
|
|
if (uVar3 <= uVar9) {
|
|
uVar6 = uVar9;
|
|
}
|
|
uVar7 = uVar3 + uVar6 + 1;
|
|
uVar4 = 0xfffffffe;
|
|
if (uVar3 <= uVar7) {
|
|
uVar4 = uVar7;
|
|
}
|
|
local_28 = 0xfffffffe;
|
|
if (uVar3 + uVar6 != -2) {
|
|
local_28 = uVar4;
|
|
}
|
|
if (local_28 == 0) {
|
|
local_28 = 0;
|
|
puVar1 = (undefined1 *)0x0;
|
|
}
|
|
else {
|
|
local_18 = local_28;
|
|
if (local_28 < 0x81) {
|
|
puVar1 = (undefined1 *)std::__node_alloc::_M_allocate(&local_18);
|
|
local_28 = local_18;
|
|
}
|
|
else {
|
|
puVar1 = (undefined1 *)operator_new(local_28);
|
|
}
|
|
puVar2 = (undefined1 *)param_1[4];
|
|
piVar8 = (int *)param_1[5];
|
|
}
|
|
puVar10 = puVar1;
|
|
if (0 < (int)puVar2 - (int)piVar8) {
|
|
puVar2 = puVar2 + (1 - (int)piVar8);
|
|
do {
|
|
*puVar10 = (char)*piVar8;
|
|
puVar2 = puVar2 + -1;
|
|
puVar10 = puVar10 + 1;
|
|
piVar8 = (int *)((int)piVar8 + 1);
|
|
} while (1 < (int)puVar2);
|
|
}
|
|
if (0 < (int)uVar9) {
|
|
param_3 = param_3 + (1 - (int)param_2);
|
|
do {
|
|
*puVar10 = *param_2;
|
|
param_3 = param_3 + -1;
|
|
puVar10 = puVar10 + 1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < (int)param_3);
|
|
}
|
|
*puVar10 = 0;
|
|
piVar8 = (int *)param_1[5];
|
|
if ((piVar8 != param_1) && (piVar8 != (int *)0x0)) {
|
|
if ((uint)(*param_1 - (int)piVar8) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar8,*param_1 - (int)piVar8);
|
|
}
|
|
else {
|
|
operator_delete(piVar8);
|
|
}
|
|
}
|
|
param_1[4] = (int)puVar10;
|
|
param_1[5] = (int)puVar1;
|
|
*param_1 = (int)(puVar1 + local_28);
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000373cc @ 000373cc
|
|
|
|
int * FUN_000373cc(int *param_1,undefined1 *param_2,undefined1 *param_3)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
int *piVar2;
|
|
void *pvVar3;
|
|
int *piVar4;
|
|
undefined1 *puVar5;
|
|
undefined1 *puVar6;
|
|
undefined1 *puVar7;
|
|
int *piVar8;
|
|
void *pvVar9;
|
|
undefined1 *local_18;
|
|
|
|
if (param_2 != param_3) {
|
|
puVar1 = param_3 + -(int)param_2;
|
|
piVar4 = (int *)param_1[5];
|
|
if (piVar4 == param_1) {
|
|
piVar2 = (int *)param_1[4];
|
|
puVar6 = (undefined1 *)((int)param_1 + (0x10 - (int)piVar2));
|
|
}
|
|
else {
|
|
piVar2 = (int *)param_1[4];
|
|
puVar6 = (undefined1 *)(*param_1 - (int)piVar2);
|
|
}
|
|
piVar8 = param_1 + 4;
|
|
if (puVar1 < puVar6) {
|
|
*(undefined1 *)piVar2 = *param_2;
|
|
param_2 = param_2 + 1;
|
|
if (param_2 != param_3) {
|
|
__aeabi_memcpy(*piVar8 + 1,param_2,(int)param_3 - (int)param_2);
|
|
}
|
|
puVar1[*piVar8] = 0;
|
|
*piVar8 = (int)(puVar1 + *piVar8);
|
|
}
|
|
else {
|
|
puVar6 = (undefined1 *)((int)piVar2 - (int)piVar4);
|
|
if ((undefined1 *)(-2 - (int)puVar6) < puVar1) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
puVar7 = puVar6;
|
|
if (puVar6 <= puVar1) {
|
|
puVar7 = puVar1;
|
|
}
|
|
puVar7 = puVar6 + (int)puVar7;
|
|
puVar5 = (undefined1 *)0xfffffffe;
|
|
if (puVar6 <= puVar7 + 1) {
|
|
puVar5 = puVar7 + 1;
|
|
}
|
|
puVar6 = (undefined1 *)0xfffffffe;
|
|
if (puVar7 != (undefined1 *)0xfffffffe) {
|
|
puVar6 = puVar5;
|
|
}
|
|
puVar7 = (undefined1 *)0x0;
|
|
if (puVar6 == (undefined1 *)0x0) {
|
|
pvVar3 = (void *)0x0;
|
|
}
|
|
else {
|
|
local_18 = puVar6;
|
|
if (puVar6 < (undefined1 *)0x81) {
|
|
pvVar3 = (void *)std::__node_alloc::_M_allocate((uint *)&local_18);
|
|
puVar7 = local_18;
|
|
}
|
|
else {
|
|
pvVar3 = operator_new((uint)puVar6);
|
|
puVar7 = puVar6;
|
|
}
|
|
piVar2 = (int *)param_1[4];
|
|
piVar4 = (int *)param_1[5];
|
|
}
|
|
pvVar9 = pvVar3;
|
|
if (piVar2 != piVar4) {
|
|
__aeabi_memcpy(pvVar3,piVar4,(int)piVar2 - (int)piVar4);
|
|
pvVar9 = (void *)((int)pvVar3 + ((int)piVar2 - (int)piVar4));
|
|
}
|
|
__aeabi_memcpy(pvVar9,param_2);
|
|
*(undefined1 *)((int)pvVar9 + (int)puVar1) = 0;
|
|
piVar4 = (int *)param_1[5];
|
|
if ((piVar4 != param_1) && (piVar4 != (int *)0x0)) {
|
|
if ((uint)(*param_1 - (int)piVar4) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar4,*param_1 - (int)piVar4);
|
|
}
|
|
else {
|
|
operator_delete(piVar4);
|
|
}
|
|
}
|
|
param_1[4] = (int)((int)pvVar9 + (int)puVar1);
|
|
param_1[5] = (int)pvVar3;
|
|
*param_1 = (int)((int)pvVar3 + (int)puVar7);
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000374ec @ 000374ec
|
|
|
|
int FUN_000374ec(int param_1)
|
|
|
|
{
|
|
if (param_1 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(param_1 + 8));
|
|
*(int *)(param_1 + 4) = *(int *)(param_1 + 4) + 1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 8));
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00037510 @ 00037510
|
|
|
|
void FUN_00037510(int *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar2 = *param_1;
|
|
if (iVar2 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(iVar2 + 8));
|
|
iVar1 = *(int *)(iVar2 + 4) + -1;
|
|
*(int *)(iVar2 + 4) = iVar1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(iVar2 + 8));
|
|
if (iVar1 == 0) {
|
|
if ((int *)*param_1 != (int *)0x0) {
|
|
(**(code **)(*(int *)*param_1 + 4))();
|
|
}
|
|
*param_1 = 0;
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC Init @ 00037554
|
|
|
|
/* std::_Locale_impl::Init::Init() */
|
|
|
|
Init * __thiscall std::_Locale_impl::Init::Init(Init *this)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
|
|
uVar1 = FUN_00057b68(&DAT_00070d48,0,0);
|
|
if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d48), iVar2 != 0)) {
|
|
DAT_00070d40 = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)&DAT_00070d44,(pthread_mutexattr_t *)0x0);
|
|
__cxa_atexit(0x37847,&DAT_00070d40,&DAT_0006b000);
|
|
FUN_0004e40c(&DAT_00070d48);
|
|
}
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070d44);
|
|
iVar2 = DAT_00070d40;
|
|
DAT_00070d40 = DAT_00070d40 + 1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070d44);
|
|
if (iVar2 == 0) {
|
|
DAT_00070d10 = 9;
|
|
DAT_00070d0c = 8;
|
|
DAT_00070d1c = 10;
|
|
DAT_00070d20 = 0xb;
|
|
DAT_00070d2c = 0xc;
|
|
DAT_00070d30 = 0xd;
|
|
DAT_00070d14 = 0x15;
|
|
DAT_00070d18 = 0x16;
|
|
DAT_00070d24 = 0x17;
|
|
DAT_00070d28 = 0x18;
|
|
DAT_00070d34 = 0x19;
|
|
DAT_00070d38 = 0x1a;
|
|
make_classic_locale();
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_count @ 0003768c
|
|
|
|
/* std::_Locale_impl::Init::_M_count() const */
|
|
|
|
undefined4 * std::_Locale_impl::Init::_M_count(void)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
|
|
uVar1 = FUN_00057b68(&DAT_00070d48,0,0);
|
|
if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d48), iVar2 != 0)) {
|
|
DAT_00070d40 = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)&DAT_00070d44,(pthread_mutexattr_t *)0x0);
|
|
__cxa_atexit(0x37847,&DAT_00070d40,&DAT_0006b000);
|
|
FUN_0004e40c(&DAT_00070d48);
|
|
}
|
|
return &DAT_00070d40;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _S_initialize @ 0003770c
|
|
|
|
/* std::_Locale_impl::_S_initialize() */
|
|
|
|
void std::_Locale_impl::_S_initialize(void)
|
|
|
|
{
|
|
DAT_00070d10 = 9;
|
|
DAT_00070d0c = 8;
|
|
DAT_00070d1c = 10;
|
|
DAT_00070d20 = 0xb;
|
|
DAT_00070d2c = 0xc;
|
|
DAT_00070d30 = 0xd;
|
|
DAT_00070d14 = 0x15;
|
|
DAT_00070d18 = 0x16;
|
|
DAT_00070d24 = 0x17;
|
|
DAT_00070d28 = 0x18;
|
|
DAT_00070d34 = 0x19;
|
|
DAT_00070d38 = 0x1a;
|
|
make_classic_locale();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~Init @ 000377a8
|
|
|
|
/* std::_Locale_impl::Init::~Init() */
|
|
|
|
Init * __thiscall std::_Locale_impl::Init::~Init(Init *this)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
|
|
uVar1 = FUN_00057b68(&DAT_00070d48,0,0);
|
|
if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d48), iVar2 != 0)) {
|
|
DAT_00070d40 = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)&DAT_00070d44,(pthread_mutexattr_t *)0x0);
|
|
__cxa_atexit(0x37847,&DAT_00070d40,&DAT_0006b000);
|
|
FUN_0004e40c(&DAT_00070d48);
|
|
}
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070d44);
|
|
DAT_00070d40 = DAT_00070d40 + -1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070d44);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _S_uninitialize @ 00037844
|
|
|
|
/* std::_Locale_impl::_S_uninitialize() */
|
|
|
|
void std::_Locale_impl::_S_uninitialize(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00037846 @ 00037846
|
|
|
|
int FUN_00037846(int param_1)
|
|
|
|
{
|
|
pthread_mutex_destroy((pthread_mutex_t *)(param_1 + 4));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Locale_impl @ 00037858
|
|
|
|
/* std::_Locale_impl::_Locale_impl(char const*) */
|
|
|
|
_Locale_impl * __thiscall std::_Locale_impl::_Locale_impl(_Locale_impl *this,char *param_1)
|
|
|
|
{
|
|
undefined4 in_r3;
|
|
pthread_mutex_t *__mutex;
|
|
undefined1 auStack_18 [4];
|
|
|
|
*(undefined4 *)this = 0;
|
|
__mutex = (pthread_mutex_t *)(this + 4);
|
|
pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0);
|
|
FUN_00031c38(this + 8,param_1,auStack_18,in_r3,this + 8,__mutex);
|
|
*(undefined4 *)(this + 0x20) = 0;
|
|
*(undefined4 *)(this + 0x24) = 0;
|
|
*(undefined4 *)(this + 0x28) = 0;
|
|
FUN_000378f8(this + 0x20,locale::id::_S_max);
|
|
Init::Init((Init *)&DAT_00070d50);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000378f8 @ 000378f8
|
|
|
|
void FUN_000378f8(int *param_1,uint param_2)
|
|
|
|
{
|
|
void *pvVar1;
|
|
void *pvVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
uint local_1c;
|
|
uint local_18;
|
|
|
|
iVar5 = *param_1;
|
|
if ((uint)(param_1[2] - iVar5 >> 2) < param_2) {
|
|
if (param_2 >> 0x1e != 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("vector");
|
|
}
|
|
iVar4 = param_1[1];
|
|
iVar3 = iVar4 - iVar5;
|
|
if (iVar5 == 0) {
|
|
param_2 = param_2 << 2;
|
|
local_1c = param_2;
|
|
if (param_2 < 0x81) {
|
|
pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_1c);
|
|
}
|
|
else {
|
|
pvVar1 = operator_new(param_2);
|
|
local_1c = param_2;
|
|
}
|
|
param_2 = local_1c >> 2;
|
|
}
|
|
else {
|
|
param_2 = param_2 << 2;
|
|
local_18 = param_2;
|
|
if (param_2 < 0x81) {
|
|
pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_18);
|
|
param_2 = local_18;
|
|
}
|
|
else {
|
|
pvVar1 = operator_new(param_2);
|
|
}
|
|
param_2 = param_2 >> 2;
|
|
if (iVar4 != iVar5) {
|
|
__aeabi_memcpy(pvVar1,iVar5,iVar3);
|
|
}
|
|
pvVar2 = (void *)*param_1;
|
|
if (pvVar2 != (void *)0x0) {
|
|
if ((uint)(param_1[2] - (int)pvVar2) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar2,param_1[2] - (int)pvVar2);
|
|
}
|
|
else {
|
|
operator_delete(pvVar2);
|
|
}
|
|
}
|
|
}
|
|
*param_1 = (int)pvVar1;
|
|
param_1[1] = (int)((int)pvVar1 + (iVar3 >> 2) * 4);
|
|
param_1[2] = (int)((int)pvVar1 + param_2 * 4);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Locale_impl @ 000379b8
|
|
|
|
/* std::_Locale_impl::_Locale_impl(std::_Locale_impl const&) */
|
|
|
|
_Locale_impl * __thiscall std::_Locale_impl::_Locale_impl(_Locale_impl *this,_Locale_impl *param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
|
|
*(undefined4 *)this = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 4),(pthread_mutexattr_t *)0x0);
|
|
FUN_00036f1c(this + 8,param_1 + 8);
|
|
*(undefined4 *)(this + 0x20) = 0;
|
|
*(undefined4 *)(this + 0x24) = 0;
|
|
*(undefined4 *)(this + 0x28) = 0;
|
|
piVar1 = *(int **)(param_1 + 0x24);
|
|
for (piVar3 = *(int **)(param_1 + 0x20); piVar3 != piVar1; piVar3 = piVar3 + 1) {
|
|
iVar2 = *piVar3;
|
|
if (iVar2 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(iVar2 + 8));
|
|
*(int *)(iVar2 + 4) = *(int *)(iVar2 + 4) + 1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(iVar2 + 8));
|
|
}
|
|
}
|
|
FUN_00037a88(this + 0x20,param_1 + 0x20);
|
|
Init::Init((Init *)&DAT_00070d50);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00037a88 @ 00037a88
|
|
|
|
int * FUN_00037a88(int *param_1,int *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
void *pvVar3;
|
|
uint uVar4;
|
|
void *pvVar5;
|
|
undefined4 uVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
int iVar10;
|
|
uint uVar11;
|
|
uint local_18;
|
|
|
|
if (param_2 != param_1) {
|
|
iVar9 = *param_2;
|
|
iVar1 = param_2[1];
|
|
uVar11 = iVar1 - iVar9;
|
|
uVar8 = (int)uVar11 >> 2;
|
|
iVar2 = *param_1;
|
|
if ((uint)(param_1[2] - iVar2 >> 2) < uVar8) {
|
|
if (uVar8 >> 0x1e != 0) {
|
|
FUN_00030824(4);
|
|
uVar6 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar6,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
local_18 = uVar11;
|
|
if (uVar11 < 0x81) {
|
|
pvVar3 = (void *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar4 = local_18;
|
|
}
|
|
else {
|
|
pvVar3 = operator_new(uVar11);
|
|
uVar4 = uVar11;
|
|
}
|
|
if (iVar1 != iVar9) {
|
|
__aeabi_memcpy(pvVar3,iVar9,uVar11);
|
|
}
|
|
pvVar5 = (void *)*param_1;
|
|
if (pvVar5 != (void *)0x0) {
|
|
if ((uint)(param_1[2] - (int)pvVar5) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar5,param_1[2] - (int)pvVar5);
|
|
}
|
|
else {
|
|
operator_delete(pvVar5);
|
|
}
|
|
}
|
|
*param_1 = (int)pvVar3;
|
|
param_1[2] = (int)pvVar3 + (uVar4 & 0xfffffffc);
|
|
}
|
|
else {
|
|
iVar7 = param_1[1];
|
|
iVar10 = iVar7 - iVar2;
|
|
if ((uint)(iVar10 >> 2) < uVar8) {
|
|
if (iVar10 != 0) {
|
|
__aeabi_memmove(iVar2,iVar9,iVar10);
|
|
iVar9 = *param_2;
|
|
iVar1 = param_2[1];
|
|
iVar2 = *param_1;
|
|
iVar7 = param_1[1];
|
|
}
|
|
iVar9 = iVar9 + (iVar7 - iVar2);
|
|
if (iVar1 != iVar9) {
|
|
__aeabi_memcpy(iVar7,iVar9,iVar1 - iVar9);
|
|
}
|
|
}
|
|
else if (uVar11 != 0) {
|
|
__aeabi_memmove(iVar2,iVar9,uVar11);
|
|
}
|
|
}
|
|
param_1[1] = *param_1 + uVar8 * 4;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Locale_impl @ 00037b90
|
|
|
|
/* std::_Locale_impl::_Locale_impl(unsigned int, char const*) */
|
|
|
|
_Locale_impl * __thiscall
|
|
std::_Locale_impl::_Locale_impl(_Locale_impl *this,uint param_1,char *param_2)
|
|
|
|
{
|
|
_Locale_impl *p_Var1;
|
|
void *pvVar2;
|
|
undefined4 uVar3;
|
|
uint uVar4;
|
|
void *pvVar5;
|
|
uint uVar6;
|
|
pthread_mutex_t *__mutex;
|
|
undefined1 auStack_1c [4];
|
|
uint local_18;
|
|
|
|
*(undefined4 *)this = 0;
|
|
__mutex = (pthread_mutex_t *)(this + 4);
|
|
pthread_mutex_init(__mutex,(pthread_mutexattr_t *)0x0);
|
|
p_Var1 = this + 8;
|
|
FUN_00031c38(p_Var1,param_2,auStack_1c);
|
|
*(undefined4 *)(this + 0x20) = 0;
|
|
*(undefined4 *)(this + 0x24) = 0;
|
|
*(undefined4 *)(this + 0x28) = 0;
|
|
if (param_1 >> 0x1e == 0) {
|
|
if (param_1 == 0) {
|
|
*(undefined4 *)(this + 0x20) = 0;
|
|
*(undefined4 *)(this + 0x24) = 0;
|
|
*(undefined4 *)(this + 0x28) = 0;
|
|
pvVar5 = (void *)0x0;
|
|
}
|
|
else {
|
|
uVar6 = param_1 * 4;
|
|
local_18 = uVar6;
|
|
if (uVar6 < 0x81) {
|
|
pvVar2 = (void *)__node_alloc::_M_allocate(&local_18);
|
|
uVar4 = local_18;
|
|
}
|
|
else {
|
|
pvVar2 = operator_new(uVar6);
|
|
uVar4 = uVar6;
|
|
}
|
|
*(void **)(this + 0x20) = pvVar2;
|
|
*(void **)(this + 0x24) = pvVar2;
|
|
*(uint *)(this + 0x28) = (int)pvVar2 + (uVar4 & 0xfffffffc);
|
|
pvVar5 = (void *)((int)pvVar2 + uVar6);
|
|
if (0 < (int)uVar6) {
|
|
uVar6 = param_1 ^ 0xffffffff;
|
|
if ((int)(param_1 ^ 0xffffffff) < -1) {
|
|
uVar6 = 0xfffffffe;
|
|
}
|
|
__aeabi_memclr4(pvVar2,(uVar6 + param_1) * 4 + 8,0xfffffffe,param_1,p_Var1,__mutex);
|
|
}
|
|
}
|
|
*(void **)(this + 0x24) = pvVar5;
|
|
Init::Init((Init *)&DAT_00070d50);
|
|
return this;
|
|
}
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~_Locale_impl @ 00037ca0
|
|
|
|
/* std::_Locale_impl::~_Locale_impl() */
|
|
|
|
_Locale_impl * __thiscall std::_Locale_impl::~_Locale_impl(_Locale_impl *this)
|
|
|
|
{
|
|
int *piVar1;
|
|
_Locale_impl *p_Var2;
|
|
uint uVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
|
|
Init::~Init((Init *)&DAT_00070d50);
|
|
piVar1 = *(int **)(this + 0x20);
|
|
piVar4 = *(int **)(this + 0x24);
|
|
if (piVar1 != piVar4) {
|
|
do {
|
|
iVar5 = *piVar1;
|
|
if (iVar5 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(iVar5 + 8));
|
|
iVar6 = *(int *)(iVar5 + 4) + -1;
|
|
*(int *)(iVar5 + 4) = iVar6;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(iVar5 + 8));
|
|
if (iVar6 == 0) {
|
|
if ((int *)*piVar1 != (int *)0x0) {
|
|
(**(code **)(*(int *)*piVar1 + 4))();
|
|
}
|
|
*piVar1 = 0;
|
|
}
|
|
}
|
|
piVar1 = piVar1 + 1;
|
|
} while (piVar4 != piVar1);
|
|
piVar1 = *(int **)(this + 0x20);
|
|
}
|
|
if (piVar1 != (int *)0x0) {
|
|
if ((uint)(*(int *)(this + 0x28) - (int)piVar1) < 0x81) {
|
|
__node_alloc::_M_deallocate(piVar1,*(int *)(this + 0x28) - (int)piVar1);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
p_Var2 = *(_Locale_impl **)(this + 0x1c);
|
|
if ((p_Var2 != this + 8) && (p_Var2 != (_Locale_impl *)0x0)) {
|
|
uVar3 = *(int *)(this + 8) - (int)p_Var2;
|
|
if (uVar3 < 0x81) {
|
|
__node_alloc::_M_deallocate(p_Var2,uVar3);
|
|
}
|
|
else {
|
|
operator_delete(p_Var2);
|
|
}
|
|
}
|
|
pthread_mutex_destroy((pthread_mutex_t *)(this + 4));
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC make_classic_locale @ 00037dac
|
|
|
|
/* std::_Locale_impl::make_classic_locale() */
|
|
|
|
void std::_Locale_impl::make_classic_locale(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
ctype<char> *this;
|
|
moneypunct<char,true> *this_00;
|
|
moneypunct<char,false> *this_01;
|
|
messages<char> *this_02;
|
|
moneypunct<wchar_t,true> *this_03;
|
|
moneypunct<wchar_t,false> *this_04;
|
|
messages<wchar_t> *this_05;
|
|
uint uVar2;
|
|
int iVar3;
|
|
undefined4 local_88;
|
|
undefined4 *local_84;
|
|
ctype<char> *local_80;
|
|
undefined4 *local_7c;
|
|
moneypunct<char,true> *local_78;
|
|
moneypunct<char,false> *local_74;
|
|
undefined4 *local_70;
|
|
messages<char> *local_6c;
|
|
undefined4 *local_68;
|
|
undefined4 *local_64;
|
|
undefined4 *local_60;
|
|
undefined4 *local_5c;
|
|
undefined4 *local_58;
|
|
undefined4 *local_54;
|
|
undefined4 *local_50;
|
|
undefined4 *local_4c;
|
|
undefined4 *local_48;
|
|
moneypunct<wchar_t,true> *local_44;
|
|
moneypunct<wchar_t,false> *local_40;
|
|
undefined4 *local_3c;
|
|
messages<wchar_t> *local_38;
|
|
undefined4 *local_34;
|
|
undefined4 *local_30;
|
|
undefined4 *local_2c;
|
|
undefined4 *local_28;
|
|
undefined4 *local_24;
|
|
undefined4 *local_20;
|
|
undefined4 local_1c;
|
|
undefined1 auStack_18 [4];
|
|
|
|
_Locale_impl((_Locale_impl *)&DAT_00070d80,"C");
|
|
local_88 = 0;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__collate_00069f98;
|
|
local_84 = puVar1;
|
|
this = (ctype<char> *)operator_new(0x14);
|
|
ctype<char>::ctype(this,(mask *)0x0,false,1);
|
|
local_80 = this;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__codecvt_00069ee8;
|
|
local_7c = puVar1;
|
|
this_00 = (moneypunct<char,true> *)operator_new(0x14);
|
|
moneypunct<char,true>::moneypunct(this_00,1);
|
|
local_78 = this_00;
|
|
this_01 = (moneypunct<char,false> *)operator_new(0x14);
|
|
moneypunct<char,false>::moneypunct(this_01,1);
|
|
local_74 = this_01;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__numpunct_0006a208;
|
|
local_70 = puVar1;
|
|
this_02 = (messages<char> *)operator_new(0xc);
|
|
messages<char>::messages(this_02,1);
|
|
local_6c = this_02;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_00069460;
|
|
local_68 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_00069484;
|
|
local_64 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_000694a8;
|
|
local_60 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_000694f0;
|
|
local_5c = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0x448);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_00069250;
|
|
priv::time_init<char>::time_init();
|
|
*puVar1 = &PTR_FUN_00039a00_1_000692ec;
|
|
local_58 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0x448);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_00069250;
|
|
priv::time_init<char>::time_init();
|
|
*puVar1 = &PTR_FUN_0003aac0_1_0006935c;
|
|
local_54 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__collate_00069fc0;
|
|
local_50 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__ctype_0006a018;
|
|
local_4c = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__codecvt_00069f48;
|
|
local_48 = puVar1;
|
|
this_03 = (moneypunct<wchar_t,true> *)operator_new(0x14);
|
|
moneypunct<wchar_t,true>::moneypunct(this_03,1);
|
|
local_44 = this_03;
|
|
this_04 = (moneypunct<wchar_t,false> *)operator_new(0x14);
|
|
moneypunct<wchar_t,false>::moneypunct(this_04,1);
|
|
local_40 = this_04;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__numpunct_0006a238;
|
|
local_3c = puVar1;
|
|
this_05 = (messages<wchar_t> *)operator_new(0xc);
|
|
messages<wchar_t>::messages(this_05,1);
|
|
local_38 = this_05;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_0006952c;
|
|
local_34 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_00069550;
|
|
local_30 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_00069574;
|
|
local_2c = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_000695bc;
|
|
local_28 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xbc8);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_00069250;
|
|
priv::time_init<wchar_t>::time_init();
|
|
*puVar1 = &PTR_LAB_0003ac9a_1_000693dc;
|
|
local_24 = puVar1;
|
|
puVar1 = (undefined4 *)operator_new(0xbc8);
|
|
puVar1[1] = 1;
|
|
pthread_mutex_init((pthread_mutex_t *)(puVar1 + 2),(pthread_mutexattr_t *)0x0);
|
|
*puVar1 = &PTR__facet_00069250;
|
|
priv::time_init<wchar_t>::time_init();
|
|
*puVar1 = &PTR_FUN_0003bc38_1_0006944c;
|
|
local_1c = 0;
|
|
local_20 = puVar1;
|
|
FUN_000378f8(&DAT_00070da0,0x1c);
|
|
FUN_0004a040(&DAT_00070da0,&local_88,auStack_18,auStack_18);
|
|
uVar2 = FUN_00057b68(&DAT_00070db4,0,0);
|
|
if (((uVar2 & 1) == 0) && (iVar3 = FUN_0004e3a4(&DAT_00070db4), iVar3 != 0)) {
|
|
locale::locale((locale *)&DAT_00070db0,(_Locale_impl *)&DAT_00070d80);
|
|
__cxa_atexit(locale::~locale,&DAT_00070db0,&DAT_0006b000);
|
|
FUN_0004e40c(&DAT_00070db4);
|
|
}
|
|
DAT_00070d68 = &DAT_00070db0;
|
|
uVar2 = FUN_00057b68(&DAT_00070dbc,0,0);
|
|
if (((uVar2 & 1) == 0) && (iVar3 = FUN_0004e3a4(&DAT_00070dbc), iVar3 != 0)) {
|
|
locale::locale((locale *)&DAT_00070db8,(_Locale_impl *)&DAT_00070d80);
|
|
__cxa_atexit(locale::~locale,&DAT_00070db8,&DAT_0006b000);
|
|
FUN_0004e40c(&DAT_00070dbc);
|
|
}
|
|
DAT_00070d74 = &DAT_00070db8;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_throw_bad_cast @ 000382c4
|
|
|
|
/* std::_Locale_impl::_M_throw_bad_cast() */
|
|
|
|
void std::_Locale_impl::_M_throw_bad_cast(void)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
FUN_00030824(4);
|
|
uVar1 = FUN_000318b0();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar1,&PTR_PTR_FUN_00031728_1_00068e38,0x318c9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC insert @ 000382ec
|
|
|
|
/* std::_Locale_impl::insert(std::_Locale_impl*, std::locale::id const&) */
|
|
|
|
void __thiscall std::_Locale_impl::insert(_Locale_impl *this,_Locale_impl *param_1,id *param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = *(uint *)param_2;
|
|
if ((uVar1 != 0) && (uVar1 < (uint)(*(int *)(param_1 + 0x24) - *(int *)(param_1 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(param_1 + 0x20) + uVar1 * 4),param_2);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC insert @ 0003830c
|
|
|
|
/* std::_Locale_impl::insert(std::locale::facet*, std::locale::id const&) */
|
|
|
|
facet * __thiscall std::_Locale_impl::insert(_Locale_impl *this,facet *param_1,id *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
facet *pfVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
_Locale_impl *p_Var5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
facet *pfVar8;
|
|
undefined4 local_20;
|
|
undefined1 auStack_1c [4];
|
|
undefined1 auStack_18 [4];
|
|
|
|
pfVar2 = (facet *)0x0;
|
|
if ((param_1 != (facet *)0x0) && (uVar3 = *(uint *)param_2, uVar3 != 0)) {
|
|
iVar4 = *(int *)(this + 0x20);
|
|
iVar6 = *(int *)(this + 0x24);
|
|
uVar7 = iVar6 - iVar4 >> 2;
|
|
p_Var5 = this + 0x20;
|
|
if (uVar7 <= uVar3) {
|
|
local_20 = 0;
|
|
uVar3 = uVar3 + 1;
|
|
if (uVar3 < uVar7) {
|
|
iVar4 = iVar4 + uVar3 * 4;
|
|
if (iVar4 != iVar6) {
|
|
*(int *)(this + 0x24) = iVar4;
|
|
}
|
|
}
|
|
else {
|
|
uVar3 = uVar3 - uVar7;
|
|
if (uVar3 != 0) {
|
|
if ((uint)(*(int *)(this + 0x28) - iVar6 >> 2) < uVar3) {
|
|
FUN_000398e0(p_Var5,iVar6,&local_20,auStack_1c,uVar3,0);
|
|
}
|
|
else {
|
|
FUN_000397e8(p_Var5,iVar6,uVar3,&local_20,auStack_18);
|
|
}
|
|
}
|
|
}
|
|
iVar4 = *(int *)p_Var5;
|
|
uVar3 = *(uint *)param_2;
|
|
}
|
|
iVar6 = uVar3 * 4;
|
|
pfVar8 = *(facet **)(iVar4 + iVar6);
|
|
pfVar2 = param_1;
|
|
if (pfVar8 != param_1) {
|
|
if (pfVar8 != (facet *)0x0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)(pfVar8 + 8));
|
|
iVar1 = *(int *)(pfVar8 + 4);
|
|
*(int *)(pfVar8 + 4) = iVar1 + -1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(pfVar8 + 8));
|
|
if (iVar1 + -1 == 0) {
|
|
if (*(int **)(iVar4 + iVar6) != (int *)0x0) {
|
|
(**(code **)(**(int **)(iVar4 + iVar6) + 4))();
|
|
}
|
|
*(undefined4 *)(iVar4 + iVar6) = 0;
|
|
}
|
|
}
|
|
pthread_mutex_lock((pthread_mutex_t *)(param_1 + 8));
|
|
*(int *)(param_1 + 4) = *(int *)(param_1 + 4) + 1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 8));
|
|
*(facet **)(*(int *)p_Var5 + *(int *)param_2 * 4) = param_1;
|
|
}
|
|
}
|
|
return pfVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC insert_ctype_facets @ 000383f8
|
|
|
|
/* std::_Locale_impl::insert_ctype_facets(char const*&, char*, _Locale_name_hint*) */
|
|
|
|
_Locale_name_hint * __thiscall
|
|
std::_Locale_impl::insert_ctype_facets
|
|
(_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
ctype<char> *this_00;
|
|
codecvt_byname<char,char,mbstate_t> *this_01;
|
|
facet *pfVar2;
|
|
int *piVar3;
|
|
undefined4 uVar4;
|
|
facet *pfVar5;
|
|
int iVar6;
|
|
_Locale_name_hint *local_20;
|
|
int local_18;
|
|
|
|
pcVar1 = *param_1;
|
|
if (*pcVar1 == '\0') {
|
|
pcVar1 = (char *)FUN_0004d960(param_2);
|
|
*param_1 = pcVar1;
|
|
}
|
|
if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) {
|
|
piVar3 = (int *)locale::classic();
|
|
iVar6 = *piVar3;
|
|
if ((ctype<char>::id != 0) &&
|
|
(ctype<char>::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + ctype<char>::id * 4),(id *)&ctype<char>::id);
|
|
}
|
|
if ((codecvt<char,char,mbstate_t>::id != 0) &&
|
|
(codecvt<char,char,mbstate_t>::id <
|
|
(uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + codecvt<char,char,mbstate_t>::id * 4),
|
|
(id *)&codecvt<char,char,mbstate_t>::id);
|
|
}
|
|
if ((ctype<wchar_t>::id != 0) &&
|
|
(ctype<wchar_t>::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + ctype<wchar_t>::id * 4),
|
|
(id *)&ctype<wchar_t>::id);
|
|
}
|
|
if ((codecvt<wchar_t,char,mbstate_t>::id != 0) &&
|
|
(codecvt<wchar_t,char,mbstate_t>::id <
|
|
(uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + codecvt<wchar_t,char,mbstate_t>::id * 4),
|
|
(id *)&codecvt<wchar_t,char,mbstate_t>::id);
|
|
}
|
|
return param_3;
|
|
}
|
|
iVar6 = FUN_0004a144(param_1,param_2,param_3,&local_18);
|
|
if (iVar6 == 0) {
|
|
locale::_M_throw_on_creation_failure(local_18,*param_1,"ctype");
|
|
pfVar5 = (facet *)param_2;
|
|
}
|
|
else {
|
|
local_20 = param_3;
|
|
if (param_3 == (_Locale_name_hint *)0x0) {
|
|
local_20 = (_Locale_name_hint *)FUN_0004da98(iVar6);
|
|
}
|
|
this_00 = (ctype<char> *)operator_new(0x418);
|
|
ctype<char>::ctype(this_00,(mask *)0x0,false,0);
|
|
*(undefined ***)this_00 = &PTR__ctype_byname_000695f8;
|
|
*(int *)(this_00 + 0x414) = iVar6;
|
|
ctype_byname<char>::_M_init((ctype_byname<char> *)this_00);
|
|
this_01 = (codecvt_byname<char,char,mbstate_t> *)operator_new(0xc);
|
|
pfVar5 = (facet *)0x0;
|
|
codecvt_byname<char,char,mbstate_t>::codecvt_byname(this_01,*param_1,0);
|
|
iVar6 = FUN_0004a144(param_1,param_2,local_20,&local_18);
|
|
param_3 = local_20;
|
|
if (iVar6 != 0) {
|
|
pfVar2 = (facet *)operator_new(0x10);
|
|
*(undefined4 *)(pfVar2 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar2 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(int *)(pfVar2 + 0xc) = iVar6;
|
|
*(undefined ***)pfVar2 = &PTR__ctype_byname_00069628;
|
|
iVar6 = FUN_0004a334(param_1,param_2,local_20,&local_18);
|
|
if (iVar6 != 0) {
|
|
pfVar5 = (facet *)operator_new(0x10);
|
|
*(undefined4 *)(pfVar5 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar5 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(int *)(pfVar5 + 0xc) = iVar6;
|
|
*(undefined ***)pfVar5 = &PTR__codecvt_byname_000696cc;
|
|
}
|
|
insert(this,(facet *)this_00,(id *)&ctype<char>::id);
|
|
insert(this,(facet *)this_01,(id *)&codecvt<char,char,mbstate_t>::id);
|
|
insert(this,pfVar2,(id *)&ctype<wchar_t>::id);
|
|
if (pfVar5 == (facet *)0x0) {
|
|
return local_20;
|
|
}
|
|
insert(this,pfVar5,(id *)&codecvt<wchar_t,char,mbstate_t>::id);
|
|
return local_20;
|
|
}
|
|
}
|
|
uVar4 = locale::_M_throw_on_creation_failure(local_18,*param_1,"ctype");
|
|
operator_delete(pfVar5);
|
|
FUN_000308d8(uVar4);
|
|
FUN_0004a590(param_1);
|
|
(**(code **)(*(int *)param_3 + 4))(param_3);
|
|
uVar4 = FUN_00030a44();
|
|
FUN_0003094c();
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar4);
|
|
}
|
|
|
|
|
|
|
|
### FUNC insert_numeric_facets @ 00038730
|
|
|
|
/* std::_Locale_impl::insert_numeric_facets(char const*&, char*, _Locale_name_hint*) */
|
|
|
|
_Locale_name_hint * __thiscall
|
|
std::_Locale_impl::insert_numeric_facets
|
|
(_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
int *piVar2;
|
|
facet *pfVar3;
|
|
facet *pfVar4;
|
|
undefined4 uVar5;
|
|
int iVar6;
|
|
char *local_20;
|
|
int local_18;
|
|
|
|
if (**param_1 == '\0') {
|
|
pcVar1 = (char *)FUN_0004d968(param_2);
|
|
*param_1 = pcVar1;
|
|
}
|
|
piVar2 = (int *)locale::classic();
|
|
iVar6 = *piVar2;
|
|
if ((DAT_00070d20 != 0) &&
|
|
(DAT_00070d20 < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d20 * 4),(id *)&DAT_00070d20);
|
|
}
|
|
if ((DAT_00070d1c != 0) &&
|
|
(DAT_00070d1c < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d1c * 4),(id *)&DAT_00070d1c);
|
|
}
|
|
if ((DAT_00070d24 != 0) &&
|
|
(DAT_00070d24 < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d24 * 4),(id *)&DAT_00070d24);
|
|
}
|
|
if ((DAT_00070d28 != 0) &&
|
|
(DAT_00070d28 < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + DAT_00070d28 * 4),(id *)&DAT_00070d28);
|
|
}
|
|
pcVar1 = *param_1;
|
|
if (((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) && ((*pcVar1 != 'C' || (pcVar1[1] != '\0')))) {
|
|
pfVar3 = (facet *)FUN_0004a37c(param_1,param_2,param_3,&local_18);
|
|
pfVar4 = pfVar3;
|
|
local_20 = param_2;
|
|
if (pfVar3 != (facet *)0x0) {
|
|
if (param_3 == (_Locale_name_hint *)0x0) {
|
|
param_3 = (_Locale_name_hint *)FUN_0004da9c(pfVar3);
|
|
}
|
|
pfVar4 = (facet *)operator_new(0x10);
|
|
*(undefined4 *)(pfVar4 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar4 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(facet **)(pfVar4 + 0xc) = pfVar3;
|
|
*(undefined ***)pfVar4 = &PTR__numpunct_byname_000696f8;
|
|
iVar6 = FUN_0004a37c(param_1,param_2,param_3,&local_18);
|
|
if (iVar6 != 0) {
|
|
pfVar3 = (facet *)operator_new(0x10);
|
|
*(undefined4 *)(pfVar3 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar3 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(int *)(pfVar3 + 0xc) = iVar6;
|
|
*(undefined ***)pfVar3 = &PTR__numpunct_byname_0006971c;
|
|
insert(this,pfVar4,(id *)&numpunct<char>::id);
|
|
insert(this,pfVar3,(id *)&numpunct<wchar_t>::id);
|
|
return param_3;
|
|
}
|
|
(**(code **)(*(int *)pfVar4 + 4))(pfVar4);
|
|
local_20 = (char *)0x0;
|
|
}
|
|
uVar5 = locale::_M_throw_on_creation_failure(local_18,*param_1,"numpunct");
|
|
operator_delete(param_1);
|
|
FUN_000308d8(uVar5);
|
|
FUN_0004a614(local_20);
|
|
(**(code **)(*(int *)pfVar4 + 4))(pfVar4);
|
|
uVar5 = FUN_00030a44();
|
|
FUN_0003094c();
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar5);
|
|
}
|
|
if ((numpunct<char>::id != 0) &&
|
|
(numpunct<char>::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + numpunct<char>::id * 4),
|
|
(id *)&numpunct<char>::id);
|
|
}
|
|
if ((numpunct<wchar_t>::id != 0) &&
|
|
(numpunct<wchar_t>::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + numpunct<wchar_t>::id * 4),
|
|
(id *)&numpunct<wchar_t>::id);
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC insert_time_facets @ 000389a8
|
|
|
|
/* std::_Locale_impl::insert_time_facets(char const*&, char*, _Locale_name_hint*) */
|
|
|
|
_Locale_name_hint * __thiscall
|
|
std::_Locale_impl::insert_time_facets
|
|
(_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
_Locale_time *p_Var2;
|
|
facet *pfVar3;
|
|
facet *pfVar4;
|
|
facet *pfVar5;
|
|
facet *pfVar6;
|
|
int *piVar7;
|
|
undefined4 uVar8;
|
|
int iVar9;
|
|
int local_18;
|
|
|
|
pcVar1 = *param_1;
|
|
if (*pcVar1 == '\0') {
|
|
pcVar1 = (char *)FUN_0004d970(param_2);
|
|
*param_1 = pcVar1;
|
|
}
|
|
if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) {
|
|
piVar7 = (int *)locale::classic();
|
|
iVar9 = *piVar7;
|
|
if ((DAT_00070d2c != 0) &&
|
|
(DAT_00070d2c < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d2c * 4),(id *)&DAT_00070d2c);
|
|
}
|
|
if ((DAT_00070d30 != 0) &&
|
|
(DAT_00070d30 < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d30 * 4),(id *)&DAT_00070d30);
|
|
}
|
|
if ((DAT_00070d34 != 0) &&
|
|
(DAT_00070d34 < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d34 * 4),(id *)&DAT_00070d34);
|
|
}
|
|
if ((DAT_00070d38 != 0) &&
|
|
(DAT_00070d38 < (uint)(*(int *)(iVar9 + 0x24) - *(int *)(iVar9 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar9 + 0x20) + DAT_00070d38 * 4),(id *)&DAT_00070d38);
|
|
}
|
|
}
|
|
else {
|
|
p_Var2 = (_Locale_time *)FUN_0004a3cc(param_1,param_2,param_3,&local_18);
|
|
if (p_Var2 == (_Locale_time *)0x0) {
|
|
if (local_18 == 4) {
|
|
FUN_00030824(4);
|
|
uVar8 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar8,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
}
|
|
else {
|
|
if (param_3 == (_Locale_name_hint *)0x0) {
|
|
param_3 = (_Locale_name_hint *)FUN_0004daa0(p_Var2);
|
|
}
|
|
pfVar3 = (facet *)operator_new(0x448);
|
|
*(undefined4 *)(pfVar3 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar3 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)pfVar3 = &PTR__facet_00069250;
|
|
priv::time_init<char>::time_init((time_init<char> *)(pfVar3 + 0xc),p_Var2);
|
|
*(undefined ***)pfVar3 = &PTR_FUN_00039a00_1_00069280;
|
|
pfVar4 = (facet *)operator_new(0x448);
|
|
*(undefined4 *)(pfVar4 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar4 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)pfVar4 = &PTR__facet_00069250;
|
|
priv::time_init<char>::time_init((time_init<char> *)(pfVar4 + 0xc),p_Var2);
|
|
*(undefined ***)pfVar4 = &PTR_FUN_0003aac0_1_00069314;
|
|
pfVar5 = (facet *)operator_new(0xbc8);
|
|
*(undefined4 *)(pfVar5 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar5 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)pfVar5 = &PTR__facet_00069250;
|
|
priv::time_init<wchar_t>::time_init((time_init<wchar_t> *)(pfVar5 + 0xc),p_Var2);
|
|
*(undefined ***)pfVar5 = &PTR_LAB_0003ac9a_1_00069370;
|
|
pfVar6 = (facet *)operator_new(0xbc8);
|
|
*(undefined4 *)(pfVar6 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar6 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)pfVar6 = &PTR__facet_00069250;
|
|
priv::time_init<wchar_t>::time_init((time_init<wchar_t> *)(pfVar6 + 0xc),p_Var2);
|
|
*(undefined ***)pfVar6 = &PTR_FUN_0003bc38_1_00069404;
|
|
FUN_0004a698(p_Var2);
|
|
insert(this,pfVar3,(id *)&DAT_00070d2c);
|
|
insert(this,pfVar4,(id *)&DAT_00070d30);
|
|
insert(this,pfVar5,(id *)&DAT_00070d34);
|
|
insert(this,pfVar6,(id *)&DAT_00070d38);
|
|
}
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC insert_collate_facets @ 00038d24
|
|
|
|
/* std::_Locale_impl::insert_collate_facets(char const*&, char*, _Locale_name_hint*) */
|
|
|
|
_Locale_name_hint * __thiscall
|
|
std::_Locale_impl::insert_collate_facets
|
|
(_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
facet *pfVar2;
|
|
facet *pfVar3;
|
|
int *piVar4;
|
|
undefined4 uVar5;
|
|
id *piVar6;
|
|
int iVar7;
|
|
int local_18;
|
|
|
|
pcVar1 = *param_1;
|
|
if (*pcVar1 == '\0') {
|
|
pcVar1 = (char *)FUN_0004d978(param_2);
|
|
*param_1 = pcVar1;
|
|
}
|
|
if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) {
|
|
piVar4 = (int *)locale::classic();
|
|
iVar7 = *piVar4;
|
|
if ((collate<char>::id != 0) &&
|
|
(collate<char>::id < (uint)(*(int *)(iVar7 + 0x24) - *(int *)(iVar7 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar7 + 0x20) + collate<char>::id * 4),
|
|
(id *)&collate<char>::id);
|
|
}
|
|
if ((collate<wchar_t>::id != 0) &&
|
|
(collate<wchar_t>::id < (uint)(*(int *)(iVar7 + 0x24) - *(int *)(iVar7 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar7 + 0x20) + collate<wchar_t>::id * 4),
|
|
(id *)&collate<wchar_t>::id);
|
|
}
|
|
}
|
|
else {
|
|
iVar7 = FUN_0004a41c(param_1,param_2,param_3,&local_18);
|
|
if (iVar7 == 0) {
|
|
if (local_18 == 4) {
|
|
FUN_00030824(4);
|
|
uVar5 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
}
|
|
else {
|
|
if (param_3 == (_Locale_name_hint *)0x0) {
|
|
param_3 = (_Locale_name_hint *)FUN_0004daa4(iVar7);
|
|
}
|
|
pfVar2 = (facet *)operator_new(0x10);
|
|
*(undefined4 *)(pfVar2 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar2 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(int *)(pfVar2 + 0xc) = iVar7;
|
|
*(undefined ***)pfVar2 = &PTR__collate_byname_00069668;
|
|
iVar7 = FUN_0004a41c(param_1,param_2,param_3,&local_18);
|
|
if ((iVar7 == 0) && (local_18 == 4)) {
|
|
(**(code **)(*(int *)pfVar2 + 4))();
|
|
FUN_00030824(4);
|
|
uVar5 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
if (iVar7 == 0) {
|
|
piVar6 = (id *)&collate<char>::id;
|
|
}
|
|
else {
|
|
pfVar3 = (facet *)operator_new(0x10);
|
|
*(undefined4 *)(pfVar3 + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(pfVar3 + 8),(pthread_mutexattr_t *)0x0);
|
|
*(int *)(pfVar3 + 0xc) = iVar7;
|
|
*(undefined ***)pfVar3 = &PTR__collate_byname_00069684;
|
|
insert(this,pfVar2,(id *)&collate<char>::id);
|
|
piVar6 = (id *)&collate<wchar_t>::id;
|
|
pfVar2 = pfVar3;
|
|
}
|
|
insert(this,pfVar2,piVar6);
|
|
}
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC insert_monetary_facets @ 00038f3c
|
|
|
|
/* std::_Locale_impl::insert_monetary_facets(char const*&, char*, _Locale_name_hint*) */
|
|
|
|
_Locale_name_hint * __thiscall
|
|
std::_Locale_impl::insert_monetary_facets
|
|
(_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
int *piVar2;
|
|
_Locale_monetary *p_Var3;
|
|
moneypunct_byname<char,false> *this_00;
|
|
moneypunct_byname<char,true> *this_01;
|
|
undefined4 uVar4;
|
|
moneypunct_byname<wchar_t,false> *this_02;
|
|
int iVar5;
|
|
facet *local_20;
|
|
_Locale_name_hint *local_1c;
|
|
int local_18;
|
|
|
|
if (**param_1 == '\0') {
|
|
pcVar1 = (char *)FUN_0004d980(param_2);
|
|
*param_1 = pcVar1;
|
|
}
|
|
piVar2 = (int *)locale::classic();
|
|
iVar5 = *piVar2;
|
|
if ((DAT_00070d0c != 0) &&
|
|
(DAT_00070d0c < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d0c * 4),(id *)&DAT_00070d0c);
|
|
}
|
|
if ((DAT_00070d10 != 0) &&
|
|
(DAT_00070d10 < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d10 * 4),(id *)&DAT_00070d10);
|
|
}
|
|
if ((DAT_00070d14 != 0) &&
|
|
(DAT_00070d14 < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d14 * 4),(id *)&DAT_00070d14);
|
|
}
|
|
if ((DAT_00070d18 != 0) &&
|
|
(DAT_00070d18 < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + DAT_00070d18 * 4),(id *)&DAT_00070d18);
|
|
}
|
|
pcVar1 = *param_1;
|
|
if (((pcVar1 != (char *)0x0) && (*pcVar1 != '\0')) && ((*pcVar1 != 'C' || (pcVar1[1] != '\0')))) {
|
|
p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,param_3,&local_18);
|
|
if (p_Var3 == (_Locale_monetary *)0x0) {
|
|
if (local_18 == 4) {
|
|
FUN_00030824(4);
|
|
uVar4 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
}
|
|
else {
|
|
local_1c = param_3;
|
|
if (param_3 == (_Locale_name_hint *)0x0) {
|
|
local_1c = (_Locale_name_hint *)FUN_0004daa8(p_Var3);
|
|
}
|
|
this_00 = (moneypunct_byname<char,false> *)operator_new(0x18);
|
|
moneypunct_byname<char,false>::moneypunct_byname(this_00,p_Var3);
|
|
p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,local_1c,&local_18);
|
|
param_3 = local_1c;
|
|
if (p_Var3 == (_Locale_monetary *)0x0) {
|
|
(**(code **)(*(int *)this_00 + 4))(this_00);
|
|
if (local_18 == 4) {
|
|
FUN_00030824(4);
|
|
uVar4 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
}
|
|
else {
|
|
this_01 = (moneypunct_byname<char,true> *)operator_new(0x18);
|
|
moneypunct_byname<char,true>::moneypunct_byname(this_01,p_Var3);
|
|
p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,local_1c,&local_18);
|
|
if ((p_Var3 == (_Locale_monetary *)0x0) && (local_18 == 4)) {
|
|
FUN_00030824(4);
|
|
uVar4 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
if (p_Var3 == (_Locale_monetary *)0x0) {
|
|
local_20 = (facet *)0x0;
|
|
this_02 = (moneypunct_byname<wchar_t,false> *)0x0;
|
|
}
|
|
else {
|
|
this_02 = (moneypunct_byname<wchar_t,false> *)operator_new(0x18);
|
|
moneypunct_byname<wchar_t,false>::moneypunct_byname(this_02,p_Var3);
|
|
p_Var3 = (_Locale_monetary *)FUN_0004a46c(param_1,param_2,local_1c,&local_18);
|
|
if (p_Var3 == (_Locale_monetary *)0x0) {
|
|
(**(code **)(*(int *)this_02 + 4))();
|
|
this_02 = (moneypunct_byname<wchar_t,false> *)0x0;
|
|
local_20 = (facet *)0x0;
|
|
if (local_18 == 4) {
|
|
FUN_00030824(4);
|
|
uVar4 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
}
|
|
else {
|
|
local_20 = (facet *)operator_new(0x18);
|
|
moneypunct_byname<wchar_t,true>::moneypunct_byname
|
|
((moneypunct_byname<wchar_t,true> *)local_20,p_Var3);
|
|
}
|
|
}
|
|
insert(this,(facet *)this_00,(id *)&moneypunct<char,false>::id);
|
|
insert(this,(facet *)this_01,(id *)&moneypunct<char,true>::id);
|
|
if (this_02 != (moneypunct_byname<wchar_t,false> *)0x0) {
|
|
insert(this,(facet *)this_02,(id *)&moneypunct<wchar_t,false>::id);
|
|
}
|
|
if (local_20 != (facet *)0x0) {
|
|
insert(this,local_20,(id *)&moneypunct<wchar_t,true>::id);
|
|
}
|
|
}
|
|
}
|
|
return param_3;
|
|
}
|
|
if ((moneypunct<char,false>::id != 0) &&
|
|
(moneypunct<char,false>::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct<char,false>::id * 4),
|
|
(id *)&moneypunct<char,false>::id);
|
|
}
|
|
if ((moneypunct<char,true>::id != 0) &&
|
|
(moneypunct<char,true>::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct<char,true>::id * 4),
|
|
(id *)&moneypunct<char,true>::id);
|
|
}
|
|
if ((moneypunct<wchar_t,false>::id != 0) &&
|
|
(moneypunct<wchar_t,false>::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2)))
|
|
{
|
|
insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct<wchar_t,false>::id * 4),
|
|
(id *)&moneypunct<wchar_t,false>::id);
|
|
}
|
|
if ((moneypunct<wchar_t,true>::id != 0) &&
|
|
(moneypunct<wchar_t,true>::id < (uint)(*(int *)(iVar5 + 0x24) - *(int *)(iVar5 + 0x20) >> 2)))
|
|
{
|
|
insert(this,*(facet **)(*(int *)(iVar5 + 0x20) + moneypunct<wchar_t,true>::id * 4),
|
|
(id *)&moneypunct<wchar_t,true>::id);
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC insert_messages_facets @ 0003938c
|
|
|
|
/* std::_Locale_impl::insert_messages_facets(char const*&, char*, _Locale_name_hint*) */
|
|
|
|
_Locale_name_hint * __thiscall
|
|
std::_Locale_impl::insert_messages_facets
|
|
(_Locale_impl *this,char **param_1,char *param_2,_Locale_name_hint *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
_Locale_messages *p_Var2;
|
|
messages_byname<wchar_t> *this_00;
|
|
messages_byname<wchar_t> *this_01;
|
|
int *piVar3;
|
|
undefined4 uVar4;
|
|
id *piVar5;
|
|
int iVar6;
|
|
int local_18;
|
|
|
|
pcVar1 = *param_1;
|
|
if (*pcVar1 == '\0') {
|
|
pcVar1 = (char *)FUN_0004d988(param_2);
|
|
*param_1 = pcVar1;
|
|
}
|
|
if (((pcVar1 == (char *)0x0) || (*pcVar1 == '\0')) || ((*pcVar1 == 'C' && (pcVar1[1] == '\0')))) {
|
|
piVar3 = (int *)locale::classic();
|
|
iVar6 = *piVar3;
|
|
if ((messages<char>::id != 0) &&
|
|
(messages<char>::id < (uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2))) {
|
|
insert(this,*(facet **)(*(int *)(iVar6 + 0x20) + messages<char>::id * 4),
|
|
(id *)&messages<char>::id);
|
|
}
|
|
if (messages<wchar_t>::id == 0) {
|
|
return param_3;
|
|
}
|
|
if ((uint)(*(int *)(iVar6 + 0x24) - *(int *)(iVar6 + 0x20) >> 2) <= messages<wchar_t>::id) {
|
|
return param_3;
|
|
}
|
|
this_00 = *(messages_byname<wchar_t> **)(*(int *)(iVar6 + 0x20) + messages<wchar_t>::id * 4);
|
|
piVar5 = (id *)&messages<wchar_t>::id;
|
|
}
|
|
else {
|
|
p_Var2 = (_Locale_messages *)FUN_0004a4bc(param_1,param_2,param_3,&local_18);
|
|
if (p_Var2 == (_Locale_messages *)0x0) {
|
|
if (local_18 != 4) {
|
|
return param_3;
|
|
}
|
|
FUN_00030824(4);
|
|
uVar4 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
this_00 = (messages_byname<wchar_t> *)operator_new(0x10);
|
|
messages_byname<char>::messages_byname((messages_byname<char> *)this_00,p_Var2);
|
|
p_Var2 = (_Locale_messages *)FUN_0004a4bc(param_1,param_2,param_3,&local_18);
|
|
if ((p_Var2 == (_Locale_messages *)0x0) && (local_18 == 4)) {
|
|
FUN_00030824(4);
|
|
uVar4 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar4,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
if (p_Var2 == (_Locale_messages *)0x0) {
|
|
piVar5 = (id *)&messages<char>::id;
|
|
}
|
|
else {
|
|
this_01 = (messages_byname<wchar_t> *)operator_new(0x10);
|
|
messages_byname<wchar_t>::messages_byname(this_01,p_Var2);
|
|
insert(this,(facet *)this_00,(id *)&messages<char>::id);
|
|
piVar5 = (id *)&messages<wchar_t>::id;
|
|
this_00 = this_01;
|
|
}
|
|
}
|
|
insert(this,(facet *)this_00,piVar5);
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003956c @ 0003956c
|
|
|
|
undefined4 FUN_0003956c(void)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
|
|
uVar1 = FUN_00057b68(&DAT_00070d64,0,0);
|
|
if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d64), iVar2 != 0)) {
|
|
std::_Locale_impl::Init::Init((Init *)&DAT_00070d60);
|
|
__cxa_atexit(std::_Locale_impl::Init::~Init,&DAT_00070d60,&DAT_0006b000);
|
|
FUN_0004e40c(&DAT_00070d64);
|
|
}
|
|
return DAT_00070d68;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000395ec @ 000395ec
|
|
|
|
undefined4 FUN_000395ec(void)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
|
|
uVar1 = FUN_00057b68(&DAT_00070d70,0,0);
|
|
if (((uVar1 & 1) == 0) && (iVar2 = FUN_0004e3a4(&DAT_00070d70), iVar2 != 0)) {
|
|
std::_Locale_impl::Init::Init((Init *)&DAT_00070d6c);
|
|
__cxa_atexit(std::_Locale_impl::Init::~Init,&DAT_00070d6c,&DAT_0006b000);
|
|
FUN_0004e40c(&DAT_00070d70);
|
|
}
|
|
return DAT_00070d74;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _get_Locale_impl @ 0003966c
|
|
|
|
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
|
|
/* std::_get_Locale_impl(std::_Locale_impl*) */
|
|
|
|
_Locale_impl * std::_get_Locale_impl(_Locale_impl *param_1)
|
|
|
|
{
|
|
pthread_mutex_lock((pthread_mutex_t *)(param_1 + 4));
|
|
*(int *)param_1 = *(int *)param_1 + 1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(param_1 + 4));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003968c @ 0003968c
|
|
|
|
void FUN_0003968c(undefined4 *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
_Locale_impl *this;
|
|
int *piVar2;
|
|
|
|
piVar2 = (int *)*param_1;
|
|
pthread_mutex_lock((pthread_mutex_t *)(piVar2 + 1));
|
|
iVar1 = *piVar2;
|
|
*piVar2 = iVar1 + -1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(piVar2 + 1));
|
|
if (iVar1 + -1 != 0) {
|
|
return;
|
|
}
|
|
this = (_Locale_impl *)*param_1;
|
|
if ((_Locale_impl *)*DAT_00070d68 == this) {
|
|
std::_Locale_impl::~_Locale_impl(this);
|
|
}
|
|
else if (this != (_Locale_impl *)0x0) {
|
|
std::_Locale_impl::~_Locale_impl(this);
|
|
operator_delete(this);
|
|
}
|
|
*param_1 = 0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _copy_Nameless_Locale_impl @ 000396f8
|
|
|
|
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
|
|
/* std::_copy_Nameless_Locale_impl(std::_Locale_impl*) */
|
|
|
|
_Locale_impl * std::_copy_Nameless_Locale_impl(_Locale_impl *param_1)
|
|
|
|
{
|
|
_Locale_impl *this;
|
|
undefined1 *puVar1;
|
|
undefined1 *puVar2;
|
|
|
|
this = (_Locale_impl *)operator_new(0x2c);
|
|
_Locale_impl::_Locale_impl(this,param_1);
|
|
if (*(undefined1 **)(this + 0x18) == *(undefined1 **)(this + 0x1c)) {
|
|
FUN_00037294(this + 8,&DAT_00064ee3,&DAT_00064ee4);
|
|
}
|
|
else {
|
|
**(undefined1 **)(this + 0x1c) = 0x2a;
|
|
puVar1 = *(undefined1 **)(this + 0x18);
|
|
puVar2 = (undefined1 *)(*(int *)(this + 0x1c) + 1);
|
|
if (puVar2 != puVar1) {
|
|
*puVar2 = *puVar1;
|
|
*(undefined1 **)(this + 0x18) = puVar2 + (*(int *)(this + 0x18) - (int)puVar1);
|
|
return this;
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 00039758
|
|
|
|
/* std::priv::_GetFacetId(std::money_get<char, std::istreambuf_iterator<char, std::char_traits<char>
|
|
> > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(money_get *param_1)
|
|
|
|
{
|
|
return &DAT_00070d0c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 00039764
|
|
|
|
/* std::priv::_GetFacetId(std::money_put<char, std::ostreambuf_iterator<char, std::char_traits<char>
|
|
> > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(money_put *param_1)
|
|
|
|
{
|
|
return &DAT_00070d10;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 00039770
|
|
|
|
/* std::priv::_GetFacetId(std::money_get<wchar_t, std::istreambuf_iterator<wchar_t,
|
|
std::char_traits<wchar_t> > > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(money_get *param_1)
|
|
|
|
{
|
|
return &DAT_00070d14;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 0003977c
|
|
|
|
/* std::priv::_GetFacetId(std::money_put<wchar_t, std::ostreambuf_iterator<wchar_t,
|
|
std::char_traits<wchar_t> > > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(money_put *param_1)
|
|
|
|
{
|
|
return &DAT_00070d18;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 00039788
|
|
|
|
/* std::priv::_GetFacetId(std::num_get<char, std::istreambuf_iterator<char, std::char_traits<char> >
|
|
> const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(num_get *param_1)
|
|
|
|
{
|
|
return &DAT_00070d1c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 00039794
|
|
|
|
/* std::priv::_GetFacetId(std::num_get<wchar_t, std::istreambuf_iterator<wchar_t,
|
|
std::char_traits<wchar_t> > > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(num_get *param_1)
|
|
|
|
{
|
|
return &DAT_00070d24;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 000397a0
|
|
|
|
/* std::priv::_GetFacetId(std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> >
|
|
> const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(num_put *param_1)
|
|
|
|
{
|
|
return &DAT_00070d20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 000397ac
|
|
|
|
/* std::priv::_GetFacetId(std::num_put<wchar_t, std::ostreambuf_iterator<wchar_t,
|
|
std::char_traits<wchar_t> > > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(num_put *param_1)
|
|
|
|
{
|
|
return &DAT_00070d28;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 000397b8
|
|
|
|
/* std::priv::_GetFacetId(std::time_get<char, std::istreambuf_iterator<char, std::char_traits<char>
|
|
> > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(time_get *param_1)
|
|
|
|
{
|
|
return &DAT_00070d2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 000397c4
|
|
|
|
/* std::priv::_GetFacetId(std::time_put<char, std::ostreambuf_iterator<char, std::char_traits<char>
|
|
> > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(time_put *param_1)
|
|
|
|
{
|
|
return &DAT_00070d30;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 000397d0
|
|
|
|
/* std::priv::_GetFacetId(std::time_get<wchar_t, std::istreambuf_iterator<wchar_t,
|
|
std::char_traits<wchar_t> > > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(time_get *param_1)
|
|
|
|
{
|
|
return &DAT_00070d34;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _GetFacetId @ 000397dc
|
|
|
|
/* std::priv::_GetFacetId(std::time_put<wchar_t, std::ostreambuf_iterator<wchar_t,
|
|
std::char_traits<wchar_t> > > const*) */
|
|
|
|
undefined4 * std::priv::_GetFacetId(time_put *param_1)
|
|
|
|
{
|
|
return &DAT_00070d38;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000397e8 @ 000397e8
|
|
|
|
void FUN_000397e8(uint *param_1,undefined4 *param_2,uint param_3,undefined4 *param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
undefined4 *puVar3;
|
|
undefined4 *puVar4;
|
|
int iVar5;
|
|
undefined4 *puVar6;
|
|
undefined1 auStack_1c [4];
|
|
undefined4 local_18;
|
|
|
|
puVar4 = (undefined4 *)param_1[1];
|
|
if (((undefined4 *)*param_1 <= param_4) && (param_4 < puVar4)) {
|
|
local_18 = *param_4;
|
|
FUN_000397e8(param_1,param_2,param_3,&local_18,auStack_1c);
|
|
return;
|
|
}
|
|
uVar1 = (int)puVar4 - (int)param_2;
|
|
uVar2 = (int)uVar1 >> 2;
|
|
if (param_3 < uVar2) {
|
|
puVar3 = puVar4;
|
|
if (param_3 != 0) {
|
|
__aeabi_memcpy(puVar4,puVar4 + -param_3,param_3 * 4);
|
|
puVar3 = (undefined4 *)param_1[1];
|
|
}
|
|
param_1[1] = (uint)(puVar3 + param_3);
|
|
iVar5 = (int)(puVar4 + -param_3) - (int)param_2;
|
|
if (0 < iVar5) {
|
|
__aeabi_memmove((int)puVar4 - iVar5,param_2);
|
|
}
|
|
if (0 < (int)(param_3 * 4)) {
|
|
iVar5 = param_3 + 1;
|
|
do {
|
|
*param_2 = *param_4;
|
|
param_2 = param_2 + 1;
|
|
iVar5 = iVar5 + -1;
|
|
} while (1 < iVar5);
|
|
}
|
|
}
|
|
else {
|
|
puVar3 = puVar4 + (param_3 - uVar2);
|
|
if (0 < (int)((param_3 - uVar2) * 4)) {
|
|
iVar5 = (param_3 + 1) - uVar2;
|
|
puVar6 = puVar4;
|
|
do {
|
|
*puVar6 = *param_4;
|
|
puVar6 = puVar6 + 1;
|
|
iVar5 = iVar5 + -1;
|
|
} while (1 < iVar5);
|
|
}
|
|
param_1[1] = (uint)puVar3;
|
|
if (puVar4 != param_2) {
|
|
__aeabi_memcpy(puVar3,param_2,uVar1);
|
|
puVar3 = (undefined4 *)param_1[1];
|
|
}
|
|
param_1[1] = (uint)(puVar3 + uVar2);
|
|
if (0 < (int)uVar1) {
|
|
iVar5 = (uVar1 >> 2) + 1;
|
|
do {
|
|
*param_2 = *param_4;
|
|
param_2 = param_2 + 1;
|
|
iVar5 = iVar5 + -1;
|
|
} while (1 < iVar5);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000398e0 @ 000398e0
|
|
|
|
void FUN_000398e0(int *param_1,int param_2,undefined4 *param_3,undefined4 param_4,uint param_5,
|
|
int param_6)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
void *pvVar2;
|
|
undefined4 uVar3;
|
|
int iVar4;
|
|
undefined4 *puVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
undefined4 *puVar10;
|
|
uint local_2c;
|
|
uint local_18;
|
|
|
|
iVar4 = *param_1;
|
|
uVar6 = param_1[1] - iVar4 >> 2;
|
|
if (0x3fffffff - uVar6 < param_5) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("vector");
|
|
}
|
|
uVar7 = uVar6;
|
|
if (uVar6 <= param_5) {
|
|
uVar7 = param_5;
|
|
}
|
|
uVar6 = uVar7 + uVar6;
|
|
uVar8 = uVar6;
|
|
if (uVar6 < uVar7) {
|
|
uVar8 = 0x3fffffff;
|
|
}
|
|
local_2c = 0x3fffffff;
|
|
if (uVar6 < 0x40000000) {
|
|
local_2c = uVar8;
|
|
}
|
|
if (0x3fffffff < local_2c) {
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
if (local_2c == 0) {
|
|
puVar1 = (undefined4 *)0x0;
|
|
local_2c = 0;
|
|
}
|
|
else {
|
|
local_2c = local_2c << 2;
|
|
local_18 = local_2c;
|
|
if (local_2c < 0x81) {
|
|
puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18);
|
|
local_2c = local_18;
|
|
}
|
|
else {
|
|
puVar1 = (undefined4 *)operator_new(local_2c);
|
|
}
|
|
iVar4 = *param_1;
|
|
local_2c = local_2c >> 2;
|
|
}
|
|
iVar9 = param_2 - iVar4;
|
|
puVar10 = puVar1;
|
|
if (iVar9 != 0) {
|
|
__aeabi_memmove(puVar1,iVar4,iVar9);
|
|
puVar10 = (undefined4 *)((int)puVar1 + iVar9);
|
|
}
|
|
puVar5 = puVar10;
|
|
uVar6 = param_5;
|
|
if (param_5 != 0) {
|
|
do {
|
|
*puVar5 = *param_3;
|
|
uVar6 = uVar6 - 1;
|
|
puVar5 = puVar5 + 1;
|
|
} while (uVar6 != 0);
|
|
puVar10 = puVar10 + param_5;
|
|
}
|
|
if ((param_6 == 0) && (iVar4 = param_1[1] - param_2, iVar4 != 0)) {
|
|
__aeabi_memmove(puVar10,param_2,iVar4);
|
|
puVar10 = (undefined4 *)((int)puVar10 + iVar4);
|
|
}
|
|
pvVar2 = (void *)*param_1;
|
|
if (pvVar2 != (void *)0x0) {
|
|
if ((uint)(param_1[2] - (int)pvVar2) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar2,param_1[2] - (int)pvVar2);
|
|
}
|
|
else {
|
|
operator_delete(pvVar2);
|
|
}
|
|
}
|
|
*param_1 = (int)puVar1;
|
|
param_1[1] = (int)puVar10;
|
|
param_1[2] = (int)(puVar1 + local_2c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00039a00 @ 00039a00
|
|
|
|
void FUN_00039a00(facet *param_1)
|
|
|
|
{
|
|
FUN_00039fc0(param_1 + 0xc);
|
|
std::locale::facet::~facet(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00039a68 @ 00039a68
|
|
|
|
void FUN_00039a68(undefined4 *param_1,int param_2,int *param_3,uint param_4,int *param_5,
|
|
uint param_6,undefined4 param_7,uint *param_8,undefined4 param_9)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
|
|
iVar1 = *(int *)(param_2 + 0x1c);
|
|
uVar3 = 0;
|
|
iVar2 = FUN_0003a344(param_3,param_4,param_5,param_6,*(undefined4 *)(param_2 + 0x20),iVar1,0,
|
|
param_2 + 0xc,param_7,param_8,param_9);
|
|
if (iVar2 != iVar1) {
|
|
uVar3 = 4;
|
|
}
|
|
*param_8 = uVar3;
|
|
if ((param_3 != (int *)0x0) && ((param_4 & 0xff0000) == 0)) {
|
|
if ((byte *)param_3[2] < (byte *)param_3[3]) {
|
|
uVar3 = (uint)*(byte *)param_3[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_3 + 0x20))(param_3);
|
|
}
|
|
param_4 = param_4 & 0xff000000 | uVar3 & 0xff | (uint)(uVar3 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((param_5 != (int *)0x0) && ((param_6 & 0xff0000) == 0)) {
|
|
if ((byte *)param_5[2] < (byte *)param_5[3]) {
|
|
uVar3 = (uint)*(byte *)param_5[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_5 + 0x20))();
|
|
}
|
|
param_6 = (uint)(uVar3 == 0xffffffff) << 8;
|
|
}
|
|
if ((param_4 >> 8 & 0xff) == (param_6 >> 8 & 0xff)) {
|
|
*param_8 = *param_8 | 2;
|
|
}
|
|
*param_1 = param_3;
|
|
param_1[1] = param_4;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00039b82 @ 00039b82
|
|
|
|
undefined4 *
|
|
FUN_00039b82(undefined4 *param_1,int param_2,int *param_3,uint param_4,int *param_5,uint param_6,
|
|
undefined4 param_7,uint *param_8,undefined4 param_9)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
|
|
iVar1 = *(int *)(param_2 + 0x34);
|
|
uVar3 = 0;
|
|
iVar2 = FUN_0003a344(param_3,param_4,param_5,param_6,*(undefined4 *)(param_2 + 0x38),iVar1,0,
|
|
param_2 + 0xc,param_7,param_8,param_9);
|
|
if (iVar2 != iVar1) {
|
|
*param_8 = 4;
|
|
if ((param_3 != (int *)0x0) && ((param_4 & 0xff0000) == 0)) {
|
|
if ((byte *)param_3[2] < (byte *)param_3[3]) {
|
|
uVar3 = (uint)*(byte *)param_3[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_3 + 0x20))(param_3);
|
|
}
|
|
param_4 = param_4 & 0xff000000 | uVar3 & 0xff | (uint)(uVar3 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((param_5 != (int *)0x0) && ((param_6 & 0xff0000) == 0)) {
|
|
if ((byte *)param_5[2] < (byte *)param_5[3]) {
|
|
uVar3 = (uint)*(byte *)param_5[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_5 + 0x20))();
|
|
}
|
|
param_6 = (uint)(uVar3 == 0xffffffff) << 8;
|
|
}
|
|
if ((param_4 >> 8 & 0xff) != (param_6 >> 8 & 0xff)) goto LAB_00039ca2;
|
|
uVar3 = *param_8 | 2;
|
|
}
|
|
*param_8 = uVar3;
|
|
LAB_00039ca2:
|
|
*param_1 = param_3;
|
|
param_1[1] = param_4;
|
|
return param_1 + 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00039caa @ 00039caa
|
|
|
|
void FUN_00039caa(undefined4 *param_1,int param_2,int *param_3,undefined4 param_4,int *param_5,
|
|
int param_6,undefined4 param_7,uint *param_8,int param_9)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
undefined4 extraout_r1;
|
|
int *local_28;
|
|
undefined4 local_24;
|
|
int *local_20;
|
|
undefined4 local_1c;
|
|
|
|
local_24 = param_6;
|
|
local_28 = param_5;
|
|
local_20 = param_3;
|
|
local_1c = param_4;
|
|
iVar1 = FUN_0003a678(&local_20,&local_28,param_2 + 0x84,param_2 + 0x1d4);
|
|
if (iVar1 == 0xe) {
|
|
*param_8 = 4;
|
|
if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar2 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar2 == 0xffffffff,(char)uVar2);
|
|
}
|
|
if ((local_28 != (int *)0x0) && (local_24._2_1_ == '\0')) {
|
|
if ((byte *)local_28[2] < (byte *)local_28[3]) {
|
|
uVar2 = (uint)*(byte *)local_28[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*local_28 + 0x20))();
|
|
}
|
|
local_24 = (uint)(uVar2 == 0xffffffff) << 8;
|
|
}
|
|
if (local_1c._1_1_ != local_24._1_1_) goto LAB_00039d62;
|
|
uVar2 = *param_8 | 2;
|
|
}
|
|
else {
|
|
__aeabi_uidivmod(iVar1,7);
|
|
*(undefined4 *)(param_9 + 0x18) = extraout_r1;
|
|
uVar2 = 0;
|
|
}
|
|
*param_8 = uVar2;
|
|
LAB_00039d62:
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00039d6c @ 00039d6c
|
|
|
|
void FUN_00039d6c(undefined4 *param_1,int param_2,int *param_3,undefined4 param_4,int *param_5,
|
|
int param_6,undefined4 param_7,uint *param_8,int param_9)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
undefined4 extraout_r1;
|
|
int *local_28;
|
|
undefined4 local_24;
|
|
int *local_20;
|
|
undefined4 local_1c;
|
|
|
|
local_24 = param_6;
|
|
local_28 = param_5;
|
|
local_20 = param_3;
|
|
local_1c = param_4;
|
|
iVar1 = FUN_0003a678(&local_20,&local_28,param_2 + 0x1d4,param_2 + 0x414);
|
|
if (iVar1 == 0x18) {
|
|
*param_8 = 4;
|
|
if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar2 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar2 == 0xffffffff,(char)uVar2);
|
|
}
|
|
if ((local_28 != (int *)0x0) && (local_24._2_1_ == '\0')) {
|
|
if ((byte *)local_28[2] < (byte *)local_28[3]) {
|
|
uVar2 = (uint)*(byte *)local_28[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*local_28 + 0x20))();
|
|
}
|
|
local_24 = (uint)(uVar2 == 0xffffffff) << 8;
|
|
}
|
|
if (local_1c._1_1_ != local_24._1_1_) goto LAB_00039e22;
|
|
uVar2 = *param_8 | 2;
|
|
}
|
|
else {
|
|
__aeabi_uidivmod(iVar1,0xc);
|
|
*(undefined4 *)(param_9 + 0x10) = extraout_r1;
|
|
uVar2 = 0;
|
|
}
|
|
*param_8 = uVar2;
|
|
LAB_00039e22:
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00039e30 @ 00039e30
|
|
|
|
void FUN_00039e30(undefined4 *param_1,undefined4 param_2,int *param_3,uint param_4,int *param_5,
|
|
uint param_6,undefined4 param_7,uint *param_8,int param_9)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int *local_28;
|
|
undefined4 local_24;
|
|
int *local_20;
|
|
undefined4 local_1c;
|
|
|
|
local_24 = param_6;
|
|
local_28 = param_5;
|
|
uVar4 = param_6 >> 8;
|
|
uVar3 = param_4 >> 8;
|
|
local_20 = param_3;
|
|
local_1c = param_4;
|
|
if ((param_3 != (int *)0x0) && ((param_4 & 0xff0000) == 0)) {
|
|
if ((byte *)param_3[2] < (byte *)param_3[3]) {
|
|
uVar1 = (uint)*(byte *)param_3[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*param_3 + 0x20))(param_3);
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
uVar3 = (uint)(uVar1 == 0xffffffff);
|
|
local_1c._0_2_ = CONCAT11(uVar1 == 0xffffffff,(char)uVar1);
|
|
}
|
|
if ((param_5 != (int *)0x0) && ((param_6 & 0xff0000) == 0)) {
|
|
if ((byte *)param_5[2] < (byte *)param_5[3]) {
|
|
uVar1 = (uint)*(byte *)param_5[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*param_5 + 0x20))();
|
|
}
|
|
local_24 = CONCAT13(local_24._3_1_,0x10000);
|
|
uVar4 = (uint)(uVar1 == 0xffffffff);
|
|
local_24._0_2_ = CONCAT11(uVar1 == 0xffffffff,(char)uVar1);
|
|
}
|
|
if ((uVar3 & 0xff) == (uVar4 & 0xff)) {
|
|
*param_8 = 6;
|
|
}
|
|
else {
|
|
uVar3 = 0;
|
|
iVar2 = FUN_0003a840(&local_20,&local_28,param_9 + 0x14,0);
|
|
*(int *)(param_9 + 0x14) = *(int *)(param_9 + 0x14) + -0x76c;
|
|
if (iVar2 == 0) {
|
|
uVar3 = 4;
|
|
}
|
|
*param_8 = uVar3;
|
|
if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar3 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar3 == 0xffffffff,(char)uVar3);
|
|
}
|
|
if ((local_28 != (int *)0x0) && (local_24._2_1_ == '\0')) {
|
|
if ((byte *)local_28[2] < (byte *)local_28[3]) {
|
|
uVar3 = (uint)*(byte *)local_28[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*local_28 + 0x20))();
|
|
}
|
|
local_24 = (uint)(uVar3 == 0xffffffff) << 8;
|
|
}
|
|
if (local_1c._1_1_ == local_24._1_1_) {
|
|
*param_8 = *param_8 | 2;
|
|
}
|
|
}
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00039f7c @ 00039f7c
|
|
|
|
void FUN_00039f7c(facet *param_1)
|
|
|
|
{
|
|
FUN_00039fc0(param_1 + 0xc);
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00039fc0 @ 00039fc0
|
|
|
|
void FUN_00039fc0(int param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
void *pvVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
|
|
piVar1 = *(int **)(param_1 + 0x434);
|
|
if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0x420))) {
|
|
uVar3 = *(int *)(param_1 + 0x420) - (int)piVar1;
|
|
if (uVar3 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar3);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
piVar1 = *(int **)(param_1 + 0x41c);
|
|
if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0x408))) {
|
|
uVar3 = *(int *)(param_1 + 0x408) - (int)piVar1;
|
|
if (uVar3 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar3);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
iVar5 = 0;
|
|
do {
|
|
pvVar2 = *(void **)(param_1 + 0x404 + iVar5);
|
|
if ((pvVar2 != (void *)0x0) && ((void *)(param_1 + 0x3f0 + iVar5) != pvVar2)) {
|
|
uVar3 = *(int *)(param_1 + 0x3f0 + iVar5) - (int)pvVar2;
|
|
if (uVar3 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar2,uVar3);
|
|
}
|
|
else {
|
|
operator_delete(pvVar2);
|
|
}
|
|
}
|
|
iVar5 = iVar5 + -0x18;
|
|
} while (iVar5 != -0x240);
|
|
iVar5 = 0;
|
|
do {
|
|
iVar4 = param_1 + 0x138 + iVar5;
|
|
pvVar2 = *(void **)(iVar4 + 0x8c);
|
|
if ((pvVar2 != (void *)0x0) && ((void *)(iVar4 + 0x78) != pvVar2)) {
|
|
uVar3 = *(int *)(iVar4 + 0x78) - (int)pvVar2;
|
|
if (uVar3 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar2,uVar3);
|
|
}
|
|
else {
|
|
operator_delete(pvVar2);
|
|
}
|
|
}
|
|
iVar5 = iVar5 + -0x18;
|
|
} while (iVar5 != -0x150);
|
|
FUN_0003a204(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003a204 @ 0003a204
|
|
|
|
int * FUN_0003a204(int *param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
uint uVar2;
|
|
|
|
piVar1 = (int *)param_1[0x1d];
|
|
if ((piVar1 != param_1 + 0x18) && (piVar1 != (int *)0x0)) {
|
|
uVar2 = param_1[0x18] - (int)piVar1;
|
|
if (uVar2 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
piVar1 = (int *)param_1[0x17];
|
|
if ((piVar1 != param_1 + 0x12) && (piVar1 != (int *)0x0)) {
|
|
uVar2 = param_1[0x12] - (int)piVar1;
|
|
if (uVar2 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
piVar1 = (int *)param_1[0x11];
|
|
if ((piVar1 != param_1 + 0xc) && (piVar1 != (int *)0x0)) {
|
|
uVar2 = param_1[0xc] - (int)piVar1;
|
|
if (uVar2 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
piVar1 = (int *)param_1[0xb];
|
|
if ((piVar1 != param_1 + 6) && (piVar1 != (int *)0x0)) {
|
|
uVar2 = param_1[6] - (int)piVar1;
|
|
if (uVar2 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
piVar1 = (int *)param_1[5];
|
|
if ((piVar1 != param_1) && (piVar1 != (int *)0x0)) {
|
|
if (0x80 < (uint)(*param_1 - (int)piVar1)) {
|
|
operator_delete(piVar1);
|
|
return param_1;
|
|
}
|
|
std::__node_alloc::_M_deallocate(piVar1,*param_1 - (int)piVar1);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003a344 @ 0003a344
|
|
|
|
char * FUN_0003a344(int *param_1,uint param_2,int *param_3,undefined4 param_4,char *param_5,
|
|
char *param_6,undefined4 param_7,int param_8,int param_9,uint *param_10,
|
|
int *param_11)
|
|
|
|
{
|
|
char *pcVar1;
|
|
locale *this;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
char cVar8;
|
|
int *piVar9;
|
|
uint *puVar10;
|
|
bool bVar11;
|
|
locale alStack_2c [4];
|
|
int *local_28;
|
|
undefined4 local_24;
|
|
int *local_20;
|
|
undefined4 local_1c;
|
|
|
|
local_28 = param_3;
|
|
local_24 = param_4;
|
|
local_20 = param_1;
|
|
local_1c = param_2;
|
|
this = (locale *)std::locale::locale(alStack_2c,(locale *)(param_9 + 0x20));
|
|
piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
std::locale::~locale(alStack_2c);
|
|
piVar3 = param_11 + 5;
|
|
piVar4 = param_11 + 2;
|
|
puVar10 = (uint *)(param_11 + 4);
|
|
LAB_0003a3b2:
|
|
if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar5 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar5 == 0xffffffff,(char)uVar5);
|
|
}
|
|
if ((local_28 == (int *)0x0) || (local_24._2_1_ != '\0')) {
|
|
cVar8 = local_24._1_1_;
|
|
}
|
|
else {
|
|
if ((byte *)local_28[2] < (byte *)local_28[3]) {
|
|
uVar5 = (uint)*(byte *)local_28[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*local_28 + 0x20))();
|
|
}
|
|
local_24 = CONCAT13(local_24._3_1_,0x10000);
|
|
local_24._0_2_ = CONCAT11(uVar5 == 0xffffffff,(char)uVar5);
|
|
cVar8 = uVar5 == 0xffffffff;
|
|
}
|
|
if (param_5 == param_6) {
|
|
return param_5;
|
|
}
|
|
if (local_1c._1_1_ == cVar8) {
|
|
return param_5;
|
|
}
|
|
if (*param_5 != '%') {
|
|
if (local_1c._2_1_ == '\0') {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar5 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar5 == 0xffffffff,(char)uVar5);
|
|
}
|
|
else {
|
|
uVar5 = local_1c & 0xff;
|
|
}
|
|
if ((uint)local_20[2] < (uint)local_20[3]) {
|
|
local_20[2] = local_20[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*local_20 + 0x24))();
|
|
}
|
|
local_1c._0_3_ = (uint3)(ushort)local_1c;
|
|
uVar7 = (**(code **)(*piVar2 + 0x18))(piVar2,*param_5);
|
|
if ((uVar5 & 0xff) != uVar7) {
|
|
return param_5;
|
|
}
|
|
goto switchD_0003a452_caseD_43;
|
|
}
|
|
cVar8 = param_5[1];
|
|
pcVar1 = param_5 + 1;
|
|
if (cVar8 == '#') {
|
|
cVar8 = param_5[2];
|
|
pcVar1 = param_5 + 2;
|
|
}
|
|
param_5 = pcVar1;
|
|
iVar6 = 0;
|
|
switch(cVar8) {
|
|
case 'A':
|
|
iVar6 = 7;
|
|
case 'a':
|
|
iVar6 = param_8 + iVar6 * 0x18;
|
|
iVar6 = FUN_0003a678(&local_20,&local_28,iVar6 + 0x78,iVar6 + 0x120);
|
|
if (iVar6 == 7) {
|
|
return param_5;
|
|
}
|
|
param_11[6] = iVar6;
|
|
param_5 = param_5 + 1;
|
|
goto LAB_0003a3b2;
|
|
case 'B':
|
|
iVar6 = 0xc;
|
|
case 'b':
|
|
iVar6 = param_8 + iVar6 * 0x18;
|
|
uVar5 = FUN_0003a678(&local_20,&local_28,iVar6 + 0x1c8,iVar6 + 0x2e8);
|
|
if (uVar5 == 0xc) {
|
|
return param_5;
|
|
}
|
|
*puVar10 = uVar5;
|
|
param_5 = param_5 + 1;
|
|
goto LAB_0003a3b2;
|
|
default:
|
|
goto switchD_0003a452_caseD_43;
|
|
case 'H':
|
|
case 'I':
|
|
piVar9 = piVar4;
|
|
break;
|
|
case 'M':
|
|
piVar9 = param_11 + 1;
|
|
break;
|
|
case 'S':
|
|
piVar9 = param_11;
|
|
break;
|
|
case 'Y':
|
|
iVar6 = FUN_0003a840(&local_20,&local_28,piVar3,0);
|
|
*piVar3 = *piVar3 + -0x76c;
|
|
goto LAB_0003a622;
|
|
case 'd':
|
|
iVar6 = FUN_0003a840(&local_20,&local_28,param_11 + 3,0);
|
|
if ((iVar6 != 1) || (0x1e < param_11[3] - 1U)) {
|
|
LAB_0003a650:
|
|
*param_10 = *param_10 | 4;
|
|
return param_5;
|
|
}
|
|
goto switchD_0003a452_caseD_43;
|
|
case 'j':
|
|
piVar9 = param_11 + 7;
|
|
break;
|
|
case 'm':
|
|
iVar6 = FUN_0003a840(&local_20,&local_28,puVar10,0);
|
|
uVar5 = *puVar10;
|
|
*puVar10 = uVar5 - 1;
|
|
if ((0xb < uVar5 - 1) || (iVar6 == 0)) goto LAB_0003a650;
|
|
goto switchD_0003a452_caseD_43;
|
|
case 'p':
|
|
iVar6 = FUN_0003a678(&local_20,&local_28,param_8 + 0x408,param_8 + 0x438);
|
|
if (iVar6 == 0) {
|
|
if (*piVar4 != 0xc) goto switchD_0003a452_caseD_43;
|
|
*piVar4 = 0;
|
|
param_5 = param_5 + 1;
|
|
}
|
|
else {
|
|
if (iVar6 != 1) {
|
|
bVar11 = iVar6 == 2;
|
|
goto LAB_0003a624;
|
|
}
|
|
if (*piVar4 == 0xc) goto switchD_0003a452_caseD_43;
|
|
*piVar4 = *piVar4 + 0xc;
|
|
param_5 = param_5 + 1;
|
|
}
|
|
goto LAB_0003a3b2;
|
|
case 'y':
|
|
piVar9 = piVar3;
|
|
}
|
|
iVar6 = FUN_0003a840(&local_20,&local_28,piVar9,0);
|
|
LAB_0003a622:
|
|
bVar11 = iVar6 == 0;
|
|
LAB_0003a624:
|
|
if (bVar11) {
|
|
return param_5;
|
|
}
|
|
switchD_0003a452_caseD_43:
|
|
param_5 = param_5 + 1;
|
|
goto LAB_0003a3b2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003a678 @ 0003a678
|
|
|
|
int FUN_0003a678(int *param_1,int *param_2,int param_3,int param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
int local_48;
|
|
int local_44;
|
|
int local_3c;
|
|
char local_2c [24];
|
|
|
|
local_2c[0x14] = '\0';
|
|
local_2c[0x15] = '\0';
|
|
local_2c[0x16] = '\0';
|
|
local_2c[0x17] = '\0';
|
|
local_2c[0x10] = '\0';
|
|
local_2c[0x11] = '\0';
|
|
local_2c[0x12] = '\0';
|
|
local_2c[0x13] = '\0';
|
|
local_2c[0xc] = '\0';
|
|
local_2c[0xd] = '\0';
|
|
local_2c[0xe] = '\0';
|
|
local_2c[0xf] = '\0';
|
|
local_2c[8] = '\0';
|
|
local_2c[9] = '\0';
|
|
local_2c[10] = '\0';
|
|
local_2c[0xb] = '\0';
|
|
local_2c[4] = '\0';
|
|
local_2c[5] = '\0';
|
|
local_2c[6] = '\0';
|
|
local_2c[7] = '\0';
|
|
local_2c[0] = '\0';
|
|
local_2c[1] = '\0';
|
|
local_2c[2] = '\0';
|
|
local_2c[3] = '\0';
|
|
local_48 = (param_4 - param_3 >> 3) * -0x55555555;
|
|
iVar8 = 0;
|
|
iVar5 = 0;
|
|
iVar7 = local_48;
|
|
local_3c = local_48;
|
|
while( true ) {
|
|
piVar1 = (int *)*param_1;
|
|
if ((piVar1 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar1[2] < (byte *)piVar1[3]) {
|
|
uVar2 = (uint)*(byte *)piVar1[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar1 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
piVar1 = (int *)*param_2;
|
|
if ((piVar1 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar1[2] < (byte *)piVar1[3]) {
|
|
uVar2 = (uint)*(byte *)piVar1[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar1 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break;
|
|
local_44 = iVar7;
|
|
if (iVar8 < iVar7) {
|
|
piVar1 = (int *)(param_3 + 0x14 + iVar8 * 0x18);
|
|
iVar4 = iVar8;
|
|
iVar6 = iVar8;
|
|
do {
|
|
if (local_2c[iVar6] == '\0') {
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar2 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if ((uVar2 & 0xff) == (uint)*(byte *)(*piVar1 + iVar5)) {
|
|
if (iVar5 == (piVar1[-1] + -1) - *piVar1) {
|
|
local_2c[iVar6] = '\x01';
|
|
iVar8 = iVar4 + 1;
|
|
if (iVar6 != iVar4) {
|
|
iVar8 = iVar4;
|
|
}
|
|
local_3c = local_3c + -1;
|
|
iVar4 = iVar8;
|
|
local_48 = iVar6;
|
|
if (local_3c == 0) {
|
|
piVar1 = (int *)*param_1;
|
|
if ((uint)piVar1[2] < (uint)piVar1[3]) {
|
|
piVar1[2] = piVar1[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
return iVar6;
|
|
}
|
|
}
|
|
local_44 = iVar6 + 1;
|
|
iVar8 = iVar4;
|
|
}
|
|
else {
|
|
local_2c[iVar6] = '\x01';
|
|
iVar8 = iVar4 + 1;
|
|
if (iVar6 != iVar4) {
|
|
iVar8 = iVar4;
|
|
}
|
|
local_3c = local_3c + -1;
|
|
if (local_3c == 0) {
|
|
return local_48;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
iVar8 = iVar4 + 1;
|
|
if (iVar6 != iVar4) {
|
|
iVar8 = iVar4;
|
|
}
|
|
}
|
|
piVar1 = piVar1 + 6;
|
|
iVar6 = iVar6 + 1;
|
|
iVar4 = iVar8;
|
|
} while (iVar6 < iVar7);
|
|
}
|
|
piVar1 = (int *)*param_1;
|
|
if ((uint)piVar1[2] < (uint)piVar1[3]) {
|
|
piVar1[2] = piVar1[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
iVar5 = iVar5 + 1;
|
|
iVar7 = local_44;
|
|
}
|
|
return local_48;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003a840 @ 0003a840
|
|
|
|
undefined4 FUN_0003a840(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined1 auStack_30 [4];
|
|
uint local_2c [4];
|
|
uint *local_1c;
|
|
uint *local_18;
|
|
|
|
local_1c = local_2c;
|
|
local_2c[0] = local_2c[0] & 0xffffff00;
|
|
local_18 = local_1c;
|
|
uVar1 = FUN_0003a8bc(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30);
|
|
if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) {
|
|
if (local_2c[0] - (int)local_18 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003a8bc @ 0003a8bc
|
|
|
|
undefined4
|
|
FUN_0003a8bc(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6,uint param_7
|
|
,int param_8)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
bool bVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
int iVar10;
|
|
int iVar11;
|
|
undefined4 local_84;
|
|
int local_6c;
|
|
char *local_64;
|
|
int local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar7 = *(int *)(param_8 + 0x10);
|
|
iVar9 = *(int *)(param_8 + 0x14);
|
|
local_84 = 1;
|
|
iVar2 = __divsi3(0x7fffffff,param_3);
|
|
local_6c = param_5;
|
|
cVar1 = '\0';
|
|
bVar6 = false;
|
|
local_58 = 0;
|
|
iVar11 = 0;
|
|
while( true ) {
|
|
local_64 = acStack_54 + local_58;
|
|
piVar3 = (int *)*param_1;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar4 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
iVar8 = 0xff;
|
|
iVar10 = iVar11;
|
|
if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) {
|
|
*local_64 = cVar1;
|
|
local_58 = local_58 + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
if (-1 < (char)uVar4) {
|
|
iVar8 = std::priv::__digit_val_table(uVar4 & 0xff);
|
|
}
|
|
if (param_3 <= iVar8) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
local_6c = local_6c + 1;
|
|
if (iVar2 < iVar11) {
|
|
bVar6 = true;
|
|
}
|
|
else {
|
|
iVar10 = iVar8 + iVar11 * param_3;
|
|
bVar6 = (bool)(bVar6 | (iVar11 != 0 && iVar10 <= iVar11));
|
|
}
|
|
}
|
|
piVar3 = (int *)*param_1;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
iVar11 = iVar10;
|
|
}
|
|
if ((iVar9 != iVar7) && (local_58 != 0)) {
|
|
*local_64 = cVar1;
|
|
local_64 = acStack_54 + local_58 + 1;
|
|
}
|
|
uVar5 = 0;
|
|
if (0 < local_6c) {
|
|
if (bVar6) {
|
|
*param_4 = 0x7fffffff;
|
|
return 0;
|
|
}
|
|
iVar2 = -iVar11;
|
|
if (param_6 == 0) {
|
|
iVar2 = iVar11;
|
|
}
|
|
*param_4 = iVar2;
|
|
uVar5 = local_84;
|
|
if (iVar9 != iVar7) {
|
|
uVar5 = std::priv::__valid_grouping
|
|
(acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003aac0 @ 0003aac0
|
|
|
|
void FUN_0003aac0(facet *param_1)
|
|
|
|
{
|
|
FUN_00039fc0(param_1 + 0xc);
|
|
std::locale::facet::~facet(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ac64 @ 0003ac64
|
|
|
|
void FUN_0003ac64(facet *param_1)
|
|
|
|
{
|
|
FUN_00039fc0(param_1 + 0xc);
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ad04 @ 0003ad04
|
|
|
|
void FUN_0003ad04(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6
|
|
,undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,
|
|
undefined4 param_11)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
uint local_38;
|
|
|
|
iVar1 = *(int *)(param_2 + 0x1c);
|
|
uVar3 = 0;
|
|
iVar2 = FUN_0003b4cc(param_3,param_4,param_5,param_6,param_7,param_8,
|
|
*(undefined4 *)(param_2 + 0x20),iVar1,0,param_2 + 0xc,param_9,param_10,
|
|
param_11);
|
|
if (iVar2 != iVar1) {
|
|
uVar3 = 4;
|
|
}
|
|
*param_10 = uVar3;
|
|
if ((param_3 != (int *)0x0) && ((param_5 & 0xff00) == 0)) {
|
|
if ((int *)param_3[2] < (int *)param_3[3]) {
|
|
param_4 = *(int *)param_3[2];
|
|
}
|
|
else {
|
|
param_4 = (**(code **)(*param_3 + 0x20))();
|
|
}
|
|
param_5 = param_5 & 0xffff0000 | (uint)(param_4 == -1) | 0x100;
|
|
}
|
|
local_38 = param_8;
|
|
if ((param_6 != (int *)0x0) && ((param_8 & 0xff00) == 0)) {
|
|
if ((int *)param_6[2] < (int *)param_6[3]) {
|
|
iVar1 = *(int *)param_6[2];
|
|
}
|
|
else {
|
|
iVar1 = (**(code **)(*param_6 + 0x20))(param_6);
|
|
}
|
|
local_38 = (uint)(iVar1 == -1);
|
|
}
|
|
if ((param_5 & 0xff) == (local_38 & 0xff)) {
|
|
*param_10 = *param_10 | 2;
|
|
}
|
|
*param_1 = param_3;
|
|
param_1[1] = param_4;
|
|
param_1[2] = param_5;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ae38 @ 0003ae38
|
|
|
|
undefined4 *
|
|
FUN_0003ae38(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6,
|
|
undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,undefined4 param_11)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
|
|
iVar3 = *(int *)(param_2 + 0x34);
|
|
uVar2 = 0;
|
|
iVar1 = FUN_0003b4cc(param_3,param_4,param_5,param_6,param_7,param_8,
|
|
*(undefined4 *)(param_2 + 0x38),iVar3,0,param_2 + 0xc,param_9,param_10,
|
|
param_11);
|
|
if (iVar1 != iVar3) {
|
|
*param_10 = 4;
|
|
if ((param_3 != (int *)0x0) && ((param_5 & 0xff00) == 0)) {
|
|
if ((int *)param_3[2] < (int *)param_3[3]) {
|
|
param_4 = *(int *)param_3[2];
|
|
}
|
|
else {
|
|
param_4 = (**(code **)(*param_3 + 0x20))();
|
|
}
|
|
param_5 = param_5 & 0xffff0000 | (uint)(param_4 == -1) | 0x100;
|
|
}
|
|
if ((param_6 != (int *)0x0) && ((param_8 & 0xff00) == 0)) {
|
|
if ((int *)param_6[2] < (int *)param_6[3]) {
|
|
iVar1 = *(int *)param_6[2];
|
|
}
|
|
else {
|
|
iVar1 = (**(code **)(*param_6 + 0x20))();
|
|
}
|
|
param_8 = (uint)(iVar1 == -1);
|
|
}
|
|
if ((param_5 & 0xff) != (param_8 & 0xff)) goto LAB_0003af3c;
|
|
uVar2 = *param_10 | 2;
|
|
}
|
|
*param_10 = uVar2;
|
|
LAB_0003af3c:
|
|
*param_1 = param_3;
|
|
param_1[1] = param_4;
|
|
param_1[2] = param_5;
|
|
return param_1 + 3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003af48 @ 0003af48
|
|
|
|
void FUN_0003af48(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6
|
|
,undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,int param_11)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
undefined4 extraout_r1;
|
|
int *local_2c;
|
|
undefined4 local_28;
|
|
undefined4 local_24;
|
|
int *local_20;
|
|
int local_1c;
|
|
undefined4 local_18;
|
|
|
|
local_18 = param_5;
|
|
local_28 = param_7;
|
|
local_24 = param_8;
|
|
local_2c = param_6;
|
|
local_20 = param_3;
|
|
local_1c = param_4;
|
|
iVar1 = FUN_0003b804(&local_20,&local_2c,param_2 + 0x84,param_2 + 0x474);
|
|
if (iVar1 == 0xe) {
|
|
*param_10 = 4;
|
|
if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if ((local_2c != (int *)0x0) && (local_24._1_1_ == '\0')) {
|
|
if ((int *)local_2c[2] < (int *)local_2c[3]) {
|
|
iVar1 = *(int *)local_2c[2];
|
|
}
|
|
else {
|
|
iVar1 = (**(code **)(*local_2c + 0x20))();
|
|
}
|
|
local_24 = (uint)(iVar1 == -1);
|
|
}
|
|
if ((local_18 & 0xff) != (local_24 & 0xff)) goto LAB_0003b00a;
|
|
uVar2 = *param_10 | 2;
|
|
}
|
|
else {
|
|
__aeabi_uidivmod(iVar1,7);
|
|
*(undefined4 *)(param_11 + 0x18) = extraout_r1;
|
|
uVar2 = 0;
|
|
}
|
|
*param_10 = uVar2;
|
|
LAB_0003b00a:
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
param_1[2] = local_18;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003b020 @ 0003b020
|
|
|
|
void FUN_0003b020(undefined4 *param_1,int param_2,int *param_3,int param_4,uint param_5,int *param_6
|
|
,undefined4 param_7,uint param_8,undefined4 param_9,uint *param_10,int param_11)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
undefined4 extraout_r1;
|
|
int *local_2c;
|
|
undefined4 local_28;
|
|
undefined4 local_24;
|
|
int *local_20;
|
|
int local_1c;
|
|
undefined4 local_18;
|
|
|
|
local_18 = param_5;
|
|
local_28 = param_7;
|
|
local_24 = param_8;
|
|
local_2c = param_6;
|
|
local_20 = param_3;
|
|
local_1c = param_4;
|
|
iVar1 = FUN_0003b804(&local_20,&local_2c,param_2 + 0x474,param_2 + 0xb34);
|
|
if (iVar1 == 0x18) {
|
|
*param_10 = 4;
|
|
if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if ((local_2c != (int *)0x0) && (local_24._1_1_ == '\0')) {
|
|
if ((int *)local_2c[2] < (int *)local_2c[3]) {
|
|
iVar1 = *(int *)local_2c[2];
|
|
}
|
|
else {
|
|
iVar1 = (**(code **)(*local_2c + 0x20))();
|
|
}
|
|
local_24 = (uint)(iVar1 == -1);
|
|
}
|
|
if ((local_18 & 0xff) != (local_24 & 0xff)) goto LAB_0003b0de;
|
|
uVar2 = *param_10 | 2;
|
|
}
|
|
else {
|
|
__aeabi_uidivmod(iVar1,0xc);
|
|
*(undefined4 *)(param_11 + 0x10) = extraout_r1;
|
|
uVar2 = 0;
|
|
}
|
|
*param_10 = uVar2;
|
|
LAB_0003b0de:
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
param_1[2] = local_18;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003b0f8 @ 0003b0f8
|
|
|
|
void FUN_0003b0f8(undefined4 *param_1,undefined4 param_2,int *param_3,int param_4,uint param_5,
|
|
int *param_6,int param_7,uint param_8,undefined4 param_9,uint *param_10,
|
|
int param_11)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
int *local_2c;
|
|
int local_28;
|
|
undefined4 local_24;
|
|
int *local_20;
|
|
int local_1c;
|
|
undefined4 local_18;
|
|
|
|
local_18 = param_5;
|
|
local_28 = param_7;
|
|
local_24 = param_8;
|
|
local_2c = param_6;
|
|
local_20 = param_3;
|
|
local_1c = param_4;
|
|
if ((param_3 != (int *)0x0) && ((param_5 & 0xff00) == 0)) {
|
|
if ((int *)param_3[2] < (int *)param_3[3]) {
|
|
local_1c = *(int *)param_3[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*param_3 + 0x20))(param_3);
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
param_5 = (uint)(local_1c == -1);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if ((param_6 != (int *)0x0) && ((param_8 & 0xff00) == 0)) {
|
|
if ((int *)param_6[2] < (int *)param_6[3]) {
|
|
local_28 = *(int *)param_6[2];
|
|
}
|
|
else {
|
|
local_28 = (**(code **)(*param_6 + 0x20))(param_6);
|
|
}
|
|
local_24 = CONCAT22(local_24._2_2_,0x100);
|
|
param_8 = (uint)(local_28 == -1);
|
|
local_24 = CONCAT31(local_24._1_3_,local_28 == -1);
|
|
}
|
|
if ((param_5 & 0xff) == (param_8 & 0xff)) {
|
|
*param_10 = 6;
|
|
}
|
|
else {
|
|
uVar2 = 0;
|
|
iVar1 = FUN_0003b9cc(&local_20,&local_2c,param_11 + 0x14,0);
|
|
*(int *)(param_11 + 0x14) = *(int *)(param_11 + 0x14) + -0x76c;
|
|
if (iVar1 == 0) {
|
|
uVar2 = 4;
|
|
}
|
|
*param_10 = uVar2;
|
|
if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if ((local_2c != (int *)0x0) && (local_24._1_1_ == '\0')) {
|
|
if ((int *)local_2c[2] < (int *)local_2c[3]) {
|
|
iVar1 = *(int *)local_2c[2];
|
|
}
|
|
else {
|
|
iVar1 = (**(code **)(*local_2c + 0x20))();
|
|
}
|
|
local_24 = (uint)(iVar1 == -1);
|
|
}
|
|
if ((local_18 & 0xff) == (local_24 & 0xff)) {
|
|
*param_10 = *param_10 | 2;
|
|
}
|
|
}
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
param_1[2] = local_18;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003b248 @ 0003b248
|
|
|
|
void FUN_0003b248(facet *param_1)
|
|
|
|
{
|
|
FUN_0003b28c(param_1 + 0xc);
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003b28c @ 0003b28c
|
|
|
|
void FUN_0003b28c(int param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
|
|
piVar1 = *(int **)(param_1 + 0xbb4);
|
|
if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0xb70))) {
|
|
uVar2 = *(int *)(param_1 + 0xb70) - (int)piVar1;
|
|
if (uVar2 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
piVar1 = *(int **)(param_1 + 0xb6c);
|
|
if ((piVar1 != (int *)0x0) && (piVar1 != (int *)(param_1 + 0xb28))) {
|
|
uVar2 = *(int *)(param_1 + 0xb28) - (int)piVar1;
|
|
if (uVar2 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
iVar5 = 0;
|
|
do {
|
|
piVar3 = (int *)(param_1 + 0xae0 + iVar5);
|
|
piVar1 = *(int **)(param_1 + 0xb24 + iVar5);
|
|
if ((piVar1 != (int *)0x0) && (piVar3 != piVar1)) {
|
|
uVar2 = *piVar3 - (int)piVar1;
|
|
if (uVar2 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
iVar5 = iVar5 + -0x48;
|
|
} while (iVar5 != -0x6c0);
|
|
iVar5 = 0;
|
|
do {
|
|
iVar4 = param_1 + 0x3a8 + iVar5;
|
|
piVar1 = *(int **)(iVar4 + 0xbc);
|
|
piVar3 = (int *)(iVar4 + 0x78);
|
|
if ((piVar1 != (int *)0x0) && (piVar3 != piVar1)) {
|
|
uVar2 = *piVar3 - (int)piVar1;
|
|
if (uVar2 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,uVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
iVar5 = iVar5 + -0x48;
|
|
} while (iVar5 != -0x3f0);
|
|
FUN_0003a204(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003b4cc @ 0003b4cc
|
|
|
|
char * FUN_0003b4cc(int *param_1,int param_2,undefined4 param_3,int *param_4,int param_5,
|
|
undefined4 param_6,char *param_7,char *param_8,undefined4 param_9,int param_10,
|
|
int param_11,uint *param_12,int *param_13)
|
|
|
|
{
|
|
char *pcVar1;
|
|
locale *this;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
char cVar8;
|
|
int *piVar9;
|
|
uint *puVar10;
|
|
bool bVar11;
|
|
locale alStack_30 [4];
|
|
int *local_2c;
|
|
int local_28;
|
|
undefined4 local_24;
|
|
int *local_20;
|
|
int local_1c;
|
|
undefined4 local_18;
|
|
|
|
local_28 = param_5;
|
|
local_24 = param_6;
|
|
local_2c = param_4;
|
|
local_20 = param_1;
|
|
local_1c = param_2;
|
|
local_18 = param_3;
|
|
this = (locale *)std::locale::locale(alStack_30,(locale *)(param_11 + 0x20));
|
|
piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
std::locale::~locale(alStack_30);
|
|
piVar3 = param_13 + 5;
|
|
piVar4 = param_13 + 2;
|
|
puVar10 = (uint *)(param_13 + 4);
|
|
LAB_0003b53c:
|
|
if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if ((local_2c == (int *)0x0) || (local_24._1_1_ != '\0')) {
|
|
cVar8 = (char)local_24;
|
|
}
|
|
else {
|
|
if ((int *)local_2c[2] < (int *)local_2c[3]) {
|
|
local_28 = *(int *)local_2c[2];
|
|
}
|
|
else {
|
|
local_28 = (**(code **)(*local_2c + 0x20))();
|
|
}
|
|
local_24 = CONCAT22(local_24._2_2_,0x100);
|
|
local_24 = CONCAT31(local_24._1_3_,local_28 == -1);
|
|
cVar8 = local_28 == -1;
|
|
}
|
|
if (param_7 == param_8) {
|
|
return param_7;
|
|
}
|
|
if ((byte)local_18 == cVar8) {
|
|
return param_7;
|
|
}
|
|
if (*param_7 != '%') {
|
|
if (local_18._1_1_ == '\0') {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
iVar5 = local_1c;
|
|
if ((uint)local_20[2] < (uint)local_20[3]) {
|
|
local_20[2] = local_20[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*local_20 + 0x24))();
|
|
}
|
|
local_18._0_2_ = (ushort)(byte)local_18;
|
|
iVar6 = (**(code **)(*piVar2 + 0x28))(piVar2,*param_7);
|
|
if (iVar5 != iVar6) {
|
|
return param_7;
|
|
}
|
|
goto switchD_0003b5da_caseD_43;
|
|
}
|
|
cVar8 = param_7[1];
|
|
pcVar1 = param_7 + 1;
|
|
if (cVar8 == '#') {
|
|
cVar8 = param_7[2];
|
|
pcVar1 = param_7 + 2;
|
|
}
|
|
param_7 = pcVar1;
|
|
iVar5 = 0;
|
|
switch(cVar8) {
|
|
case 'A':
|
|
iVar5 = 7;
|
|
case 'a':
|
|
iVar5 = param_10 + iVar5 * 0x48;
|
|
iVar5 = FUN_0003b804(&local_20,&local_2c,iVar5 + 0x78,iVar5 + 0x270);
|
|
if (iVar5 == 7) {
|
|
return param_7;
|
|
}
|
|
param_13[6] = iVar5;
|
|
param_7 = param_7 + 1;
|
|
goto LAB_0003b53c;
|
|
case 'B':
|
|
iVar5 = 0xc;
|
|
case 'b':
|
|
iVar5 = param_10 + iVar5 * 0x48;
|
|
uVar7 = FUN_0003b804(&local_20,&local_2c,iVar5 + 0x468,iVar5 + 0x7c8);
|
|
if (uVar7 == 0xc) {
|
|
return param_7;
|
|
}
|
|
*puVar10 = uVar7;
|
|
param_7 = param_7 + 1;
|
|
goto LAB_0003b53c;
|
|
default:
|
|
goto switchD_0003b5da_caseD_43;
|
|
case 'H':
|
|
case 'I':
|
|
piVar9 = piVar4;
|
|
break;
|
|
case 'M':
|
|
piVar9 = param_13 + 1;
|
|
break;
|
|
case 'S':
|
|
piVar9 = param_13;
|
|
break;
|
|
case 'Y':
|
|
iVar5 = FUN_0003b9cc(&local_20,&local_2c,piVar3,0);
|
|
*piVar3 = *piVar3 + -0x76c;
|
|
goto LAB_0003b7a4;
|
|
case 'd':
|
|
iVar5 = FUN_0003b9cc(&local_20,&local_2c,param_13 + 3,0);
|
|
if ((iVar5 != 1) || (0x1e < param_13[3] - 1U)) {
|
|
LAB_0003b7d2:
|
|
*param_12 = *param_12 | 4;
|
|
return param_7;
|
|
}
|
|
goto switchD_0003b5da_caseD_43;
|
|
case 'j':
|
|
piVar9 = param_13 + 7;
|
|
break;
|
|
case 'm':
|
|
iVar5 = FUN_0003b9cc(&local_20,&local_2c,puVar10,0);
|
|
uVar7 = *puVar10;
|
|
*puVar10 = uVar7 - 1;
|
|
if ((0xb < uVar7 - 1) || (iVar5 == 0)) goto LAB_0003b7d2;
|
|
goto switchD_0003b5da_caseD_43;
|
|
case 'p':
|
|
iVar5 = FUN_0003b804(&local_20,&local_2c,param_10 + 0xb28,param_10 + 3000);
|
|
if (iVar5 == 0) {
|
|
if (*piVar4 != 0xc) goto switchD_0003b5da_caseD_43;
|
|
*piVar4 = 0;
|
|
param_7 = param_7 + 1;
|
|
}
|
|
else {
|
|
if (iVar5 != 1) {
|
|
bVar11 = iVar5 == 2;
|
|
goto LAB_0003b7a6;
|
|
}
|
|
if (*piVar4 == 0xc) goto switchD_0003b5da_caseD_43;
|
|
*piVar4 = *piVar4 + 0xc;
|
|
param_7 = param_7 + 1;
|
|
}
|
|
goto LAB_0003b53c;
|
|
case 'y':
|
|
piVar9 = piVar3;
|
|
}
|
|
iVar5 = FUN_0003b9cc(&local_20,&local_2c,piVar9,0);
|
|
LAB_0003b7a4:
|
|
bVar11 = iVar5 == 0;
|
|
LAB_0003b7a6:
|
|
if (bVar11) {
|
|
return param_7;
|
|
}
|
|
switchD_0003b5da_caseD_43:
|
|
param_7 = param_7 + 1;
|
|
goto LAB_0003b53c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003b804 @ 0003b804
|
|
|
|
int FUN_0003b804(int *param_1,int *param_2,int param_3,int param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
bool bVar8;
|
|
char cVar9;
|
|
int local_48;
|
|
int local_44;
|
|
int local_38;
|
|
char local_2c [24];
|
|
|
|
iVar6 = 0;
|
|
local_2c[0x14] = '\0';
|
|
local_2c[0x15] = '\0';
|
|
local_2c[0x16] = '\0';
|
|
local_2c[0x17] = '\0';
|
|
local_2c[0x10] = '\0';
|
|
local_2c[0x11] = '\0';
|
|
local_2c[0x12] = '\0';
|
|
local_2c[0x13] = '\0';
|
|
local_2c[0xc] = '\0';
|
|
local_2c[0xd] = '\0';
|
|
local_2c[0xe] = '\0';
|
|
local_2c[0xf] = '\0';
|
|
local_2c[8] = '\0';
|
|
local_2c[9] = '\0';
|
|
local_2c[10] = '\0';
|
|
local_2c[0xb] = '\0';
|
|
local_2c[4] = '\0';
|
|
local_2c[5] = '\0';
|
|
local_2c[6] = '\0';
|
|
local_2c[7] = '\0';
|
|
local_2c[0] = '\0';
|
|
local_2c[1] = '\0';
|
|
local_2c[2] = '\0';
|
|
local_2c[3] = '\0';
|
|
bVar8 = *(char *)((int)param_1 + 9) == '\0';
|
|
local_48 = (param_4 - param_3 >> 3) * 0x38e38e39;
|
|
iVar7 = 0;
|
|
iVar4 = local_48;
|
|
local_38 = local_48;
|
|
while( true ) {
|
|
piVar1 = (int *)*param_1;
|
|
if ((piVar1 != (int *)0x0) && (bVar8)) {
|
|
if ((int *)piVar1[2] < (int *)piVar1[3]) {
|
|
iVar2 = *(int *)piVar1[2];
|
|
}
|
|
else {
|
|
iVar2 = (**(code **)(*piVar1 + 0x20))();
|
|
}
|
|
param_1[1] = iVar2;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar2 == -1;
|
|
}
|
|
piVar1 = (int *)*param_2;
|
|
if ((piVar1 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) {
|
|
cVar9 = (char)param_2[2];
|
|
}
|
|
else {
|
|
if ((int *)piVar1[2] < (int *)piVar1[3]) {
|
|
iVar2 = *(int *)piVar1[2];
|
|
}
|
|
else {
|
|
iVar2 = (**(code **)(*piVar1 + 0x20))();
|
|
}
|
|
param_2[1] = iVar2;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
cVar9 = iVar2 == -1;
|
|
*(char *)(param_2 + 2) = cVar9;
|
|
}
|
|
if ((char)param_1[2] == cVar9) break;
|
|
local_44 = iVar4;
|
|
if (iVar7 < iVar4) {
|
|
piVar1 = (int *)(param_3 + 0x44 + iVar7 * 0x48);
|
|
iVar2 = iVar7;
|
|
iVar5 = iVar7;
|
|
do {
|
|
if (local_2c[iVar5] == '\0') {
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar7 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_1[1] = iVar7;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar7 == -1;
|
|
}
|
|
else {
|
|
iVar7 = param_1[1];
|
|
}
|
|
if (iVar7 == *(int *)(*piVar1 + iVar6 * 4)) {
|
|
if (iVar6 == (piVar1[-1] - *piVar1 >> 2) + -1) {
|
|
local_2c[iVar5] = '\x01';
|
|
iVar7 = iVar2 + 1;
|
|
if (iVar5 != iVar2) {
|
|
iVar7 = iVar2;
|
|
}
|
|
local_38 = local_38 + -1;
|
|
iVar2 = iVar7;
|
|
local_48 = iVar5;
|
|
if (local_38 == 0) {
|
|
piVar1 = (int *)*param_1;
|
|
if ((uint)piVar1[2] < (uint)piVar1[3]) {
|
|
piVar1[2] = piVar1[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
return iVar5;
|
|
}
|
|
}
|
|
local_44 = iVar5 + 1;
|
|
iVar7 = iVar2;
|
|
}
|
|
else {
|
|
local_2c[iVar5] = '\x01';
|
|
iVar7 = iVar2 + 1;
|
|
if (iVar5 != iVar2) {
|
|
iVar7 = iVar2;
|
|
}
|
|
local_38 = local_38 + -1;
|
|
if (local_38 == 0) {
|
|
return local_48;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
iVar7 = iVar2 + 1;
|
|
if (iVar5 != iVar2) {
|
|
iVar7 = iVar2;
|
|
}
|
|
}
|
|
piVar1 = piVar1 + 0x12;
|
|
iVar5 = iVar5 + 1;
|
|
iVar2 = iVar7;
|
|
} while (iVar5 < iVar4);
|
|
}
|
|
piVar1 = (int *)*param_1;
|
|
if ((uint)piVar1[2] < (uint)piVar1[3]) {
|
|
piVar1[2] = piVar1[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
iVar6 = iVar6 + 1;
|
|
bVar8 = true;
|
|
iVar4 = local_44;
|
|
}
|
|
return local_48;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003b9cc @ 0003b9cc
|
|
|
|
undefined4 FUN_0003b9cc(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined1 auStack_30 [4];
|
|
uint local_2c [4];
|
|
uint *local_1c;
|
|
uint *local_18;
|
|
|
|
local_1c = local_2c;
|
|
local_2c[0] = local_2c[0] & 0xffffff00;
|
|
local_18 = local_1c;
|
|
uVar1 = FUN_0003ba48(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30);
|
|
if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) {
|
|
if (local_2c[0] - (int)local_18 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ba48 @ 0003ba48
|
|
|
|
uint FUN_0003ba48(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
bool bVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
char *pcVar10;
|
|
char cVar11;
|
|
int local_70;
|
|
uint local_68;
|
|
int local_5c;
|
|
int local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar9 = *(int *)(param_8 + 0x10);
|
|
iVar2 = *(int *)(param_8 + 0x14);
|
|
local_5c = 0;
|
|
cVar11 = *(char *)((int)param_1 + 9);
|
|
local_68 = 1;
|
|
iVar3 = __divsi3(0x7fffffff,param_3);
|
|
local_70 = param_5;
|
|
cVar1 = '\0';
|
|
local_58 = 0;
|
|
bVar7 = false;
|
|
uVar6 = (uint)(cVar11 == '\0');
|
|
while( true ) {
|
|
pcVar10 = acStack_54 + local_5c;
|
|
piVar4 = (int *)*param_1;
|
|
if ((piVar4 != (int *)0x0) && (uVar6 != 0)) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar5;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar5 == -1;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) {
|
|
cVar11 = (char)param_2[2];
|
|
}
|
|
else {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar5;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
cVar11 = iVar5 == -1;
|
|
*(char *)(param_2 + 2) = cVar11;
|
|
}
|
|
if ((char)param_1[2] == cVar11) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint *)piVar4[2] < (uint *)piVar4[3]) {
|
|
uVar6 = *(uint *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = uVar6;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = param_1[1];
|
|
}
|
|
iVar5 = local_58;
|
|
if (uVar6 == param_7 && iVar2 != iVar9) {
|
|
*pcVar10 = cVar1;
|
|
local_5c = local_5c + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
iVar8 = 0xff;
|
|
if (uVar6 < 0x80) {
|
|
iVar8 = std::priv::__digit_val_table(uVar6);
|
|
}
|
|
if (param_3 <= iVar8) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
local_70 = local_70 + 1;
|
|
if (iVar3 < local_58) {
|
|
bVar7 = true;
|
|
}
|
|
else {
|
|
iVar5 = iVar8 + local_58 * param_3;
|
|
bVar7 = (bool)(bVar7 | (local_58 != 0 && iVar5 <= local_58));
|
|
}
|
|
}
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
uVar6 = local_68;
|
|
local_58 = iVar5;
|
|
}
|
|
if ((iVar2 != iVar9) && (local_5c != 0)) {
|
|
*pcVar10 = cVar1;
|
|
pcVar10 = acStack_54 + local_5c + 1;
|
|
}
|
|
uVar6 = 0;
|
|
if (0 < local_70) {
|
|
if (bVar7) {
|
|
*param_4 = 0x7fffffff;
|
|
}
|
|
else {
|
|
iVar3 = -local_58;
|
|
if (param_6 == 0) {
|
|
iVar3 = local_58;
|
|
}
|
|
*param_4 = iVar3;
|
|
uVar6 = local_68;
|
|
if (iVar2 != iVar9) {
|
|
uVar6 = std::priv::__valid_grouping
|
|
(acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10))
|
|
;
|
|
}
|
|
}
|
|
}
|
|
return uVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003bc38 @ 0003bc38
|
|
|
|
void FUN_0003bc38(facet *param_1)
|
|
|
|
{
|
|
FUN_0003b28c(param_1 + 0xc);
|
|
std::locale::facet::~facet(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003bdfc @ 0003bdfc
|
|
|
|
void FUN_0003bdfc(facet *param_1)
|
|
|
|
{
|
|
FUN_0003b28c(param_1 + 0xc);
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003bf80 @ 0003bf80
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x0003c6ba) */
|
|
|
|
void FUN_0003bf80(undefined4 *param_1,int *param_2,uint param_3,int *param_4,uint param_5,
|
|
int param_6,int param_7,uint *param_8,uint *param_9,char *param_10)
|
|
|
|
{
|
|
uint *puVar1;
|
|
uint *puVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
locale *this;
|
|
int *piVar5;
|
|
int *piVar6;
|
|
int *piVar7;
|
|
undefined4 uVar8;
|
|
undefined4 uVar9;
|
|
int iVar10;
|
|
undefined4 uVar11;
|
|
char cVar12;
|
|
int iVar13;
|
|
int iVar14;
|
|
uint uVar15;
|
|
undefined4 local_104;
|
|
int local_fc;
|
|
uint local_c8;
|
|
int *local_c4 [2];
|
|
char local_bc;
|
|
int *local_b8 [2];
|
|
char local_b0;
|
|
int local_ac [4];
|
|
int *local_9c;
|
|
int *local_98;
|
|
int *local_94 [2];
|
|
char local_8c;
|
|
int local_88 [4];
|
|
undefined4 local_78;
|
|
int *local_74;
|
|
uint local_70 [4];
|
|
uint *local_60;
|
|
uint *local_5c;
|
|
int local_58 [4];
|
|
byte *local_48;
|
|
byte *local_44;
|
|
int local_40 [4];
|
|
byte *local_30;
|
|
byte *local_2c;
|
|
undefined4 local_28;
|
|
locale alStack_24 [4];
|
|
int *local_20;
|
|
undefined4 local_1c;
|
|
|
|
uVar3 = param_3 >> 8;
|
|
local_20 = param_2;
|
|
local_1c = param_3;
|
|
if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar4 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
uVar3 = (uint)(uVar4 == 0xffffffff);
|
|
local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4);
|
|
}
|
|
if (((param_5 & 0xff0000) == 0) && (param_4 != (int *)0x0)) {
|
|
if ((byte *)param_4[2] < (byte *)param_4[3]) {
|
|
uVar4 = (uint)*(byte *)param_4[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*param_4 + 0x20))(param_4);
|
|
}
|
|
param_5 = param_5 & 0xff000000 | uVar4 & 0xff | (uint)(uVar4 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((uVar3 & 0xff) == (param_5 >> 8 & 0xff)) {
|
|
*param_8 = *param_8 | 2;
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
return;
|
|
}
|
|
this = (locale *)std::locale::locale(alStack_24,(locale *)(param_7 + 0x20));
|
|
piVar5 = (int *)std::locale::_M_use_facet(this,(id *)&std::moneypunct<char,false>::id);
|
|
piVar6 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::moneypunct<char,true>::id);
|
|
piVar7 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::ctype<char>::id);
|
|
if (param_6 == 1) {
|
|
local_28 = (**(code **)(*piVar6 + 0x28))();
|
|
(**(code **)(*piVar6 + 0x1c))(local_40);
|
|
(**(code **)(*piVar6 + 0x18))(local_58);
|
|
}
|
|
else {
|
|
local_28 = (**(code **)(*piVar5 + 0x28))();
|
|
(**(code **)(*piVar5 + 0x1c))(local_40);
|
|
(**(code **)(*piVar5 + 0x18))(local_58);
|
|
}
|
|
uVar3 = *(uint *)(param_7 + 4);
|
|
local_70[0] = local_70[0] & 0xffffff00;
|
|
local_fc = 1;
|
|
local_104 = 0;
|
|
iVar14 = -1;
|
|
local_c8 = param_5;
|
|
local_60 = local_70;
|
|
local_5c = local_70;
|
|
do {
|
|
switch(alStack_24[iVar14 + -3]) {
|
|
case (locale)0x0:
|
|
cVar12 = local_1c._2_1_;
|
|
while( true ) {
|
|
if ((local_20 != (int *)0x0) && (cVar12 == '\0')) {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar4 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4);
|
|
}
|
|
if (((local_c8 & 0xff0000) == 0) && (param_4 != (int *)0x0)) {
|
|
if ((byte *)param_4[2] < (byte *)param_4[3]) {
|
|
uVar4 = (uint)*(byte *)param_4[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*param_4 + 0x20))(param_4);
|
|
}
|
|
local_c8 = local_c8 & 0xff000000 | uVar4 & 0xff | (uint)(uVar4 == 0xffffffff) << 8 |
|
|
0x10000;
|
|
}
|
|
if ((local_1c >> 8 & 0xff) == (local_c8 >> 8 & 0xff)) break;
|
|
if (local_1c._2_1_ == '\0') {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar4 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4);
|
|
}
|
|
else {
|
|
uVar4 = local_1c & 0xff;
|
|
}
|
|
if ((*(byte *)(piVar7[3] + (uVar4 & 0xff) * 4) & 1) == 0) break;
|
|
uVar4 = local_20[2];
|
|
if (uVar4 < (uint)local_20[3]) {
|
|
LAB_0003c498:
|
|
local_20[2] = uVar4 + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*local_20 + 0x24))();
|
|
}
|
|
LAB_0003c49c:
|
|
local_1c._0_3_ = (uint3)(ushort)local_1c;
|
|
cVar12 = '\0';
|
|
}
|
|
break;
|
|
case (locale)0x1:
|
|
if (local_1c._2_1_ == '\0') {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar4 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4);
|
|
}
|
|
else {
|
|
uVar4 = local_1c & 0xff;
|
|
}
|
|
uVar15 = 4;
|
|
if ((*(byte *)(piVar7[3] + (uVar4 & 0xff) * 4) & 1) != 0) {
|
|
uVar4 = local_20[2];
|
|
if (uVar4 < (uint)local_20[3]) goto LAB_0003c498;
|
|
(**(code **)(*local_20 + 0x24))();
|
|
goto LAB_0003c49c;
|
|
}
|
|
goto LAB_0003c750;
|
|
case (locale)0x2:
|
|
if (param_6 == 1) {
|
|
(**(code **)(*piVar6 + 0x14))(local_88);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar5 + 0x14))(local_88);
|
|
}
|
|
FUN_0003c914(local_94,local_20,local_1c,param_4,local_c8,local_74,local_78);
|
|
if (((uVar3 & 0x200) != 0) && (local_8c == '\0')) {
|
|
*param_8 = 4;
|
|
}
|
|
local_1c._0_3_ = (uint3)local_94[1];
|
|
local_20 = local_94[0];
|
|
if ((local_74 != local_88) && (local_74 != (int *)0x0)) {
|
|
if ((uint)(local_88[0] - (int)local_74) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_74,local_88[0] - (int)local_74);
|
|
}
|
|
else {
|
|
operator_delete(local_74);
|
|
}
|
|
}
|
|
break;
|
|
case (locale)0x3:
|
|
if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar4 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4);
|
|
}
|
|
if (((local_c8 & 0xff0000) == 0) && (param_4 != (int *)0x0)) {
|
|
if ((byte *)param_4[2] < (byte *)param_4[3]) {
|
|
uVar4 = (uint)*(byte *)param_4[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*param_4 + 0x20))(param_4);
|
|
}
|
|
local_c8 = local_c8 & 0xff000000 | uVar4 & 0xff | (uint)(uVar4 == 0xffffffff) << 8 | 0x10000
|
|
;
|
|
}
|
|
if ((local_1c >> 8 & 0xff) == (local_c8 >> 8 & 0xff)) {
|
|
if (local_44 != local_48) {
|
|
uVar15 = 4;
|
|
if (local_2c != local_30) goto LAB_0003c750;
|
|
*param_10 = '\0';
|
|
}
|
|
}
|
|
else if (local_44 == local_48) {
|
|
if (local_2c != local_30) {
|
|
if (local_1c._2_1_ == '\0') {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar4 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4);
|
|
}
|
|
else {
|
|
uVar4 = local_1c & 0xff;
|
|
}
|
|
if ((uVar4 & 0xff) == (uint)*local_2c) {
|
|
uVar4 = local_20[2];
|
|
if (uVar4 < (uint)local_20[3]) goto LAB_0003c480;
|
|
(**(code **)(*local_20 + 0x24))();
|
|
goto LAB_0003c48c;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (local_1c._2_1_ == '\0') {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar4 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar4 == 0xffffffff,(char)uVar4);
|
|
}
|
|
else {
|
|
uVar4 = local_1c & 0xff;
|
|
}
|
|
if ((uVar4 & 0xff) == (uint)*local_44) {
|
|
if ((uint)local_20[2] < (uint)local_20[3]) {
|
|
local_20[2] = local_20[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*local_20 + 0x24))();
|
|
}
|
|
local_1c._0_3_ = (uint3)(ushort)local_1c;
|
|
}
|
|
else if (local_2c != local_30) {
|
|
uVar15 = 4;
|
|
if ((uVar4 & 0xff) != (uint)*local_2c) goto LAB_0003c750;
|
|
uVar4 = local_20[2];
|
|
if (uVar4 < (uint)local_20[3]) {
|
|
LAB_0003c480:
|
|
local_20[2] = uVar4 + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*local_20 + 0x24))();
|
|
}
|
|
LAB_0003c48c:
|
|
local_1c._0_3_ = (uint3)(ushort)local_1c;
|
|
*param_10 = '\0';
|
|
}
|
|
}
|
|
break;
|
|
case (locale)0x4:
|
|
if (param_6 == 1) {
|
|
uVar11 = (**(code **)(*piVar6 + 8))();
|
|
uVar8 = (**(code **)(*piVar6 + 0x20))();
|
|
(**(code **)(*piVar6 + 0x10))(local_ac);
|
|
}
|
|
else {
|
|
uVar11 = (**(code **)(*piVar5 + 8))();
|
|
uVar8 = (**(code **)(*piVar5 + 0x20))();
|
|
(**(code **)(*piVar5 + 0x10))(local_ac);
|
|
}
|
|
local_88[0] = CONCAT31(local_88[0]._1_3_,1);
|
|
uVar9 = local_104;
|
|
if (local_98 != local_9c) {
|
|
if (param_6 == 1) {
|
|
uVar9 = (**(code **)(*piVar6 + 0xc))();
|
|
}
|
|
else {
|
|
uVar9 = (**(code **)(*piVar5 + 0xc))();
|
|
}
|
|
}
|
|
iVar10 = FUN_0003ca78(&local_20,param_4,local_c8,local_70,piVar7,uVar11,uVar8,uVar9,local_ac,
|
|
local_88);
|
|
if ((char)local_88[0] == '\0') {
|
|
*param_8 = *param_8 | 4;
|
|
}
|
|
iVar13 = 5;
|
|
if (iVar10 == 0) {
|
|
*param_8 = 4;
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
iVar13 = local_fc;
|
|
}
|
|
if ((local_98 != local_ac) && (local_98 != (int *)0x0)) {
|
|
if ((uint)(local_ac[0] - (int)local_98) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_98,local_ac[0] - (int)local_98);
|
|
}
|
|
else {
|
|
operator_delete(local_98);
|
|
}
|
|
}
|
|
if (iVar13 != 5) goto LAB_0003c75c;
|
|
}
|
|
iVar14 = iVar14 + 1;
|
|
} while (iVar14 < 3);
|
|
if (*param_10 == '\0') {
|
|
if (1 < (uint)((int)local_30 - (int)local_2c)) {
|
|
FUN_0003c914(local_c4,local_20,local_1c,param_4,local_c8,local_2c + 1,local_30);
|
|
local_1c._0_3_ = (uint3)local_c4[1];
|
|
local_20 = local_c4[0];
|
|
if (local_bc == '\0') {
|
|
*param_8 = *param_8 | 4;
|
|
}
|
|
}
|
|
if (-1 < (int)((uint)(byte)*param_8 << 0x1d)) {
|
|
uVar11 = (**(code **)(*piVar7 + 0x18))(piVar7,0x2d);
|
|
FUN_0003d0a8(param_9,1,uVar11);
|
|
FUN_00037294(param_9,local_5c,local_60);
|
|
}
|
|
}
|
|
else {
|
|
if (1 < (uint)((int)local_48 - (int)local_44)) {
|
|
FUN_0003c914(local_b8,local_20,local_1c,param_4,local_c8,local_44 + 1,local_48);
|
|
local_1c._0_3_ = (uint3)local_b8[1];
|
|
local_20 = local_b8[0];
|
|
if (local_b0 == '\0') {
|
|
*param_8 = *param_8 | 4;
|
|
}
|
|
}
|
|
puVar2 = local_5c;
|
|
puVar1 = local_60;
|
|
if ((local_70 != param_9) && ((*param_8 & 4) == 0)) {
|
|
uVar15 = (int)local_60 - (int)local_5c;
|
|
uVar4 = param_9[4];
|
|
uVar3 = param_9[5];
|
|
if (uVar4 - uVar3 < uVar15) {
|
|
if (uVar4 != uVar3) {
|
|
__aeabi_memmove();
|
|
uVar4 = param_9[4];
|
|
uVar3 = param_9[5];
|
|
}
|
|
FUN_00037294(param_9,(int)puVar2 + (uVar4 - uVar3),puVar1);
|
|
}
|
|
else {
|
|
if (uVar15 != 0) {
|
|
__aeabi_memmove(uVar3,local_5c,uVar15);
|
|
uVar4 = param_9[4];
|
|
uVar3 = param_9[5];
|
|
}
|
|
uVar3 = uVar3 + uVar15;
|
|
if (uVar3 != uVar4) {
|
|
__aeabi_memmove(uVar3,uVar4);
|
|
param_9[4] = param_9[4] + (uVar3 - uVar4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ((local_20 != (int *)0x0) && (local_1c._2_1_ == '\0')) {
|
|
if ((byte *)local_20[2] < (byte *)local_20[3]) {
|
|
uVar3 = (uint)*(byte *)local_20[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_1c = CONCAT13(local_1c._3_1_,0x10000);
|
|
local_1c._0_2_ = CONCAT11(uVar3 == 0xffffffff,(char)uVar3);
|
|
}
|
|
if (((local_c8 & 0xff0000) == 0) && (param_4 != (int *)0x0)) {
|
|
if ((byte *)param_4[2] < (byte *)param_4[3]) {
|
|
uVar3 = (uint)*(byte *)param_4[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_4 + 0x20))();
|
|
}
|
|
local_c8 = (uint)(uVar3 == 0xffffffff) << 8;
|
|
}
|
|
if ((local_1c >> 8 & 0xff) == (local_c8 >> 8 & 0xff)) {
|
|
uVar15 = *param_8 | 2;
|
|
LAB_0003c750:
|
|
*param_8 = uVar15;
|
|
}
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
LAB_0003c75c:
|
|
if ((local_5c != local_70) && (local_5c != (uint *)0x0)) {
|
|
if (local_70[0] - (int)local_5c < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_5c,local_70[0] - (int)local_5c);
|
|
}
|
|
else {
|
|
operator_delete(local_5c);
|
|
}
|
|
}
|
|
if ((local_44 != (byte *)local_58) && (local_44 != (byte *)0x0)) {
|
|
if ((uint)(local_58[0] - (int)local_44) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_44,local_58[0] - (int)local_44);
|
|
}
|
|
else {
|
|
operator_delete(local_44);
|
|
}
|
|
}
|
|
if ((local_2c != (byte *)local_40) && (local_2c != (byte *)0x0)) {
|
|
if ((uint)(local_40[0] - (int)local_2c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_2c,local_40[0] - (int)local_2c);
|
|
}
|
|
else {
|
|
operator_delete(local_2c);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_24);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003c898 @ 0003c898
|
|
|
|
undefined4 FUN_0003c898(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined1 auStack_30 [4];
|
|
uint local_2c [4];
|
|
uint *local_1c;
|
|
uint *local_18;
|
|
|
|
local_1c = local_2c;
|
|
local_2c[0] = local_2c[0] & 0xffffff00;
|
|
local_18 = local_1c;
|
|
uVar1 = FUN_0003d350(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30);
|
|
if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) {
|
|
if (local_2c[0] - (int)local_18 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003c914 @ 0003c914
|
|
|
|
void FUN_0003c914(undefined4 *param_1,int *param_2,uint param_3,int *param_4,uint param_5,
|
|
byte *param_6,byte *param_7)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
bool bVar3;
|
|
byte *local_18;
|
|
|
|
local_18 = param_6;
|
|
while( true ) {
|
|
if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar1 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_3 = param_3 & 0xff000000 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((param_4 != (int *)0x0) && ((param_5 & 0xff0000) == 0)) {
|
|
if ((byte *)param_4[2] < (byte *)param_4[3]) {
|
|
uVar1 = (uint)*(byte *)param_4[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*param_4 + 0x20))(param_4);
|
|
}
|
|
param_5 = (uint)(uVar1 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
bVar3 = param_7 == local_18;
|
|
if ((param_7 == local_18) || ((param_3 >> 8 & 0xff) == (param_5 >> 8 & 0xff))) break;
|
|
uVar1 = param_3;
|
|
if ((param_3 & 0xff0000) == 0) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar1 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
uVar2 = param_3 & 0xff000000;
|
|
param_3 = uVar1;
|
|
uVar1 = uVar2 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
uVar2 = param_3 & 0xff;
|
|
bVar3 = false;
|
|
param_3 = uVar1;
|
|
if (*local_18 != uVar2) break;
|
|
if ((uint)param_2[2] < (uint)param_2[3]) {
|
|
param_2[2] = param_2[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*param_2 + 0x24))(param_2);
|
|
}
|
|
param_3 = uVar1 & 0xff00ffff;
|
|
local_18 = local_18 + 1;
|
|
}
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
*(bool *)(param_1 + 2) = bVar3;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ca78 @ 0003ca78
|
|
|
|
undefined4
|
|
FUN_0003ca78(int *param_1,int *param_2,uint param_3,undefined4 *param_4,int param_5,uint param_6,
|
|
int param_7,uint param_8,int param_9,char *param_10)
|
|
|
|
{
|
|
char cVar1;
|
|
int *piVar2;
|
|
uint uVar3;
|
|
undefined4 *puVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
char *pcVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
char *pcVar10;
|
|
uint uVar11;
|
|
char *pcVar12;
|
|
undefined4 *puVar13;
|
|
char *pcVar14;
|
|
char *local_d0;
|
|
int local_c4;
|
|
uint local_a0;
|
|
char local_94 [128];
|
|
|
|
piVar2 = (int *)*param_1;
|
|
if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
if (((param_3 << 8) >> 0x18 == 0) && (param_2 != (int *)0x0)) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar3 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) {
|
|
return 0;
|
|
}
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar3 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if (-1 < (int)((uint)*(byte *)(*(int *)(param_5 + 0xc) + (uVar3 & 0xff) * 4) << 0x19)) {
|
|
return 0;
|
|
}
|
|
local_d0 = (char *)0x0;
|
|
if (*(int *)(param_9 + 0x14) != *(int *)(param_9 + 0x10)) {
|
|
local_d0 = local_94;
|
|
}
|
|
local_c4 = param_7;
|
|
puVar4 = param_4 + 4;
|
|
while( true ) {
|
|
cVar1 = '\0';
|
|
while( true ) {
|
|
piVar2 = (int *)*param_1;
|
|
if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
local_a0 = 0xfffffffe;
|
|
if (((param_3 & 0xff0000) == 0) && (param_2 != (int *)0x0)) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar3 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
pcVar7 = local_d0;
|
|
if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) goto LAB_0003cd28;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar3 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if (-1 < (int)((uint)*(byte *)(*(int *)(param_5 + 0xc) + (uVar3 & 0xff) * 4) << 0x19)) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
piVar2 = (int *)*param_1;
|
|
if ((uint)piVar2[2] < (uint)piVar2[3]) {
|
|
piVar2[2] = piVar2[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
if ((undefined4 *)param_4[5] == param_4) {
|
|
iVar5 = param_4[4];
|
|
puVar13 = puVar4;
|
|
}
|
|
else {
|
|
iVar5 = param_4[4];
|
|
puVar13 = (undefined4 *)*param_4;
|
|
}
|
|
if ((int)puVar13 - iVar5 == 1) {
|
|
uVar6 = iVar5 - (int)param_4[5];
|
|
if (uVar6 == 0xfffffffe) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar8 = uVar6;
|
|
if (uVar6 < 2) {
|
|
uVar8 = 1;
|
|
}
|
|
uVar9 = uVar6 + uVar8 + 1;
|
|
uVar11 = 0xfffffffe;
|
|
if (uVar6 <= uVar9) {
|
|
uVar11 = uVar9;
|
|
}
|
|
if (uVar6 + uVar8 != -2) {
|
|
local_a0 = uVar11;
|
|
}
|
|
FUN_0003d024(param_4,local_a0);
|
|
iVar5 = param_4[4];
|
|
}
|
|
*(undefined1 *)(iVar5 + 1) = 0;
|
|
*(char *)param_4[4] = (char)uVar3;
|
|
param_4[4] = param_4[4] + 1;
|
|
}
|
|
pcVar7 = (char *)0x0;
|
|
if ((local_d0 == (char *)0x0) || (pcVar7 = local_d0, (uVar3 & 0xff) != param_8)) break;
|
|
*local_d0 = cVar1;
|
|
local_d0 = local_d0 + 1;
|
|
piVar2 = (int *)*param_1;
|
|
if ((uint)piVar2[2] < (uint)piVar2[3]) {
|
|
piVar2[2] = piVar2[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
}
|
|
LAB_0003cd28:
|
|
pcVar14 = *(char **)(param_9 + 0x10);
|
|
pcVar12 = *(char **)(param_9 + 0x14);
|
|
if (pcVar12 == pcVar14) {
|
|
*param_10 = '\x01';
|
|
LAB_0003ce0e:
|
|
piVar2 = (int *)*param_1;
|
|
if ((uint)piVar2[2] < (uint)piVar2[3]) {
|
|
piVar2[2] = piVar2[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
while( true ) {
|
|
piVar2 = (int *)*param_1;
|
|
if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
if (((param_3 & 0xff0000) == 0) && (param_2 != (int *)0x0)) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar3 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) break;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar3 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if (-1 < (int)((uint)*(byte *)(*(int *)(param_5 + 0xc) + (uVar3 & 0xff) * 4) << 0x19)) break;
|
|
piVar2 = (int *)*param_1;
|
|
if ((uint)piVar2[2] < (uint)piVar2[3]) {
|
|
piVar2[2] = piVar2[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
if ((undefined4 *)param_4[5] == param_4) {
|
|
iVar5 = param_4[4];
|
|
puVar13 = puVar4;
|
|
}
|
|
else {
|
|
iVar5 = param_4[4];
|
|
puVar13 = (undefined4 *)*param_4;
|
|
}
|
|
if ((int)puVar13 - iVar5 == 1) {
|
|
uVar6 = iVar5 - (int)param_4[5];
|
|
if (uVar6 == 0xfffffffe) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar8 = uVar6;
|
|
if (uVar6 < 2) {
|
|
uVar8 = 1;
|
|
}
|
|
uVar9 = uVar6 + uVar8 + 1;
|
|
uVar11 = local_a0;
|
|
if (uVar6 <= uVar9) {
|
|
uVar11 = uVar9;
|
|
}
|
|
uVar9 = local_a0;
|
|
if (uVar6 + uVar8 != -2) {
|
|
uVar9 = uVar11;
|
|
}
|
|
FUN_0003d024(param_4,uVar9);
|
|
iVar5 = param_4[4];
|
|
}
|
|
*(undefined1 *)(iVar5 + 1) = 0;
|
|
*(char *)param_4[4] = (char)uVar3;
|
|
param_4[4] = param_4[4] + 1;
|
|
local_c4 = local_c4 + -1;
|
|
}
|
|
*param_10 = local_c4 == 0 && *param_10 != '\0';
|
|
}
|
|
else {
|
|
pcVar10 = local_94;
|
|
if (pcVar7 != pcVar10) {
|
|
*pcVar7 = cVar1;
|
|
pcVar10 = pcVar7 + 1;
|
|
pcVar14 = *(char **)(param_9 + 0x10);
|
|
pcVar12 = *(char **)(param_9 + 0x14);
|
|
}
|
|
cVar1 = std::priv::__valid_grouping(local_94,pcVar10,pcVar12,pcVar14);
|
|
*param_10 = cVar1;
|
|
piVar2 = (int *)*param_1;
|
|
if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
if (((param_3 & 0xff0000) == 0) && (param_2 != (int *)0x0)) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar3 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_3 = (uint)(uVar3 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((uint)*(byte *)((int)param_1 + 5) != (param_3 >> 8 & 0xff)) {
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar3 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if ((uVar3 & 0xff) == param_6) goto LAB_0003ce0e;
|
|
}
|
|
if (param_7 != 0) {
|
|
do {
|
|
if ((undefined4 *)param_4[5] == param_4) {
|
|
iVar5 = param_4[4];
|
|
puVar13 = puVar4;
|
|
}
|
|
else {
|
|
iVar5 = param_4[4];
|
|
puVar13 = (undefined4 *)*param_4;
|
|
}
|
|
if ((int)puVar13 - iVar5 == 1) {
|
|
uVar3 = iVar5 - (int)param_4[5];
|
|
if (uVar3 == 0xfffffffe) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar6 = uVar3;
|
|
if (uVar3 < 2) {
|
|
uVar6 = 1;
|
|
}
|
|
uVar11 = uVar3 + uVar6 + 1;
|
|
uVar8 = local_a0;
|
|
if (uVar3 <= uVar11) {
|
|
uVar8 = uVar11;
|
|
}
|
|
uVar11 = local_a0;
|
|
if (uVar3 + uVar6 != -2) {
|
|
uVar11 = uVar8;
|
|
}
|
|
FUN_0003d024(param_4,uVar11);
|
|
iVar5 = param_4[4];
|
|
}
|
|
*(undefined1 *)(iVar5 + 1) = 0;
|
|
*(undefined1 *)param_4[4] = 0x30;
|
|
param_4[4] = param_4[4] + 1;
|
|
param_7 = param_7 + -1;
|
|
} while (param_7 != 0);
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003d024 @ 0003d024
|
|
|
|
void FUN_0003d024(int *param_1,uint param_2)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
undefined1 *puVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
undefined1 *puVar6;
|
|
uint local_18;
|
|
|
|
uVar5 = 0;
|
|
if (param_2 == 0) {
|
|
puVar1 = (undefined1 *)0x0;
|
|
}
|
|
else {
|
|
local_18 = param_2;
|
|
if (param_2 < 0x81) {
|
|
puVar1 = (undefined1 *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar5 = local_18;
|
|
}
|
|
else {
|
|
puVar1 = (undefined1 *)operator_new(param_2);
|
|
uVar5 = param_2;
|
|
}
|
|
}
|
|
puVar2 = (undefined1 *)param_1[5];
|
|
puVar6 = puVar1;
|
|
if (0 < param_1[4] - (int)puVar2) {
|
|
iVar4 = (param_1[4] + 1) - (int)puVar2;
|
|
do {
|
|
*puVar6 = *puVar2;
|
|
iVar4 = iVar4 + -1;
|
|
puVar6 = puVar6 + 1;
|
|
puVar2 = puVar2 + 1;
|
|
} while (1 < iVar4);
|
|
}
|
|
*puVar6 = 0;
|
|
piVar3 = (int *)param_1[5];
|
|
if ((piVar3 != param_1) && (piVar3 != (int *)0x0)) {
|
|
if ((uint)(*param_1 - (int)piVar3) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar3,*param_1 - (int)piVar3);
|
|
}
|
|
else {
|
|
operator_delete(piVar3);
|
|
}
|
|
}
|
|
param_1[4] = (int)puVar6;
|
|
param_1[5] = (int)puVar1;
|
|
*param_1 = (int)(puVar1 + uVar5);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003d0a8 @ 0003d0a8
|
|
|
|
int * FUN_0003d0a8(int *param_1,uint param_2,undefined4 param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
undefined1 *puVar2;
|
|
uint uVar3;
|
|
undefined1 *puVar4;
|
|
int local_30 [4];
|
|
int *local_20;
|
|
int *local_1c;
|
|
uint local_18;
|
|
|
|
piVar1 = (int *)param_1[5];
|
|
if (param_2 <= (uint)(param_1[4] - (int)piVar1)) {
|
|
__aeabi_memset(piVar1,param_2,param_3);
|
|
puVar4 = (undefined1 *)param_1[4];
|
|
puVar2 = (undefined1 *)(param_1[5] + param_2);
|
|
if (puVar2 == puVar4) {
|
|
return param_1;
|
|
}
|
|
*puVar2 = *puVar4;
|
|
param_1[4] = (int)(puVar2 + (param_1[4] - (int)puVar4));
|
|
return param_1;
|
|
}
|
|
uVar3 = 0xf;
|
|
if (piVar1 != param_1) {
|
|
uVar3 = *param_1 + ((uint)piVar1 ^ 0xffffffff);
|
|
}
|
|
if (param_2 < uVar3) {
|
|
__aeabi_memset(piVar1,param_1[4] - (int)piVar1,param_3);
|
|
FUN_0003d1e0(param_1,(param_2 - param_1[4]) + param_1[5],param_3);
|
|
return param_1;
|
|
}
|
|
local_20 = local_30;
|
|
uVar3 = param_2 + 1;
|
|
local_1c = local_20;
|
|
if (uVar3 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
if (uVar3 < 0x11) {
|
|
puVar4 = (undefined1 *)((int)local_30 + param_2);
|
|
}
|
|
else {
|
|
local_18 = uVar3;
|
|
if (uVar3 < 0x81) {
|
|
local_1c = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar3 = local_18;
|
|
}
|
|
else {
|
|
local_1c = (int *)operator_new(uVar3);
|
|
}
|
|
local_30[0] = (int)local_1c + uVar3;
|
|
puVar4 = (undefined1 *)((int)local_1c + param_2);
|
|
if ((int)param_2 < 1) goto LAB_0003d170;
|
|
}
|
|
uVar3 = param_2 ^ 0xffffffff;
|
|
if ((int)(param_2 ^ 0xffffffff) < -1) {
|
|
uVar3 = 0xfffffffe;
|
|
}
|
|
local_20 = local_1c;
|
|
__aeabi_memset(local_1c,param_2 + uVar3 + 2,param_3);
|
|
LAB_0003d170:
|
|
local_20 = (int *)puVar4;
|
|
*puVar4 = 0;
|
|
FUN_0003d298(param_1,local_30);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003d1e0 @ 0003d1e0
|
|
|
|
undefined4 * FUN_0003d1e0(undefined4 *param_1,uint param_2,undefined4 param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
undefined4 *puVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
undefined4 *puVar8;
|
|
|
|
if (param_2 != 0) {
|
|
iVar1 = param_1[4];
|
|
puVar4 = (undefined4 *)param_1[5];
|
|
if ((uint)((-2 - iVar1) + (int)puVar4) < param_2) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
if (puVar4 == param_1) {
|
|
puVar8 = param_1 + 4;
|
|
}
|
|
else {
|
|
puVar8 = (undefined4 *)*param_1;
|
|
}
|
|
if ((uint)((int)puVar8 - iVar1) <= param_2) {
|
|
uVar2 = iVar1 - (int)puVar4;
|
|
if (-uVar2 - 2 < param_2) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar5 = uVar2;
|
|
if (uVar2 <= param_2) {
|
|
uVar5 = param_2;
|
|
}
|
|
uVar6 = uVar2 + uVar5 + 1;
|
|
uVar3 = 0xfffffffe;
|
|
if (uVar2 <= uVar6) {
|
|
uVar3 = uVar6;
|
|
}
|
|
uVar6 = 0xfffffffe;
|
|
if (uVar2 + uVar5 != -2) {
|
|
uVar6 = uVar3;
|
|
}
|
|
FUN_0003d024(param_1,uVar6);
|
|
iVar1 = param_1[4];
|
|
}
|
|
if (0 < (int)(param_2 - 1)) {
|
|
iVar7 = -param_2;
|
|
if (param_2 == 2 || iVar7 < -2) {
|
|
iVar7 = -2;
|
|
}
|
|
__aeabi_memset(iVar1 + 1,iVar7 + param_2 + 1,param_3);
|
|
iVar1 = param_1[4];
|
|
}
|
|
*(undefined1 *)(iVar1 + param_2) = 0;
|
|
*(char *)param_1[4] = (char)param_3;
|
|
param_1[4] = param_1[4] + param_2;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003d298 @ 0003d298
|
|
|
|
void FUN_0003d298(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
undefined4 uVar2;
|
|
undefined4 *puVar3;
|
|
int iVar4;
|
|
undefined4 uVar5;
|
|
undefined4 uVar6;
|
|
undefined4 uVar7;
|
|
|
|
puVar1 = (undefined4 *)param_2[5];
|
|
puVar3 = (undefined4 *)param_1[5];
|
|
if (puVar3 == param_1) {
|
|
if (puVar1 != param_2) {
|
|
FUN_0003d298(param_2,param_1);
|
|
return;
|
|
}
|
|
uVar2 = *puVar3;
|
|
uVar6 = puVar3[1];
|
|
uVar7 = puVar3[2];
|
|
uVar5 = puVar3[3];
|
|
puVar3[3] = puVar1[3];
|
|
puVar3[2] = puVar1[2];
|
|
puVar3[1] = puVar1[1];
|
|
*puVar3 = *puVar1;
|
|
*puVar1 = uVar2;
|
|
puVar1[1] = uVar6;
|
|
puVar1[2] = uVar7;
|
|
puVar1[3] = uVar5;
|
|
iVar4 = param_1[4];
|
|
param_1[4] = param_1[5] + (param_2[4] - param_2[5]);
|
|
param_2[4] = (int)puVar1 + (iVar4 - param_1[5]);
|
|
param_1[5] = param_1;
|
|
param_2[5] = param_2;
|
|
return;
|
|
}
|
|
if (puVar1 != param_2) {
|
|
uVar2 = *param_1;
|
|
*param_1 = *param_2;
|
|
*param_2 = uVar2;
|
|
uVar2 = param_1[5];
|
|
param_1[5] = param_2[5];
|
|
param_2[5] = uVar2;
|
|
uVar2 = param_1[4];
|
|
param_1[4] = param_2[4];
|
|
param_2[4] = uVar2;
|
|
return;
|
|
}
|
|
param_1[3] = puVar1[3];
|
|
param_1[2] = puVar1[2];
|
|
param_1[1] = puVar1[1];
|
|
uVar2 = *param_1;
|
|
*param_1 = *puVar1;
|
|
param_1[5] = param_1;
|
|
uVar5 = param_1[4];
|
|
param_1[4] = (int)param_1 + (param_2[4] - (int)param_2);
|
|
*param_2 = uVar2;
|
|
param_2[4] = uVar5;
|
|
param_2[5] = puVar3;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003d350 @ 0003d350
|
|
|
|
undefined4
|
|
FUN_0003d350(int *param_1,undefined4 *param_2,int param_3,undefined4 *param_4,int param_5,
|
|
int param_6,uint param_7,int param_8)
|
|
|
|
{
|
|
byte bVar1;
|
|
byte *pbVar2;
|
|
int iVar3;
|
|
undefined4 uVar4;
|
|
char cVar5;
|
|
char *pcVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
uint uVar10;
|
|
int iVar11;
|
|
uint uVar12;
|
|
undefined4 uVar13;
|
|
undefined8 uVar14;
|
|
undefined8 uVar15;
|
|
undefined8 uVar16;
|
|
undefined8 uVar17;
|
|
uint local_9c;
|
|
undefined4 local_7c;
|
|
undefined4 local_70;
|
|
int local_60;
|
|
char local_54 [64];
|
|
|
|
uVar14 = __floatsidf(param_3);
|
|
uVar15 = __divdf3(0xffffffff,0x7fefffff);
|
|
iVar7 = *(int *)(param_8 + 0x10);
|
|
iVar9 = *(int *)(param_8 + 0x14);
|
|
pbVar2 = (byte *)*param_1;
|
|
local_9c = 1;
|
|
local_60 = param_5;
|
|
if (pbVar2 == (byte *)*param_2) {
|
|
uVar12 = 0;
|
|
pcVar6 = local_54;
|
|
uVar16 = 0;
|
|
}
|
|
else {
|
|
pcVar6 = local_54;
|
|
uVar8 = 0;
|
|
uVar16 = 0;
|
|
cVar5 = '\0';
|
|
uVar10 = uVar8;
|
|
do {
|
|
local_70 = (undefined4)((ulonglong)uVar16 >> 0x20);
|
|
uVar4 = (undefined4)uVar16;
|
|
bVar1 = *pbVar2;
|
|
uVar12 = uVar10;
|
|
if (bVar1 == param_7 && iVar9 != iVar7) {
|
|
*pcVar6 = cVar5;
|
|
uVar8 = uVar8 + 1;
|
|
cVar5 = '\0';
|
|
}
|
|
else {
|
|
iVar11 = 0xff;
|
|
if (-1 < (char)bVar1) {
|
|
iVar11 = std::priv::__digit_val_table((uint)bVar1);
|
|
}
|
|
if (param_3 <= iVar11) break;
|
|
iVar3 = __aeabi_dcmpgt(uVar4,local_70,(int)uVar15,(int)((ulonglong)uVar15 >> 0x20));
|
|
cVar5 = cVar5 + '\x01';
|
|
local_60 = local_60 + 1;
|
|
uVar12 = local_9c;
|
|
if (iVar3 == 0) {
|
|
uVar16 = __muldf3(uVar4,local_70,(int)uVar14,(int)((ulonglong)uVar14 >> 0x20));
|
|
uVar17 = __floatsidf(iVar11);
|
|
uVar16 = __adddf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17,
|
|
(int)((ulonglong)uVar17 >> 0x20));
|
|
iVar11 = __aeabi_dcmple((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),uVar4,local_70);
|
|
iVar3 = __aeabi_dcmpeq(uVar4,local_70,0,0);
|
|
uVar12 = uVar10 | (iVar3 == 0 && iVar11 != 0);
|
|
}
|
|
}
|
|
pbVar2 = (byte *)(*param_1 + 1);
|
|
*param_1 = (int)pbVar2;
|
|
pcVar6 = local_54 + uVar8;
|
|
uVar10 = uVar12;
|
|
} while (pbVar2 != (byte *)*param_2);
|
|
pcVar6 = local_54 + uVar8;
|
|
if ((iVar9 != iVar7) && (uVar8 != 0)) {
|
|
*pcVar6 = cVar5;
|
|
pcVar6 = local_54 + uVar8 + 1;
|
|
}
|
|
}
|
|
uVar13 = (undefined4)((ulonglong)uVar16 >> 0x20);
|
|
local_7c = (undefined4)uVar16;
|
|
uVar4 = 0;
|
|
if (0 < local_60) {
|
|
if (uVar12 != 0) {
|
|
*param_4 = 0xffffffff;
|
|
param_4[1] = 0x7fefffff;
|
|
return 0;
|
|
}
|
|
uVar14 = __subdf3(0,0x80000000,local_7c,uVar13);
|
|
uVar4 = (int)((ulonglong)uVar14 >> 0x20);
|
|
if (param_6 == 0) {
|
|
uVar4 = uVar13;
|
|
}
|
|
param_4[1] = uVar4;
|
|
uVar4 = (int)uVar14;
|
|
if (param_6 == 0) {
|
|
uVar4 = local_7c;
|
|
}
|
|
*param_4 = uVar4;
|
|
uVar4 = 1;
|
|
if (iVar9 != iVar7) {
|
|
uVar4 = std::priv::__valid_grouping
|
|
(local_54,pcVar6,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003d520 @ 0003d520
|
|
|
|
void FUN_0003d520(facet *param_1)
|
|
|
|
{
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003d624 @ 0003d624
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_0003d624(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6,
|
|
int param_7,int param_8)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
locale *this;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
undefined4 uVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
undefined1 **ppuVar9;
|
|
undefined1 *puVar10;
|
|
int iVar11;
|
|
int iVar12;
|
|
byte *pbVar13;
|
|
int iVar14;
|
|
uint uVar15;
|
|
uint uVar16;
|
|
undefined1 **ppuVar17;
|
|
int iVar18;
|
|
uint uVar19;
|
|
byte *pbVar20;
|
|
byte *pbVar21;
|
|
byte *pbVar22;
|
|
undefined1 **ppuVar23;
|
|
byte bVar24;
|
|
byte *pbVar25;
|
|
bool bVar26;
|
|
int local_1d4;
|
|
undefined4 local_1d0;
|
|
int local_19c;
|
|
undefined1 **local_198;
|
|
uint local_184;
|
|
undefined1 *local_180 [4];
|
|
undefined1 **local_170;
|
|
undefined1 local_16c;
|
|
undefined1 auStack_16b [256];
|
|
undefined1 auStack_6b [3];
|
|
undefined1 **local_68;
|
|
int local_64 [4];
|
|
byte *local_54;
|
|
byte *local_50;
|
|
int local_4c [4];
|
|
int local_3c;
|
|
byte *local_38;
|
|
int local_34 [4];
|
|
int *local_24;
|
|
int *local_20;
|
|
locale alStack_1c [4];
|
|
undefined1 auStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20));
|
|
piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct<char,false>::id);
|
|
piVar4 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct<char,true>::id);
|
|
uVar5 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2d);
|
|
uVar6 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2b);
|
|
iVar7 = (**(code **)(*piVar2 + 0x18))(piVar2,0x20);
|
|
iVar8 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30);
|
|
if (param_4 == 1) {
|
|
local_1d4 = (**(code **)(*piVar4 + 8))();
|
|
local_1d0 = (**(code **)(*piVar4 + 0xc))();
|
|
(**(code **)(*piVar4 + 0x10))(local_34);
|
|
local_19c = (**(code **)(*piVar4 + 0x20))(piVar4,*(code **)(*piVar4 + 0x20),local_34);
|
|
(**(code **)(*piVar4 + 0x14))(local_4c,piVar4,*(code **)(*piVar4 + 0x14),local_34);
|
|
}
|
|
else {
|
|
local_1d4 = (**(code **)(*piVar3 + 8))();
|
|
local_1d0 = (**(code **)(*piVar3 + 0xc))();
|
|
(**(code **)(*piVar3 + 0x10))(local_34);
|
|
local_19c = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34);
|
|
(**(code **)(*piVar3 + 0x14))(local_4c,piVar3,*(code **)(*piVar3 + 0x14),local_34);
|
|
}
|
|
ppuVar9 = *(undefined1 ***)(param_7 + 0x118);
|
|
ppuVar23 = *(undefined1 ***)(param_7 + 0x10);
|
|
if (ppuVar9 == ppuVar23) {
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
goto LAB_0003d75e;
|
|
}
|
|
uVar19 = (uint)*(byte *)ppuVar9;
|
|
ppuVar17 = (undefined1 **)((int)ppuVar9 + 1);
|
|
if (uVar19 != uVar5) {
|
|
ppuVar17 = ppuVar9;
|
|
}
|
|
if (param_4 == 1) {
|
|
if (uVar19 == uVar5) {
|
|
(**(code **)(*piVar4 + 0x1c))(local_64);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x18))(local_64);
|
|
}
|
|
}
|
|
else if (uVar19 == uVar5) {
|
|
(**(code **)(*piVar3 + 0x1c))(local_64);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x18))(local_64);
|
|
}
|
|
local_198 = ppuVar23;
|
|
if (param_8 == 1) {
|
|
if (ppuVar17 != ppuVar23) {
|
|
ppuVar9 = ppuVar17;
|
|
do {
|
|
local_198 = ppuVar9;
|
|
if (-1 < (int)((uint)*(byte *)(piVar2[3] + (uint)*(byte *)ppuVar9 * 4) << 0x19)) break;
|
|
ppuVar9 = (undefined1 **)((int)ppuVar9 + 1);
|
|
local_198 = ppuVar23;
|
|
} while (ppuVar23 != ppuVar9);
|
|
}
|
|
if (local_198 != ppuVar17) goto LAB_0003d7f8;
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
}
|
|
else {
|
|
LAB_0003d7f8:
|
|
__aeabi_memclr(auStack_16b,0x100);
|
|
local_16c = 0;
|
|
local_180[0] = auStack_6b;
|
|
local_170 = (undefined1 **)&local_16c;
|
|
local_68 = (undefined1 **)&local_16c;
|
|
if (local_20 != local_24) {
|
|
if (ppuVar17 != local_198) {
|
|
FUN_0003dfb8(local_180,ppuVar17,local_198,auStack_18);
|
|
}
|
|
FUN_000500f4(local_180,(byte *)((int)local_170 + (-(int)local_68 - local_19c)),local_34,
|
|
local_1d0,uVar6,uVar5,0);
|
|
local_198 = local_170;
|
|
ppuVar17 = local_68;
|
|
}
|
|
pbVar25 = local_54 + 1;
|
|
if (local_19c == 0) {
|
|
pbVar25 = local_54;
|
|
}
|
|
iVar14 = (int)local_198 - (int)ppuVar17;
|
|
pbVar25 = pbVar25 + (iVar14 - (int)local_50);
|
|
uVar15 = *(uint *)(param_5 + 4) & 0x200;
|
|
pbVar20 = *(byte **)(param_5 + 0x1c);
|
|
if (uVar15 != 0) {
|
|
pbVar25 = pbVar25 + (local_3c - (int)local_38);
|
|
}
|
|
if (param_4 == 1) {
|
|
if (uVar19 == uVar5) {
|
|
local_184 = (**(code **)(*piVar4 + 0x28))();
|
|
}
|
|
else {
|
|
local_184 = (**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
}
|
|
else if (uVar19 == uVar5) {
|
|
local_184 = (**(code **)(*piVar3 + 0x28))(piVar3);
|
|
}
|
|
else {
|
|
local_184 = (**(code **)(*piVar3 + 0x24))(piVar3);
|
|
}
|
|
pbVar25 = pbVar25 + ((local_184 & 0xff00) == 0x100 || (local_184 & 0xff0000) == 0x10000);
|
|
iVar18 = (int)pbVar20 - (int)pbVar25;
|
|
if (pbVar20 <= pbVar25) {
|
|
iVar18 = 0;
|
|
}
|
|
uVar5 = *(uint *)(param_5 + 4);
|
|
uVar1 = (undefined1)param_6;
|
|
if ((iVar18 != 0) && ((uVar5 & 5) == 0)) {
|
|
uVar19 = param_3;
|
|
if (0 < iVar18) {
|
|
pbVar21 = pbVar20 + (1 - (int)pbVar25);
|
|
uVar16 = param_3;
|
|
do {
|
|
uVar19 = 0;
|
|
if ((uVar16 & 0xff) != 0) {
|
|
puVar10 = (undefined1 *)param_2[5];
|
|
if (puVar10 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar10 + 1);
|
|
*puVar10 = uVar1;
|
|
iVar11 = param_6;
|
|
}
|
|
else {
|
|
iVar11 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar19 = 1;
|
|
if (iVar11 == -1) {
|
|
uVar19 = 0;
|
|
}
|
|
}
|
|
pbVar21 = pbVar21 + -1;
|
|
uVar16 = uVar19;
|
|
} while (1 < (int)pbVar21);
|
|
}
|
|
param_3 = uVar19 & 0xff | param_3 & 0xffffff00;
|
|
}
|
|
pbVar21 = (byte *)((int)local_198 + (1 - (int)ppuVar17));
|
|
iVar11 = 0;
|
|
do {
|
|
uVar19 = param_3;
|
|
switch(*(undefined1 *)((int)local_180 + iVar11 + -4)) {
|
|
case 1:
|
|
uVar19 = 0;
|
|
if ((param_3 & 0xff) != 0) {
|
|
puVar10 = (undefined1 *)param_2[5];
|
|
if (puVar10 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar10 + 1);
|
|
*puVar10 = (char)iVar7;
|
|
iVar12 = iVar7;
|
|
}
|
|
else {
|
|
iVar12 = (**(code **)(*param_2 + 0x34))(param_2,iVar7);
|
|
}
|
|
uVar19 = 1;
|
|
if (iVar12 == -1) {
|
|
uVar19 = 0;
|
|
}
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | uVar19;
|
|
case 0:
|
|
if (iVar18 != 0 && (uVar5 & 7) == 4) {
|
|
pbVar22 = pbVar20 + (1 - (int)pbVar25);
|
|
uVar19 = param_3;
|
|
uVar16 = param_3;
|
|
if (0 < iVar18) {
|
|
do {
|
|
uVar19 = 0;
|
|
if ((uVar16 & 0xff) != 0) {
|
|
puVar10 = (undefined1 *)param_2[5];
|
|
if (puVar10 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar10 + 1);
|
|
*puVar10 = uVar1;
|
|
iVar12 = param_6;
|
|
}
|
|
else {
|
|
iVar12 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar19 = 1;
|
|
if (iVar12 == -1) {
|
|
uVar19 = 0;
|
|
}
|
|
}
|
|
pbVar22 = pbVar22 + -1;
|
|
uVar16 = uVar19;
|
|
} while (1 < (int)pbVar22);
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | uVar19 & 0xff;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (uVar15 != 0) {
|
|
if (0 < local_3c - (int)local_38) {
|
|
iVar12 = (local_3c + 1) - (int)local_38;
|
|
uVar16 = param_3;
|
|
pbVar22 = local_38;
|
|
do {
|
|
uVar19 = 0;
|
|
if ((uVar16 & 0xff) != 0) {
|
|
bVar24 = *pbVar22;
|
|
uVar16 = (uint)bVar24;
|
|
pbVar13 = (byte *)param_2[5];
|
|
if (pbVar13 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar13 + 1);
|
|
*pbVar13 = bVar24;
|
|
}
|
|
else {
|
|
uVar16 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar19 = 1;
|
|
if (uVar16 == 0xffffffff) {
|
|
uVar19 = 0;
|
|
}
|
|
}
|
|
iVar12 = iVar12 + -1;
|
|
pbVar22 = pbVar22 + 1;
|
|
uVar16 = uVar19;
|
|
} while (1 < iVar12);
|
|
}
|
|
LAB_0003dbac:
|
|
param_3 = param_3 & 0xffffff00 | uVar19 & 0xff;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (local_50 != local_54) {
|
|
uVar19 = 0;
|
|
if ((param_3 & 0xff) != 0) {
|
|
bVar24 = *local_50;
|
|
uVar16 = (uint)bVar24;
|
|
pbVar22 = (byte *)param_2[5];
|
|
if (pbVar22 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar22 + 1);
|
|
*pbVar22 = bVar24;
|
|
}
|
|
else {
|
|
uVar16 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar19 = 1;
|
|
if (uVar16 == 0xffffffff) {
|
|
uVar19 = 0;
|
|
}
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | uVar19;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (local_19c == 0) {
|
|
pbVar22 = pbVar21;
|
|
uVar16 = param_3;
|
|
ppuVar9 = ppuVar17;
|
|
if (0 < iVar14) {
|
|
do {
|
|
uVar19 = 0;
|
|
if ((uVar16 & 0xff) != 0) {
|
|
bVar24 = *(byte *)ppuVar9;
|
|
uVar16 = (uint)bVar24;
|
|
pbVar13 = (byte *)param_2[5];
|
|
if (pbVar13 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar13 + 1);
|
|
*pbVar13 = bVar24;
|
|
}
|
|
else {
|
|
uVar16 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar19 = 1;
|
|
if (uVar16 == 0xffffffff) {
|
|
uVar19 = 0;
|
|
}
|
|
}
|
|
pbVar22 = pbVar22 + -1;
|
|
uVar16 = uVar19;
|
|
ppuVar9 = (undefined1 **)((int)ppuVar9 + 1);
|
|
} while (1 < (int)pbVar22);
|
|
}
|
|
goto LAB_0003dbac;
|
|
}
|
|
if (local_19c < iVar14) {
|
|
pbVar22 = (byte *)((int)local_198 + ((1 - local_19c) - (int)ppuVar17));
|
|
uVar16 = param_3;
|
|
ppuVar9 = ppuVar17;
|
|
if (0 < (int)((int)local_198 + (-(int)ppuVar17 - local_19c))) {
|
|
do {
|
|
uVar19 = 0;
|
|
if ((uVar16 & 0xff) != 0) {
|
|
bVar24 = *(byte *)ppuVar9;
|
|
uVar16 = (uint)bVar24;
|
|
pbVar13 = (byte *)param_2[5];
|
|
if (pbVar13 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar13 + 1);
|
|
*pbVar13 = bVar24;
|
|
}
|
|
else {
|
|
uVar16 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar19 = 1;
|
|
if (uVar16 == 0xffffffff) {
|
|
uVar19 = 0;
|
|
}
|
|
}
|
|
pbVar22 = pbVar22 + -1;
|
|
uVar16 = uVar19;
|
|
ppuVar9 = (undefined1 **)((int)ppuVar9 + 1);
|
|
} while (1 < (int)pbVar22);
|
|
}
|
|
bVar24 = 0;
|
|
if ((uVar19 & 0xff) != 0) {
|
|
puVar10 = (undefined1 *)param_2[5];
|
|
if (puVar10 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar10 + 1);
|
|
*puVar10 = (char)local_1d4;
|
|
iVar12 = local_1d4;
|
|
}
|
|
else {
|
|
iVar12 = (**(code **)(*param_2 + 0x34))(param_2,local_1d4);
|
|
}
|
|
bVar24 = 1;
|
|
if (iVar12 == -1) {
|
|
bVar24 = 0;
|
|
}
|
|
}
|
|
iVar12 = local_19c;
|
|
if (0 < local_19c) {
|
|
do {
|
|
bVar26 = bVar24 != 0;
|
|
bVar24 = 0;
|
|
if (bVar26) {
|
|
bVar24 = *(byte *)((int)local_198 - iVar12);
|
|
uVar19 = (uint)bVar24;
|
|
pbVar22 = (byte *)param_2[5];
|
|
if (pbVar22 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar22 + 1);
|
|
*pbVar22 = bVar24;
|
|
}
|
|
else {
|
|
uVar19 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
bVar24 = 1;
|
|
if (uVar19 == 0xffffffff) {
|
|
bVar24 = 0;
|
|
}
|
|
}
|
|
bVar26 = 1 < iVar12;
|
|
iVar12 = iVar12 + -1;
|
|
} while (bVar26);
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | (uint)bVar24;
|
|
}
|
|
else {
|
|
bVar24 = 0;
|
|
if ((param_3 & 0xff) != 0) {
|
|
puVar10 = (undefined1 *)param_2[5];
|
|
if (puVar10 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar10 + 1);
|
|
*puVar10 = (char)iVar8;
|
|
}
|
|
else {
|
|
iVar12 = (**(code **)(*param_2 + 0x34))(param_2,iVar8);
|
|
if (iVar12 == -1) goto LAB_0003dd1a;
|
|
}
|
|
puVar10 = (undefined1 *)param_2[5];
|
|
if (puVar10 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar10 + 1);
|
|
*puVar10 = (char)local_1d4;
|
|
iVar12 = local_1d4;
|
|
}
|
|
else {
|
|
iVar12 = (**(code **)(*param_2 + 0x34))(param_2,local_1d4);
|
|
}
|
|
bVar24 = 1;
|
|
if (iVar12 == -1) {
|
|
bVar24 = 0;
|
|
}
|
|
}
|
|
LAB_0003dd1a:
|
|
pbVar22 = (byte *)((int)local_198 + (-(int)ppuVar17 - local_19c));
|
|
if (local_19c != iVar14) {
|
|
do {
|
|
bVar26 = bVar24 != 0;
|
|
bVar24 = 0;
|
|
if (bVar26) {
|
|
puVar10 = (undefined1 *)param_2[5];
|
|
if (puVar10 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar10 + 1);
|
|
*puVar10 = (char)iVar8;
|
|
iVar12 = iVar8;
|
|
}
|
|
else {
|
|
iVar12 = (**(code **)(*param_2 + 0x34))(param_2,iVar8);
|
|
}
|
|
bVar24 = 1;
|
|
if (iVar12 == -1) {
|
|
bVar24 = 0;
|
|
}
|
|
}
|
|
pbVar22 = pbVar22 + 1;
|
|
} while (pbVar22 != (byte *)0x0);
|
|
}
|
|
pbVar22 = pbVar21;
|
|
ppuVar9 = ppuVar17;
|
|
if (0 < iVar14) {
|
|
do {
|
|
bVar26 = bVar24 != 0;
|
|
bVar24 = 0;
|
|
if (bVar26) {
|
|
bVar24 = *(byte *)ppuVar9;
|
|
uVar19 = (uint)bVar24;
|
|
pbVar13 = (byte *)param_2[5];
|
|
if (pbVar13 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar13 + 1);
|
|
*pbVar13 = bVar24;
|
|
}
|
|
else {
|
|
uVar19 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
bVar24 = 1;
|
|
if (uVar19 == 0xffffffff) {
|
|
bVar24 = 0;
|
|
}
|
|
}
|
|
pbVar22 = pbVar22 + -1;
|
|
ppuVar9 = (undefined1 **)((int)ppuVar9 + 1);
|
|
} while (1 < (int)pbVar22);
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | (uint)bVar24;
|
|
}
|
|
}
|
|
bVar26 = iVar11 < 3;
|
|
iVar11 = iVar11 + 1;
|
|
} while (bVar26);
|
|
if (1 < (uint)((int)local_54 - (int)local_50)) {
|
|
pbVar21 = local_50 + 1;
|
|
uVar19 = param_3;
|
|
if (0 < (int)local_54 - (int)pbVar21) {
|
|
pbVar22 = local_54 + (1 - (int)pbVar21);
|
|
uVar15 = param_3;
|
|
do {
|
|
uVar19 = 0;
|
|
if ((uVar15 & 0xff) != 0) {
|
|
bVar24 = *pbVar21;
|
|
uVar15 = (uint)bVar24;
|
|
pbVar13 = (byte *)param_2[5];
|
|
if (pbVar13 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar13 + 1);
|
|
*pbVar13 = bVar24;
|
|
}
|
|
else {
|
|
uVar15 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar19 = 1;
|
|
if (uVar15 == 0xffffffff) {
|
|
uVar19 = 0;
|
|
}
|
|
}
|
|
pbVar22 = pbVar22 + -1;
|
|
pbVar21 = pbVar21 + 1;
|
|
uVar15 = uVar19;
|
|
} while (1 < (int)pbVar22);
|
|
}
|
|
param_3 = uVar19 & 0xff | param_3 & 0xffffff00;
|
|
}
|
|
if ((iVar18 != 0) && ((uVar5 & 6) == 0)) {
|
|
uVar5 = param_3;
|
|
if (0 < iVar18) {
|
|
pbVar20 = pbVar20 + (1 - (int)pbVar25);
|
|
uVar19 = param_3;
|
|
do {
|
|
uVar5 = 0;
|
|
if ((uVar19 & 0xff) != 0) {
|
|
puVar10 = (undefined1 *)param_2[5];
|
|
if (puVar10 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar10 + 1);
|
|
*puVar10 = uVar1;
|
|
iVar7 = param_6;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar5 = 1;
|
|
if (iVar7 == -1) {
|
|
uVar5 = 0;
|
|
}
|
|
}
|
|
pbVar20 = pbVar20 + -1;
|
|
uVar19 = uVar5;
|
|
} while (1 < (int)pbVar20);
|
|
}
|
|
param_3 = uVar5 & 0xff | param_3 & 0xffffff00;
|
|
}
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
if (((local_68 != local_180) && (local_68 != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_16c != local_68)) {
|
|
if ((uint)((int)local_180[0] - (int)local_68) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_68,(int)local_180[0] - (int)local_68);
|
|
}
|
|
else {
|
|
operator_delete(local_68);
|
|
}
|
|
}
|
|
}
|
|
if ((local_50 != (byte *)local_64) && (local_50 != (byte *)0x0)) {
|
|
if ((uint)(local_64[0] - (int)local_50) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_50,local_64[0] - (int)local_50);
|
|
}
|
|
else {
|
|
operator_delete(local_50);
|
|
}
|
|
}
|
|
LAB_0003d75e:
|
|
if ((local_38 != (byte *)local_4c) && (local_38 != (byte *)0x0)) {
|
|
if ((uint)(local_4c[0] - (int)local_38) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_38,local_4c[0] - (int)local_38);
|
|
}
|
|
else {
|
|
operator_delete(local_38);
|
|
}
|
|
}
|
|
if ((local_20 != local_34) && (local_20 != (int *)0x0)) {
|
|
if ((uint)(local_34[0] - (int)local_20) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20);
|
|
}
|
|
else {
|
|
operator_delete(local_20);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_1c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003dfb8 @ 0003dfb8
|
|
|
|
int * FUN_0003dfb8(int *param_1,undefined1 *param_2,undefined1 *param_3)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
undefined1 *puVar5;
|
|
undefined1 *puVar6;
|
|
undefined1 *puVar7;
|
|
int *piVar8;
|
|
int *local_1c;
|
|
|
|
if (param_2 != param_3) {
|
|
puVar1 = param_3 + -(int)param_2;
|
|
piVar4 = (int *)param_1[0x46];
|
|
piVar2 = param_1 + 0x46;
|
|
if (piVar4 == param_1) {
|
|
local_1c = (int *)param_1[4];
|
|
puVar6 = (undefined1 *)((int)param_1 + (0x10 - (int)local_1c));
|
|
}
|
|
else {
|
|
local_1c = (int *)param_1[4];
|
|
puVar6 = (undefined1 *)(*param_1 - (int)local_1c);
|
|
}
|
|
piVar8 = param_1 + 4;
|
|
if (puVar1 < puVar6) {
|
|
*(undefined1 *)local_1c = *param_2;
|
|
param_2 = param_2 + 1;
|
|
if (param_2 != param_3) {
|
|
__aeabi_memcpy(*piVar8 + 1,param_2,(int)param_3 - (int)param_2);
|
|
}
|
|
puVar1[*piVar8] = 0;
|
|
*piVar8 = (int)(puVar1 + *piVar8);
|
|
}
|
|
else {
|
|
puVar6 = (undefined1 *)((int)local_1c - (int)piVar4);
|
|
if ((undefined1 *)(-2 - (int)puVar6) < puVar1) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
puVar7 = puVar6;
|
|
if (puVar6 <= puVar1) {
|
|
puVar7 = puVar1;
|
|
}
|
|
puVar7 = puVar6 + (int)puVar7;
|
|
puVar5 = (undefined1 *)0xfffffffe;
|
|
if (puVar6 <= puVar7 + 1) {
|
|
puVar5 = puVar7 + 1;
|
|
}
|
|
puVar6 = (undefined1 *)0xfffffffe;
|
|
if (puVar7 != (undefined1 *)0xfffffffe) {
|
|
puVar6 = puVar5;
|
|
}
|
|
if ((uint)puVar6 >> 1 < 0x81) {
|
|
piVar3 = param_1 + 5;
|
|
}
|
|
else {
|
|
piVar3 = (int *)operator_new((uint)puVar6);
|
|
local_1c = (int *)*piVar8;
|
|
piVar4 = (int *)*piVar2;
|
|
}
|
|
piVar8 = piVar3;
|
|
if (local_1c != piVar4) {
|
|
__aeabi_memcpy(piVar3,piVar4,(int)local_1c - (int)piVar4);
|
|
piVar8 = (int *)((int)piVar3 + ((int)local_1c - (int)piVar4));
|
|
}
|
|
__aeabi_memcpy(piVar8,param_2);
|
|
*(undefined1 *)((int)piVar8 + (int)puVar1) = 0;
|
|
piVar4 = (int *)*piVar2;
|
|
if (((piVar4 != param_1) && (piVar4 != (int *)0x0)) && (param_1 + 5 != piVar4)) {
|
|
if ((uint)(*param_1 - (int)piVar4) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar4,*param_1 - (int)piVar4);
|
|
}
|
|
else {
|
|
operator_delete(piVar4);
|
|
}
|
|
}
|
|
param_1[4] = (int)((int)piVar8 + (int)puVar1);
|
|
*param_1 = (int)((int)piVar3 + (int)puVar6);
|
|
*piVar2 = (int)piVar3;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003e0e0 @ 0003e0e0
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_0003e0e0(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6,
|
|
int param_7,int param_8)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
locale *this;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
undefined4 uVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
undefined1 **ppuVar9;
|
|
byte *pbVar10;
|
|
int iVar11;
|
|
undefined1 *puVar12;
|
|
int iVar13;
|
|
int iVar14;
|
|
byte *pbVar15;
|
|
int iVar16;
|
|
uint uVar17;
|
|
uint uVar18;
|
|
undefined1 **ppuVar19;
|
|
uint uVar20;
|
|
undefined1 **ppuVar21;
|
|
byte *pbVar22;
|
|
byte *pbVar23;
|
|
byte *pbVar24;
|
|
byte bVar25;
|
|
bool bVar26;
|
|
int local_1c8;
|
|
undefined4 local_1b4;
|
|
int local_1a0;
|
|
uint local_198;
|
|
undefined1 **local_194;
|
|
uint local_184;
|
|
undefined1 *local_180 [4];
|
|
undefined1 **local_170;
|
|
undefined1 local_16c;
|
|
undefined1 auStack_16b [256];
|
|
undefined1 auStack_6b [3];
|
|
undefined1 **local_68;
|
|
int local_64 [4];
|
|
byte *local_54;
|
|
byte *local_50;
|
|
int local_4c [4];
|
|
int local_3c;
|
|
byte *local_38;
|
|
int local_34 [4];
|
|
int *local_24;
|
|
int *local_20;
|
|
locale alStack_1c [4];
|
|
undefined1 auStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20));
|
|
piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct<char,false>::id);
|
|
piVar4 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct<char,true>::id);
|
|
uVar5 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2d);
|
|
uVar6 = (**(code **)(*piVar2 + 0x18))(piVar2,0x2b);
|
|
iVar7 = (**(code **)(*piVar2 + 0x18))(piVar2,0x20);
|
|
iVar8 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30);
|
|
if (param_4 == 1) {
|
|
local_1c8 = (**(code **)(*piVar4 + 8))(piVar4);
|
|
local_1b4 = (**(code **)(*piVar4 + 0xc))(piVar4);
|
|
(**(code **)(*piVar4 + 0x10))(local_34,piVar4);
|
|
local_1a0 = (**(code **)(*piVar4 + 0x20))(piVar4);
|
|
(**(code **)(*piVar4 + 0x14))(local_4c,piVar4);
|
|
}
|
|
else {
|
|
local_1c8 = (**(code **)(*piVar3 + 8))();
|
|
local_1b4 = (**(code **)(*piVar3 + 0xc))();
|
|
(**(code **)(*piVar3 + 0x10))(local_34);
|
|
local_1a0 = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34);
|
|
(**(code **)(*piVar3 + 0x14))(local_4c,piVar3,*(code **)(*piVar3 + 0x14),local_34);
|
|
}
|
|
ppuVar19 = *(undefined1 ***)(param_7 + 0x10);
|
|
ppuVar9 = *(undefined1 ***)(param_7 + 0x14);
|
|
if (ppuVar9 == ppuVar19) {
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
goto LAB_0003e20c;
|
|
}
|
|
uVar20 = (uint)*(byte *)ppuVar9;
|
|
ppuVar21 = (undefined1 **)((int)ppuVar9 + 1);
|
|
if (uVar20 != uVar5) {
|
|
ppuVar21 = ppuVar9;
|
|
}
|
|
if (param_4 == 1) {
|
|
if (uVar20 == uVar5) {
|
|
(**(code **)(*piVar4 + 0x1c))(local_64,piVar4);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x18))(local_64,piVar4);
|
|
}
|
|
}
|
|
else if (uVar20 == uVar5) {
|
|
(**(code **)(*piVar3 + 0x1c))(local_64);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x18))(local_64);
|
|
}
|
|
local_194 = ppuVar19;
|
|
if (param_8 == 1) {
|
|
if (ppuVar21 != ppuVar19) {
|
|
ppuVar9 = ppuVar21;
|
|
do {
|
|
local_194 = ppuVar9;
|
|
if (-1 < (int)((uint)*(byte *)(piVar2[3] + (uint)*(byte *)ppuVar9 * 4) << 0x19)) break;
|
|
ppuVar9 = (undefined1 **)((int)ppuVar9 + 1);
|
|
local_194 = ppuVar19;
|
|
} while (ppuVar19 != ppuVar9);
|
|
}
|
|
if (local_194 != ppuVar21) goto LAB_0003e2b2;
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
}
|
|
else {
|
|
LAB_0003e2b2:
|
|
__aeabi_memclr(auStack_16b,0x100);
|
|
local_16c = 0;
|
|
local_180[0] = auStack_6b;
|
|
local_170 = (undefined1 **)&local_16c;
|
|
local_68 = (undefined1 **)&local_16c;
|
|
if (local_20 != local_24) {
|
|
if (ppuVar21 != local_194) {
|
|
FUN_0003dfb8(local_180,ppuVar21,local_194,auStack_18);
|
|
}
|
|
FUN_000500f4(local_180,(byte *)((int)local_170 + (-(int)local_68 - local_1a0)),local_34,
|
|
local_1b4,uVar6,uVar5,0);
|
|
local_194 = local_170;
|
|
ppuVar21 = local_68;
|
|
}
|
|
pbVar22 = local_54 + 1;
|
|
if (local_1a0 == 0) {
|
|
pbVar22 = local_54;
|
|
}
|
|
iVar16 = (int)local_194 - (int)ppuVar21;
|
|
pbVar22 = pbVar22 + (iVar16 - (int)local_50);
|
|
uVar17 = *(uint *)(param_5 + 4) & 0x200;
|
|
pbVar10 = *(byte **)(param_5 + 0x1c);
|
|
if (uVar17 != 0) {
|
|
pbVar22 = pbVar22 + (local_3c - (int)local_38);
|
|
}
|
|
if (param_4 == 1) {
|
|
if (uVar20 == uVar5) {
|
|
local_184 = (**(code **)(*piVar4 + 0x28))(piVar4);
|
|
}
|
|
else {
|
|
local_184 = (**(code **)(*piVar4 + 0x24))(piVar4);
|
|
}
|
|
}
|
|
else if (uVar20 == uVar5) {
|
|
local_184 = (**(code **)(*piVar3 + 0x28))();
|
|
}
|
|
else {
|
|
local_184 = (**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
pbVar22 = pbVar22 + ((local_184 & 0xff00) == 0x100 || (local_184 & 0xff0000) == 0x10000);
|
|
iVar11 = (int)pbVar10 - (int)pbVar22;
|
|
if (pbVar10 <= pbVar22) {
|
|
iVar11 = 0;
|
|
}
|
|
uVar5 = *(uint *)(param_5 + 4);
|
|
uVar1 = (undefined1)param_6;
|
|
local_198 = param_3;
|
|
if ((iVar11 != 0) && ((uVar5 & 5) == 0)) {
|
|
uVar20 = param_3;
|
|
if (0 < iVar11) {
|
|
pbVar23 = pbVar10 + (1 - (int)pbVar22);
|
|
uVar18 = param_3;
|
|
do {
|
|
uVar20 = 0;
|
|
if ((uVar18 & 0xff) != 0) {
|
|
puVar12 = (undefined1 *)param_2[5];
|
|
if (puVar12 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar12 + 1);
|
|
*puVar12 = uVar1;
|
|
iVar13 = param_6;
|
|
}
|
|
else {
|
|
iVar13 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar20 = 1;
|
|
if (iVar13 == -1) {
|
|
uVar20 = 0;
|
|
}
|
|
}
|
|
pbVar23 = pbVar23 + -1;
|
|
uVar18 = uVar20;
|
|
} while (1 < (int)pbVar23);
|
|
}
|
|
local_198 = uVar20 & 0xff | param_3 & 0xffffff00;
|
|
}
|
|
pbVar23 = (byte *)((int)local_194 + (1 - (int)ppuVar21));
|
|
iVar13 = 0;
|
|
do {
|
|
uVar20 = local_198;
|
|
switch(*(undefined1 *)((int)local_180 + iVar13 + -4)) {
|
|
case 1:
|
|
uVar20 = 0;
|
|
if ((local_198 & 0xff) != 0) {
|
|
puVar12 = (undefined1 *)param_2[5];
|
|
if (puVar12 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar12 + 1);
|
|
*puVar12 = (char)iVar7;
|
|
iVar14 = iVar7;
|
|
}
|
|
else {
|
|
iVar14 = (**(code **)(*param_2 + 0x34))(param_2,iVar7);
|
|
}
|
|
uVar20 = 1;
|
|
if (iVar14 == -1) {
|
|
uVar20 = 0;
|
|
}
|
|
}
|
|
local_198 = local_198 & 0xffffff00 | uVar20;
|
|
case 0:
|
|
if (iVar11 != 0 && (uVar5 & 7) == 4) {
|
|
pbVar24 = pbVar10 + (1 - (int)pbVar22);
|
|
uVar20 = local_198;
|
|
uVar18 = local_198;
|
|
if (0 < iVar11) {
|
|
do {
|
|
uVar20 = 0;
|
|
if ((uVar18 & 0xff) != 0) {
|
|
puVar12 = (undefined1 *)param_2[5];
|
|
if (puVar12 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar12 + 1);
|
|
*puVar12 = uVar1;
|
|
iVar14 = param_6;
|
|
}
|
|
else {
|
|
iVar14 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar20 = 1;
|
|
if (iVar14 == -1) {
|
|
uVar20 = 0;
|
|
}
|
|
}
|
|
pbVar24 = pbVar24 + -1;
|
|
uVar18 = uVar20;
|
|
} while (1 < (int)pbVar24);
|
|
}
|
|
local_198 = local_198 & 0xffffff00 | uVar20 & 0xff;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (uVar17 != 0) {
|
|
if (0 < local_3c - (int)local_38) {
|
|
iVar14 = (local_3c + 1) - (int)local_38;
|
|
uVar18 = local_198;
|
|
pbVar24 = local_38;
|
|
do {
|
|
uVar20 = 0;
|
|
if ((uVar18 & 0xff) != 0) {
|
|
bVar25 = *pbVar24;
|
|
uVar18 = (uint)bVar25;
|
|
pbVar15 = (byte *)param_2[5];
|
|
if (pbVar15 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar15 + 1);
|
|
*pbVar15 = bVar25;
|
|
}
|
|
else {
|
|
uVar18 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar20 = 1;
|
|
if (uVar18 == 0xffffffff) {
|
|
uVar20 = 0;
|
|
}
|
|
}
|
|
iVar14 = iVar14 + -1;
|
|
pbVar24 = pbVar24 + 1;
|
|
uVar18 = uVar20;
|
|
} while (1 < iVar14);
|
|
}
|
|
LAB_0003e66e:
|
|
local_198 = local_198 & 0xffffff00 | uVar20 & 0xff;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (local_50 != local_54) {
|
|
uVar20 = 0;
|
|
if ((local_198 & 0xff) != 0) {
|
|
bVar25 = *local_50;
|
|
uVar18 = (uint)bVar25;
|
|
pbVar24 = (byte *)param_2[5];
|
|
if (pbVar24 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar24 + 1);
|
|
*pbVar24 = bVar25;
|
|
}
|
|
else {
|
|
uVar18 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar20 = 1;
|
|
if (uVar18 == 0xffffffff) {
|
|
uVar20 = 0;
|
|
}
|
|
}
|
|
local_198 = local_198 & 0xffffff00 | uVar20;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (local_1a0 == 0) {
|
|
pbVar24 = pbVar23;
|
|
uVar18 = local_198;
|
|
ppuVar9 = ppuVar21;
|
|
if (0 < iVar16) {
|
|
do {
|
|
uVar20 = 0;
|
|
if ((uVar18 & 0xff) != 0) {
|
|
bVar25 = *(byte *)ppuVar9;
|
|
uVar18 = (uint)bVar25;
|
|
pbVar15 = (byte *)param_2[5];
|
|
if (pbVar15 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar15 + 1);
|
|
*pbVar15 = bVar25;
|
|
}
|
|
else {
|
|
uVar18 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar20 = 1;
|
|
if (uVar18 == 0xffffffff) {
|
|
uVar20 = 0;
|
|
}
|
|
}
|
|
pbVar24 = pbVar24 + -1;
|
|
uVar18 = uVar20;
|
|
ppuVar9 = (undefined1 **)((int)ppuVar9 + 1);
|
|
} while (1 < (int)pbVar24);
|
|
}
|
|
goto LAB_0003e66e;
|
|
}
|
|
if (local_1a0 < iVar16) {
|
|
pbVar24 = (byte *)((int)local_194 + ((1 - local_1a0) - (int)ppuVar21));
|
|
uVar18 = local_198;
|
|
ppuVar9 = ppuVar21;
|
|
if (0 < (int)((int)local_194 + (-(int)ppuVar21 - local_1a0))) {
|
|
do {
|
|
uVar20 = 0;
|
|
if ((uVar18 & 0xff) != 0) {
|
|
bVar25 = *(byte *)ppuVar9;
|
|
uVar18 = (uint)bVar25;
|
|
pbVar15 = (byte *)param_2[5];
|
|
if (pbVar15 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar15 + 1);
|
|
*pbVar15 = bVar25;
|
|
}
|
|
else {
|
|
uVar18 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar20 = 1;
|
|
if (uVar18 == 0xffffffff) {
|
|
uVar20 = 0;
|
|
}
|
|
}
|
|
pbVar24 = pbVar24 + -1;
|
|
uVar18 = uVar20;
|
|
ppuVar9 = (undefined1 **)((int)ppuVar9 + 1);
|
|
} while (1 < (int)pbVar24);
|
|
}
|
|
bVar25 = 0;
|
|
if ((uVar20 & 0xff) != 0) {
|
|
puVar12 = (undefined1 *)param_2[5];
|
|
if (puVar12 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar12 + 1);
|
|
*puVar12 = (char)local_1c8;
|
|
iVar14 = local_1c8;
|
|
}
|
|
else {
|
|
iVar14 = (**(code **)(*param_2 + 0x34))(param_2,local_1c8);
|
|
}
|
|
bVar25 = 1;
|
|
if (iVar14 == -1) {
|
|
bVar25 = 0;
|
|
}
|
|
}
|
|
iVar14 = local_1a0;
|
|
if (0 < local_1a0) {
|
|
do {
|
|
bVar26 = bVar25 != 0;
|
|
bVar25 = 0;
|
|
if (bVar26) {
|
|
bVar25 = *(byte *)((int)local_194 - iVar14);
|
|
uVar20 = (uint)bVar25;
|
|
pbVar24 = (byte *)param_2[5];
|
|
if (pbVar24 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar24 + 1);
|
|
*pbVar24 = bVar25;
|
|
}
|
|
else {
|
|
uVar20 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
bVar25 = 1;
|
|
if (uVar20 == 0xffffffff) {
|
|
bVar25 = 0;
|
|
}
|
|
}
|
|
bVar26 = 1 < iVar14;
|
|
iVar14 = iVar14 + -1;
|
|
} while (bVar26);
|
|
}
|
|
local_198 = local_198 & 0xffffff00 | (uint)bVar25;
|
|
}
|
|
else {
|
|
bVar25 = 0;
|
|
if ((local_198 & 0xff) != 0) {
|
|
puVar12 = (undefined1 *)param_2[5];
|
|
if (puVar12 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar12 + 1);
|
|
*puVar12 = (char)iVar8;
|
|
}
|
|
else {
|
|
iVar14 = (**(code **)(*param_2 + 0x34))(param_2,iVar8);
|
|
if (iVar14 == -1) goto LAB_0003e7dc;
|
|
}
|
|
puVar12 = (undefined1 *)param_2[5];
|
|
if (puVar12 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar12 + 1);
|
|
*puVar12 = (char)local_1c8;
|
|
iVar14 = local_1c8;
|
|
}
|
|
else {
|
|
iVar14 = (**(code **)(*param_2 + 0x34))(param_2,local_1c8);
|
|
}
|
|
bVar25 = 1;
|
|
if (iVar14 == -1) {
|
|
bVar25 = 0;
|
|
}
|
|
}
|
|
LAB_0003e7dc:
|
|
pbVar24 = (byte *)((int)local_194 + (-(int)ppuVar21 - local_1a0));
|
|
if (local_1a0 != iVar16) {
|
|
do {
|
|
bVar26 = bVar25 != 0;
|
|
bVar25 = 0;
|
|
if (bVar26) {
|
|
puVar12 = (undefined1 *)param_2[5];
|
|
if (puVar12 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar12 + 1);
|
|
*puVar12 = (char)iVar8;
|
|
iVar14 = iVar8;
|
|
}
|
|
else {
|
|
iVar14 = (**(code **)(*param_2 + 0x34))(param_2,iVar8);
|
|
}
|
|
bVar25 = 1;
|
|
if (iVar14 == -1) {
|
|
bVar25 = 0;
|
|
}
|
|
}
|
|
pbVar24 = pbVar24 + 1;
|
|
} while (pbVar24 != (byte *)0x0);
|
|
}
|
|
pbVar24 = pbVar23;
|
|
ppuVar9 = ppuVar21;
|
|
if (0 < iVar16) {
|
|
do {
|
|
bVar26 = bVar25 != 0;
|
|
bVar25 = 0;
|
|
if (bVar26) {
|
|
bVar25 = *(byte *)ppuVar9;
|
|
uVar20 = (uint)bVar25;
|
|
pbVar15 = (byte *)param_2[5];
|
|
if (pbVar15 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar15 + 1);
|
|
*pbVar15 = bVar25;
|
|
}
|
|
else {
|
|
uVar20 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
bVar25 = 1;
|
|
if (uVar20 == 0xffffffff) {
|
|
bVar25 = 0;
|
|
}
|
|
}
|
|
pbVar24 = pbVar24 + -1;
|
|
ppuVar9 = (undefined1 **)((int)ppuVar9 + 1);
|
|
} while (1 < (int)pbVar24);
|
|
}
|
|
local_198 = local_198 & 0xffffff00 | (uint)bVar25;
|
|
}
|
|
}
|
|
bVar26 = iVar13 < 3;
|
|
iVar13 = iVar13 + 1;
|
|
} while (bVar26);
|
|
if (1 < (uint)((int)local_54 - (int)local_50)) {
|
|
pbVar23 = local_50 + 1;
|
|
uVar20 = local_198;
|
|
if (0 < (int)local_54 - (int)pbVar23) {
|
|
pbVar24 = local_54 + (1 - (int)pbVar23);
|
|
uVar17 = local_198;
|
|
do {
|
|
uVar20 = 0;
|
|
if ((uVar17 & 0xff) != 0) {
|
|
bVar25 = *pbVar23;
|
|
uVar17 = (uint)bVar25;
|
|
pbVar15 = (byte *)param_2[5];
|
|
if (pbVar15 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar15 + 1);
|
|
*pbVar15 = bVar25;
|
|
}
|
|
else {
|
|
uVar17 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar20 = 1;
|
|
if (uVar17 == 0xffffffff) {
|
|
uVar20 = 0;
|
|
}
|
|
}
|
|
pbVar24 = pbVar24 + -1;
|
|
pbVar23 = pbVar23 + 1;
|
|
uVar17 = uVar20;
|
|
} while (1 < (int)pbVar24);
|
|
}
|
|
local_198 = uVar20 & 0xff | local_198 & 0xffffff00;
|
|
}
|
|
if ((iVar11 != 0) && ((uVar5 & 6) == 0)) {
|
|
uVar5 = local_198;
|
|
if (0 < iVar11) {
|
|
pbVar10 = pbVar10 + (1 - (int)pbVar22);
|
|
uVar20 = local_198;
|
|
do {
|
|
uVar5 = 0;
|
|
if ((uVar20 & 0xff) != 0) {
|
|
puVar12 = (undefined1 *)param_2[5];
|
|
if (puVar12 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar12 + 1);
|
|
*puVar12 = uVar1;
|
|
iVar7 = param_6;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar5 = 1;
|
|
if (iVar7 == -1) {
|
|
uVar5 = 0;
|
|
}
|
|
}
|
|
pbVar10 = pbVar10 + -1;
|
|
uVar20 = uVar5;
|
|
} while (1 < (int)pbVar10);
|
|
}
|
|
local_198 = uVar5 & 0xff | local_198 & 0xffffff00;
|
|
}
|
|
*param_1 = param_2;
|
|
param_1[1] = local_198;
|
|
if (((local_68 != local_180) && (local_68 != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_16c != local_68)) {
|
|
if ((uint)((int)local_180[0] - (int)local_68) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_68,(int)local_180[0] - (int)local_68);
|
|
}
|
|
else {
|
|
operator_delete(local_68);
|
|
}
|
|
}
|
|
}
|
|
if ((local_50 != (byte *)local_64) && (local_50 != (byte *)0x0)) {
|
|
if ((uint)(local_64[0] - (int)local_50) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_50,local_64[0] - (int)local_50);
|
|
}
|
|
else {
|
|
operator_delete(local_50);
|
|
}
|
|
}
|
|
LAB_0003e20c:
|
|
if ((local_38 != (byte *)local_4c) && (local_38 != (byte *)0x0)) {
|
|
if ((uint)(local_4c[0] - (int)local_38) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_38,local_4c[0] - (int)local_38);
|
|
}
|
|
else {
|
|
operator_delete(local_38);
|
|
}
|
|
}
|
|
if ((local_20 != local_34) && (local_20 != (int *)0x0)) {
|
|
if ((uint)(local_34[0] - (int)local_20) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20);
|
|
}
|
|
else {
|
|
operator_delete(local_20);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_1c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003eb0c @ 0003eb0c
|
|
|
|
void FUN_0003eb0c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9)
|
|
|
|
{
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_14 = param_6;
|
|
local_18 = param_5;
|
|
local_10 = param_3;
|
|
local_c = param_4;
|
|
FUN_0003f01c(param_1,&local_10,&local_18,param_7,param_8,param_9,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003eb3a @ 0003eb3a
|
|
|
|
void FUN_0003eb3a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9)
|
|
|
|
{
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_14 = param_6;
|
|
local_18 = param_5;
|
|
local_10 = param_3;
|
|
local_c = param_4;
|
|
FUN_0003f894(param_1,&local_10,&local_18,param_7,param_8,param_9,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003eb68 @ 0003eb68
|
|
|
|
void FUN_0003eb68(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9)
|
|
|
|
{
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_14 = param_6;
|
|
local_18 = param_5;
|
|
local_10 = param_3;
|
|
local_c = param_4;
|
|
FUN_0003fc94(param_1,&local_10,&local_18,param_7,param_8,param_9,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003eb96 @ 0003eb96
|
|
|
|
void FUN_0003eb96(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9)
|
|
|
|
{
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_14 = param_6;
|
|
local_18 = param_5;
|
|
local_10 = param_3;
|
|
local_c = param_4;
|
|
FUN_00040090(param_1,&local_10,&local_18,param_7,param_8,param_9,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ebc4 @ 0003ebc4
|
|
|
|
void FUN_0003ebc4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9)
|
|
|
|
{
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_14 = param_6;
|
|
local_18 = param_5;
|
|
local_10 = param_3;
|
|
local_c = param_4;
|
|
FUN_0004048c(param_1,&local_10,&local_18,param_7,param_8,param_9,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ebf2 @ 0003ebf2
|
|
|
|
void FUN_0003ebf2(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9)
|
|
|
|
{
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_14 = param_6;
|
|
local_18 = param_5;
|
|
local_10 = param_3;
|
|
local_c = param_4;
|
|
FUN_00040dac(param_1,&local_10,&local_18,param_7,param_8,param_9,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ec20 @ 0003ec20
|
|
|
|
void FUN_0003ec20(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,byte *param_8,
|
|
undefined4 *param_9)
|
|
|
|
{
|
|
undefined4 local_28 [2];
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
|
|
local_1c = param_6;
|
|
local_20 = param_5;
|
|
local_18 = param_3;
|
|
local_14 = param_4;
|
|
FUN_00040f24(param_1,&local_18,&local_20,param_7,param_8,local_28,0);
|
|
if (-1 < (int)((uint)*param_8 << 0x1d)) {
|
|
*param_9 = local_28[0];
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ec5a @ 0003ec5a
|
|
|
|
void FUN_0003ec5a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9)
|
|
|
|
{
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_14 = param_6;
|
|
local_18 = param_5;
|
|
local_10 = param_3;
|
|
local_c = param_4;
|
|
FUN_0004139c(param_1,&local_10,&local_18,param_7,param_8,param_9,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ec88 @ 0003ec88
|
|
|
|
void FUN_0003ec88(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9)
|
|
|
|
{
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_14 = param_6;
|
|
local_18 = param_5;
|
|
local_10 = param_3;
|
|
local_c = param_4;
|
|
FUN_00041514(param_1,&local_10,&local_18,param_7,param_8,param_9,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ecb6 @ 0003ecb6
|
|
|
|
void FUN_0003ecb6(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9)
|
|
|
|
{
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_14 = param_6;
|
|
local_18 = param_5;
|
|
local_10 = param_3;
|
|
local_c = param_4;
|
|
FUN_00040f24(param_1,&local_10,&local_18,param_7,param_8,param_9,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003ece4 @ 0003ece4
|
|
|
|
void FUN_0003ece4(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 param_6)
|
|
|
|
{
|
|
bool bVar1;
|
|
bool bVar2;
|
|
locale *this;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
bool bVar6;
|
|
uint uVar7;
|
|
bool bVar8;
|
|
int local_44 [4];
|
|
int local_34;
|
|
int *local_30;
|
|
int local_2c [4];
|
|
int local_1c;
|
|
int *local_18;
|
|
|
|
this = (locale *)std::locale::locale((locale *)local_2c,(locale *)(param_4 + 0x20));
|
|
piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct<char>::id);
|
|
std::locale::~locale((locale *)local_2c);
|
|
(**(code **)(*piVar3 + 0x14))(local_2c,piVar3);
|
|
(**(code **)(*piVar3 + 0x18))(local_44,piVar3);
|
|
bVar1 = true;
|
|
uVar7 = 0;
|
|
bVar8 = true;
|
|
while( true ) {
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) goto code_r0x0003ee7a;
|
|
if (*(char *)((int)param_2 + 6) == '\0') {
|
|
piVar3 = (int *)*param_2;
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar4 = (uint)*(byte *)(param_2 + 1);
|
|
}
|
|
bVar6 = false;
|
|
if (bVar1) {
|
|
bVar6 = (uVar4 & 0xff) == (uint)*(byte *)((int)local_18 + uVar7);
|
|
}
|
|
bVar1 = bVar6;
|
|
bVar6 = false;
|
|
if ((bVar8) && (bVar6 = true, (uVar4 & 0xff) != (uint)*(byte *)((int)local_30 + uVar7))) {
|
|
bVar6 = false;
|
|
}
|
|
uVar4 = uVar7 + 1;
|
|
bVar2 = false;
|
|
bVar8 = false;
|
|
if (!(bool)(bVar1 | bVar6)) goto LAB_0003ee90;
|
|
if ((bVar1) && ((uint)(local_1c - (int)local_18) <= uVar4)) break;
|
|
if ((bVar6) && (bVar2 = bVar1, bVar8 = true, (uint)(local_34 - (int)local_30) <= uVar4))
|
|
goto LAB_0003ee90;
|
|
piVar3 = (int *)*param_2;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_2 + 6) = 0;
|
|
uVar7 = uVar4;
|
|
bVar8 = bVar6;
|
|
}
|
|
bVar2 = true;
|
|
bVar8 = bVar6;
|
|
LAB_0003ee90:
|
|
uVar7 = uVar7 + 1;
|
|
piVar3 = (int *)*param_2;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_2 + 6) = 0;
|
|
bVar1 = bVar2;
|
|
code_r0x0003ee7a:
|
|
bVar1 = bVar1 && (uint)(local_1c - (int)local_18) <= uVar7;
|
|
bVar6 = false;
|
|
if ((bVar8) && (bVar6 = true, uVar7 < (uint)(local_34 - (int)local_30))) {
|
|
bVar6 = false;
|
|
}
|
|
if ((bVar1) || (bVar6)) {
|
|
*param_5 = 0;
|
|
*(bool *)param_6 = bVar1;
|
|
}
|
|
else {
|
|
*param_5 = 4;
|
|
}
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar7 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar7 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar7;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar7 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar7 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar7 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar7;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar7 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar5 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar5;
|
|
if ((local_30 != local_44) && (local_30 != (int *)0x0)) {
|
|
if ((uint)(local_44[0] - (int)local_30) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_30,local_44[0] - (int)local_30);
|
|
}
|
|
else {
|
|
operator_delete(local_30);
|
|
}
|
|
}
|
|
if ((local_18 != local_2c) && (local_18 != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_2c[0] - (int)local_18)) {
|
|
operator_delete(local_18);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003f01c @ 0003f01c
|
|
|
|
void FUN_0003f01c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
uVar4 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar4 = 0;
|
|
*param_6 = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<char>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar5 = FUN_0003f68a(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar4 = 0;
|
|
if (iVar5 == 0) {
|
|
uVar4 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar4;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar5 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar5;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003f220 @ 0003f220
|
|
|
|
uint FUN_0003f220(int *param_1,int *param_2,uint param_3,int *param_4)
|
|
|
|
{
|
|
bool bVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
int *piVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint local_24;
|
|
byte local_1c;
|
|
byte local_1b;
|
|
byte local_1a;
|
|
byte local_19;
|
|
byte local_18;
|
|
|
|
uVar2 = std::priv::__narrow_atoms();
|
|
iVar3 = std::priv::__narrow_atoms();
|
|
(**(code **)(*param_4 + 0x1c))(param_4,uVar2,iVar3 + 5,&local_1c);
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar5 = (int *)*param_1;
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar4 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar4 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if ((uVar4 & 0xff) == (uint)local_1b) {
|
|
piVar5 = (int *)*param_1;
|
|
if ((uint)piVar5[2] < (uint)piVar5[3]) {
|
|
piVar5[2] = piVar5[2] + 1;
|
|
uVar7 = 2;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar5 + 0x24))();
|
|
uVar7 = 2;
|
|
}
|
|
LAB_0003f2c8:
|
|
bVar1 = false;
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
}
|
|
else {
|
|
uVar7 = 0;
|
|
bVar1 = true;
|
|
if ((uVar4 & 0xff) == (uint)local_1c) {
|
|
piVar5 = (int *)*param_1;
|
|
if ((uint)piVar5[2] < (uint)piVar5[3]) {
|
|
piVar5[2] = piVar5[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar5 + 0x24))();
|
|
}
|
|
uVar7 = 0;
|
|
goto LAB_0003f2c8;
|
|
}
|
|
}
|
|
param_3 = param_3 & 0x38;
|
|
local_24 = 0;
|
|
if (param_3 == 0x20) {
|
|
uVar4 = 0x20;
|
|
goto LAB_0003f67e;
|
|
}
|
|
if (param_3 != 0x10) {
|
|
if (param_3 == 8) {
|
|
uVar4 = 0x28;
|
|
goto LAB_0003f67e;
|
|
}
|
|
piVar5 = (int *)*param_1;
|
|
if ((piVar5 != (int *)0x0) && (!bVar1)) {
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar4 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar5 = (int *)*param_2;
|
|
if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar4 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
uVar4 = 0x28;
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) goto LAB_0003f67e;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar5 = (int *)*param_1;
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar6 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if ((uVar6 & 0xff) != (uint)local_1a) goto LAB_0003f67e;
|
|
piVar5 = (int *)*param_1;
|
|
if ((uint)piVar5[2] < (uint)piVar5[3]) {
|
|
piVar5[2] = piVar5[2] + 1;
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
LAB_0003f50a:
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar4 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar5 + 0x24))();
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
piVar5 = (int *)*param_1;
|
|
if (piVar5 != (int *)0x0) goto LAB_0003f50a;
|
|
}
|
|
piVar5 = (int *)*param_2;
|
|
if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar4 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
local_24 = 1;
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) {
|
|
uVar4 = 0x20;
|
|
}
|
|
else {
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar5 = (int *)*param_1;
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar6 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if (((uVar6 & 0xff) == (uint)local_19) || (uVar4 = 0x20, (uVar6 & 0xff) == (uint)local_18)) {
|
|
piVar5 = (int *)*param_1;
|
|
if ((uint)piVar5[2] < (uint)piVar5[3]) {
|
|
piVar5[2] = piVar5[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar5 + 0x24))();
|
|
}
|
|
local_24 = 0;
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
uVar4 = 0x40;
|
|
}
|
|
}
|
|
goto LAB_0003f67e;
|
|
}
|
|
piVar5 = (int *)*param_1;
|
|
if ((piVar5 != (int *)0x0) && (!bVar1)) {
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar4 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar5 = (int *)*param_2;
|
|
if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar4 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
uVar4 = 0x40;
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) goto LAB_0003f67e;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar5 = (int *)*param_1;
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar6 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if ((uVar6 & 0xff) != (uint)local_1a) goto LAB_0003f67e;
|
|
piVar5 = (int *)*param_1;
|
|
if ((uint)piVar5[2] < (uint)piVar5[3]) {
|
|
piVar5[2] = piVar5[2] + 1;
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
LAB_0003f472:
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar6 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar5 + 0x24))();
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
piVar5 = (int *)*param_1;
|
|
if (piVar5 != (int *)0x0) goto LAB_0003f472;
|
|
}
|
|
piVar5 = (int *)*param_2;
|
|
if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar6 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
local_24 = 1;
|
|
if (*(char *)((int)param_1 + 5) != *(char *)((int)param_2 + 5)) {
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar5 = (int *)*param_1;
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar6 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if (((uVar6 & 0xff) == (uint)local_19) || ((uVar6 & 0xff) == (uint)local_18)) {
|
|
piVar5 = (int *)*param_1;
|
|
if ((uint)piVar5[2] < (uint)piVar5[3]) {
|
|
piVar5[2] = piVar5[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar5 + 0x24))();
|
|
}
|
|
local_24 = 0;
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
}
|
|
}
|
|
LAB_0003f67e:
|
|
return uVar4 | uVar7 | local_24;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003f68a @ 0003f68a
|
|
|
|
undefined4
|
|
FUN_0003f68a(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6,uint param_7
|
|
,int param_8)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
bool bVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
int iVar10;
|
|
int iVar11;
|
|
int local_98;
|
|
undefined4 local_84;
|
|
int local_6c;
|
|
char *local_64;
|
|
int local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar7 = *(int *)(param_8 + 0x10);
|
|
iVar9 = *(int *)(param_8 + 0x14);
|
|
local_84 = 1;
|
|
local_98 = -0x80000000;
|
|
iVar2 = __divsi3(0x80000000,param_3);
|
|
local_6c = param_5;
|
|
cVar1 = '\0';
|
|
bVar6 = false;
|
|
local_58 = 0;
|
|
iVar11 = 0;
|
|
while( true ) {
|
|
local_64 = acStack_54 + local_58;
|
|
piVar3 = (int *)*param_1;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar4 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
iVar8 = 0xff;
|
|
iVar10 = iVar11;
|
|
if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) {
|
|
*local_64 = cVar1;
|
|
local_58 = local_58 + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
if (-1 < (char)uVar4) {
|
|
iVar8 = std::priv::__digit_val_table(uVar4 & 0xff);
|
|
}
|
|
if (param_3 <= iVar8) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
local_6c = local_6c + 1;
|
|
if (iVar11 < iVar2) {
|
|
bVar6 = true;
|
|
}
|
|
else {
|
|
iVar10 = iVar11 * param_3 - iVar8;
|
|
bVar6 = (bool)(bVar6 | (iVar11 != 0 && iVar11 <= iVar10));
|
|
}
|
|
}
|
|
piVar3 = (int *)*param_1;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
iVar11 = iVar10;
|
|
}
|
|
if ((iVar9 != iVar7) && (local_58 != 0)) {
|
|
*local_64 = cVar1;
|
|
local_64 = acStack_54 + local_58 + 1;
|
|
}
|
|
uVar5 = 0;
|
|
if (0 < local_6c) {
|
|
if (bVar6) {
|
|
if (param_6 == 0) {
|
|
local_98 = 0x7fffffff;
|
|
}
|
|
*param_4 = local_98;
|
|
return 0;
|
|
}
|
|
if (param_6 == 0) {
|
|
iVar11 = -iVar11;
|
|
}
|
|
*param_4 = iVar11;
|
|
uVar5 = local_84;
|
|
if (iVar9 != iVar7) {
|
|
uVar5 = std::priv::__valid_grouping
|
|
(acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003f894 @ 0003f894
|
|
|
|
void FUN_0003f894(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined2 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
uVar4 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar4 = 0;
|
|
*param_6 = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<char>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar5 = FUN_0003fa98(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar4 = 0;
|
|
if (iVar5 == 0) {
|
|
uVar4 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar4;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar5 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar5;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003fa98 @ 0003fa98
|
|
|
|
uint FUN_0003fa98(int *param_1,int *param_2,uint param_3,short *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
uint uVar1;
|
|
short sVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int *piVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
char cVar10;
|
|
int iVar11;
|
|
char *pcVar12;
|
|
uint uVar13;
|
|
uint local_84;
|
|
uint local_78;
|
|
int local_6c;
|
|
int local_58;
|
|
char local_54 [64];
|
|
|
|
iVar8 = *(int *)(param_8 + 0x10);
|
|
iVar11 = *(int *)(param_8 + 0x14);
|
|
local_58 = 0;
|
|
local_84 = 1;
|
|
uVar3 = __udivsi3(0xffff,param_3 & 0xffff);
|
|
local_6c = param_5;
|
|
cVar10 = '\0';
|
|
uVar4 = 0;
|
|
local_78 = 0;
|
|
while( true ) {
|
|
sVar2 = (short)uVar4;
|
|
pcVar12 = local_54 + local_58;
|
|
piVar5 = (int *)*param_1;
|
|
if ((piVar5 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar6 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
piVar5 = (int *)*param_2;
|
|
if ((piVar5 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar6 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar5 = (int *)*param_1;
|
|
if ((byte *)piVar5[2] < (byte *)piVar5[3]) {
|
|
uVar6 = (uint)*(byte *)piVar5[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar5 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
iVar9 = 0xff;
|
|
if ((uVar6 & 0xff) == param_7 && iVar11 != iVar8) {
|
|
*pcVar12 = cVar10;
|
|
local_58 = local_58 + 1;
|
|
cVar10 = '\0';
|
|
uVar6 = local_78;
|
|
}
|
|
else {
|
|
if (-1 < (char)uVar6) {
|
|
iVar9 = std::priv::__digit_val_table(uVar6 & 0xff);
|
|
}
|
|
if ((int)param_3 <= iVar9) break;
|
|
uVar7 = uVar4 & 0xffff;
|
|
cVar10 = cVar10 + '\x01';
|
|
local_6c = local_6c + 1;
|
|
uVar6 = local_84;
|
|
if ((uVar7 <= uVar3) &&
|
|
(uVar13 = iVar9 + uVar7 * param_3, uVar1 = uVar4 & 0xffff, uVar4 = uVar13, uVar6 = local_78
|
|
, uVar1 != 0)) {
|
|
uVar6 = local_78 | (uVar13 & 0xffff) <= uVar7;
|
|
}
|
|
}
|
|
local_78 = uVar6;
|
|
piVar5 = (int *)*param_1;
|
|
if ((uint)piVar5[2] < (uint)piVar5[3]) {
|
|
piVar5[2] = piVar5[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar5 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
}
|
|
if ((iVar11 != iVar8) && (local_58 != 0)) {
|
|
*pcVar12 = cVar10;
|
|
pcVar12 = local_54 + local_58 + 1;
|
|
}
|
|
uVar4 = 0;
|
|
if (0 < local_6c) {
|
|
if (local_78 != 0) {
|
|
*param_4 = -1;
|
|
return 0;
|
|
}
|
|
if (param_6 == 1) {
|
|
sVar2 = -sVar2;
|
|
}
|
|
*param_4 = sVar2;
|
|
uVar4 = local_84;
|
|
if (iVar11 != iVar8) {
|
|
uVar4 = std::priv::__valid_grouping
|
|
(local_54,pcVar12,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003fc94 @ 0003fc94
|
|
|
|
void FUN_0003fc94(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
uVar4 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar4 = 0;
|
|
*param_6 = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<char>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar5 = FUN_0003fe98(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar4 = 0;
|
|
if (iVar5 == 0) {
|
|
uVar4 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar4;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar5 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar5;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0003fe98 @ 0003fe98
|
|
|
|
undefined4
|
|
FUN_0003fe98(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
char cVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
bool bVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
uint uVar10;
|
|
undefined4 local_84;
|
|
int local_6c;
|
|
char *local_64;
|
|
int local_5c;
|
|
char acStack_54 [64];
|
|
|
|
iVar7 = *(int *)(param_8 + 0x10);
|
|
iVar9 = *(int *)(param_8 + 0x14);
|
|
local_84 = 1;
|
|
uVar2 = __udivsi3(0xffffffff,param_3);
|
|
local_6c = param_5;
|
|
cVar1 = '\0';
|
|
uVar10 = 0;
|
|
local_5c = 0;
|
|
bVar6 = false;
|
|
while( true ) {
|
|
local_64 = acStack_54 + local_5c;
|
|
piVar3 = (int *)*param_1;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar4 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
iVar8 = 0xff;
|
|
if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) {
|
|
*local_64 = cVar1;
|
|
local_5c = local_5c + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
if (-1 < (char)uVar4) {
|
|
iVar8 = std::priv::__digit_val_table(uVar4 & 0xff);
|
|
}
|
|
if (param_3 <= iVar8) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
local_6c = local_6c + 1;
|
|
if (uVar2 < uVar10) {
|
|
bVar6 = true;
|
|
}
|
|
else {
|
|
uVar4 = iVar8 + uVar10 * param_3;
|
|
bVar6 = (bool)(bVar6 | (uVar10 != 0 && uVar4 <= uVar10));
|
|
uVar10 = uVar4;
|
|
}
|
|
}
|
|
piVar3 = (int *)*param_1;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
}
|
|
if ((iVar9 != iVar7) && (local_5c != 0)) {
|
|
*local_64 = cVar1;
|
|
local_64 = acStack_54 + local_5c + 1;
|
|
}
|
|
uVar5 = 0;
|
|
if (0 < local_6c) {
|
|
if (bVar6) {
|
|
*param_4 = 0xffffffff;
|
|
return 0;
|
|
}
|
|
uVar2 = -uVar10;
|
|
if (param_6 == 0) {
|
|
uVar2 = uVar10;
|
|
}
|
|
*param_4 = uVar2;
|
|
uVar5 = local_84;
|
|
if (iVar9 != iVar7) {
|
|
uVar5 = std::priv::__valid_grouping
|
|
(acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00040090 @ 00040090
|
|
|
|
void FUN_00040090(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
uVar4 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar4 = 0;
|
|
*param_6 = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<char>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar5 = FUN_00040294(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar4 = 0;
|
|
if (iVar5 == 0) {
|
|
uVar4 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar4;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar5 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar5;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00040294 @ 00040294
|
|
|
|
undefined4
|
|
FUN_00040294(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
char cVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
bool bVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
uint uVar10;
|
|
undefined4 local_84;
|
|
int local_6c;
|
|
char *local_64;
|
|
int local_5c;
|
|
char acStack_54 [64];
|
|
|
|
iVar7 = *(int *)(param_8 + 0x10);
|
|
iVar9 = *(int *)(param_8 + 0x14);
|
|
local_84 = 1;
|
|
uVar2 = __udivsi3(0xffffffff,param_3);
|
|
local_6c = param_5;
|
|
cVar1 = '\0';
|
|
uVar10 = 0;
|
|
local_5c = 0;
|
|
bVar6 = false;
|
|
while( true ) {
|
|
local_64 = acStack_54 + local_5c;
|
|
piVar3 = (int *)*param_1;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar4 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
iVar8 = 0xff;
|
|
if ((uVar4 & 0xff) == param_7 && iVar9 != iVar7) {
|
|
*local_64 = cVar1;
|
|
local_5c = local_5c + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
if (-1 < (char)uVar4) {
|
|
iVar8 = std::priv::__digit_val_table(uVar4 & 0xff);
|
|
}
|
|
if (param_3 <= iVar8) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
local_6c = local_6c + 1;
|
|
if (uVar2 < uVar10) {
|
|
bVar6 = true;
|
|
}
|
|
else {
|
|
uVar4 = iVar8 + uVar10 * param_3;
|
|
bVar6 = (bool)(bVar6 | (uVar10 != 0 && uVar4 <= uVar10));
|
|
uVar10 = uVar4;
|
|
}
|
|
}
|
|
piVar3 = (int *)*param_1;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
}
|
|
if ((iVar9 != iVar7) && (local_5c != 0)) {
|
|
*local_64 = cVar1;
|
|
local_64 = acStack_54 + local_5c + 1;
|
|
}
|
|
uVar5 = 0;
|
|
if (0 < local_6c) {
|
|
if (bVar6) {
|
|
*param_4 = 0xffffffff;
|
|
return 0;
|
|
}
|
|
uVar2 = -uVar10;
|
|
if (param_6 == 0) {
|
|
uVar2 = uVar10;
|
|
}
|
|
*param_4 = uVar2;
|
|
uVar5 = local_84;
|
|
if (iVar9 != iVar7) {
|
|
uVar5 = std::priv::__valid_grouping
|
|
(acStack_54,local_64,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004048c @ 0004048c
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_0004048c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,float *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
undefined1 *local_134 [4];
|
|
undefined1 **local_124;
|
|
undefined1 local_120;
|
|
undefined1 auStack_11f [256];
|
|
undefined1 auStack_1f [3];
|
|
undefined1 **local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<char>::id);
|
|
__aeabi_memclr(auStack_11f,0x100);
|
|
local_120 = 0;
|
|
local_134[0] = auStack_1f;
|
|
local_124 = (undefined1 **)&local_120;
|
|
local_1c = (undefined1 **)&local_120;
|
|
iVar3 = FUN_00040604(local_134,param_2,param_3,uVar1,uVar2);
|
|
uVar5 = 4;
|
|
if (iVar3 == 1) {
|
|
uVar5 = 0;
|
|
std::priv::__string_to_float((__basic_iostring *)local_134,param_6);
|
|
}
|
|
*param_5 = uVar5;
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar5 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar5;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff;
|
|
}
|
|
piVar4 = (int *)*param_3;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar5 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar5;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar3 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar3;
|
|
if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_120 != local_1c)) {
|
|
if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00040604 @ 00040604
|
|
|
|
undefined4
|
|
FUN_00040604(undefined4 param_1,int *param_2,int *param_3,undefined4 param_4,int *param_5)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 uVar2;
|
|
uint uVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int local_44;
|
|
undefined1 uStack_3e;
|
|
undefined4 local_40;
|
|
undefined1 auStack_3c [12];
|
|
undefined1 local_30 [4];
|
|
int local_2c [4];
|
|
int *local_1c;
|
|
int *local_18;
|
|
|
|
(**(code **)(*param_5 + 0x10))(local_2c,param_5);
|
|
local_30[0] = 1;
|
|
uVar1 = (**(code **)(*param_5 + 8))(param_5);
|
|
uVar2 = (**(code **)(*param_5 + 0xc))(param_5);
|
|
FUN_000408f4(&local_44,*param_2,param_2[1],*param_3,param_3[1],param_1,0x2b,0x2d);
|
|
*(short *)(param_2 + 1) = (short)local_40;
|
|
*param_2 = local_44;
|
|
*(undefined1 *)((int)param_2 + 6) = uStack_3e;
|
|
if (local_18 == local_1c) {
|
|
uVar3 = FUN_00040bac(param_2,*param_3,param_3[1],param_1,auStack_3c);
|
|
}
|
|
else {
|
|
uVar3 = FUN_00040a50(param_2,*param_3,param_3[1],param_1,auStack_3c,uVar2,local_2c,local_30);
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar5 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar5;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff;
|
|
}
|
|
piVar4 = (int *)*param_3;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar5 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar5;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff;
|
|
}
|
|
uVar2 = 0;
|
|
uVar5 = 0;
|
|
if (*(char *)((int)param_2 + 5) != *(char *)((int)param_3 + 5)) {
|
|
if (*(char *)((int)param_2 + 6) == '\0') {
|
|
piVar4 = (int *)*param_2;
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar6 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar6;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = (uint)*(byte *)(param_2 + 1);
|
|
}
|
|
uVar5 = 0;
|
|
if ((uVar6 & 0xff) == uVar1) {
|
|
FUN_00040cb0(param_1,0x2e);
|
|
piVar4 = (int *)*param_2;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_2 + 6) = 0;
|
|
uVar5 = FUN_00040bac(param_2,*param_3,param_3[1],param_1,auStack_3c);
|
|
}
|
|
}
|
|
if ((uVar3 | uVar5) == 1) {
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar1 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar1;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar1 == 0xffffffff;
|
|
}
|
|
piVar4 = (int *)*param_3;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar1 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar1;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar1 == 0xffffffff;
|
|
}
|
|
uVar2 = 1;
|
|
if (*(char *)((int)param_2 + 5) != *(char *)((int)param_3 + 5)) {
|
|
if (*(char *)((int)param_2 + 6) == '\0') {
|
|
piVar4 = (int *)*param_2;
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar1 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar1;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar1 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar1 = (uint)*(byte *)(param_2 + 1);
|
|
}
|
|
if ((uVar1 & 0xff | 0x20) == 0x65) {
|
|
FUN_00040cb0(param_1,0x65);
|
|
piVar4 = (int *)*param_2;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_2 + 6) = 0;
|
|
FUN_000408f4(&local_44,*param_2,param_2[1],*param_3,param_3[1],param_1,0x2b,0x2d);
|
|
*(short *)(param_2 + 1) = (short)local_40;
|
|
*param_2 = local_44;
|
|
*(undefined1 *)((int)param_2 + 6) = uStack_3e;
|
|
uVar2 = FUN_00040bac(param_2,*param_3,param_3[1],param_1,auStack_3c);
|
|
}
|
|
}
|
|
}
|
|
if ((local_18 != local_2c) && (local_18 != (int *)0x0)) {
|
|
if ((uint)(local_2c[0] - (int)local_18) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000408f4 @ 000408f4
|
|
|
|
undefined4 *
|
|
FUN_000408f4(undefined4 *param_1,int *param_2,uint param_3,int *param_4,uint param_5,
|
|
undefined4 param_6,uint param_7,uint param_8)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
|
|
if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar1 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_3 = param_3 & 0xff000000 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((param_4 != (int *)0x0) && ((param_5 & 0xff0000) == 0)) {
|
|
if ((byte *)param_4[2] < (byte *)param_4[3]) {
|
|
uVar1 = (uint)*(byte *)param_4[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*param_4 + 0x20))(param_4);
|
|
}
|
|
param_5 = (uint)(uVar1 == 0xffffffff) << 8;
|
|
}
|
|
uVar1 = param_3;
|
|
if ((param_3 >> 8 & 0xff) == (param_5 >> 8 & 0xff)) goto LAB_00040a44;
|
|
if ((param_3 & 0xff0000) == 0) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar1 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar1 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
uVar2 = param_3 & 0xff000000;
|
|
param_3 = uVar1;
|
|
uVar1 = uVar2 | uVar1 & 0xff | (uint)(uVar1 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((param_3 & 0xff) == param_7) {
|
|
uVar2 = param_2[2];
|
|
if ((uint)param_2[3] <= uVar2) {
|
|
(**(code **)(*param_2 + 0x24))(param_2);
|
|
uVar1 = uVar1 & 0xff00ffff;
|
|
goto LAB_00040a44;
|
|
}
|
|
LAB_00040a32:
|
|
param_2[2] = uVar2 + 1;
|
|
}
|
|
else {
|
|
if ((param_3 & 0xff) != param_8) goto LAB_00040a44;
|
|
FUN_00040cb0(param_6,0x2d);
|
|
uVar2 = param_2[2];
|
|
if (uVar2 < (uint)param_2[3]) goto LAB_00040a32;
|
|
(**(code **)(*param_2 + 0x24))(param_2);
|
|
}
|
|
uVar1 = uVar1 & 0xff00ffff;
|
|
LAB_00040a44:
|
|
*param_1 = param_2;
|
|
param_1[1] = uVar1;
|
|
return param_1 + 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00040a50 @ 00040a50
|
|
|
|
undefined4
|
|
FUN_00040a50(int *param_1,int *param_2,uint param_3,undefined4 param_4,undefined4 param_5,
|
|
uint param_6,int param_7,undefined1 *param_8)
|
|
|
|
{
|
|
char cVar1;
|
|
undefined1 uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
char *pcVar5;
|
|
int iVar6;
|
|
undefined4 local_6c;
|
|
char local_54 [64];
|
|
|
|
iVar6 = 0;
|
|
cVar1 = '\0';
|
|
local_6c = 0;
|
|
while( true ) {
|
|
pcVar5 = local_54 + iVar6;
|
|
piVar3 = (int *)*param_1;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar4 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_3 = (uint)(uVar4 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) break;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar4 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if ((uVar4 & 0xff) == param_6) {
|
|
*pcVar5 = cVar1;
|
|
iVar6 = iVar6 + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
if (9 < (uVar4 - 0x30 & 0xff)) break;
|
|
FUN_00040cb0(param_4);
|
|
cVar1 = cVar1 + '\x01';
|
|
local_6c = 1;
|
|
}
|
|
piVar3 = (int *)*param_1;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
}
|
|
if (iVar6 != 0) {
|
|
*pcVar5 = cVar1;
|
|
pcVar5 = local_54 + iVar6 + 1;
|
|
}
|
|
uVar2 = std::priv::__valid_grouping
|
|
(local_54,pcVar5,*(char **)(param_7 + 0x14),*(char **)(param_7 + 0x10));
|
|
*param_8 = uVar2;
|
|
return local_6c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00040bac @ 00040bac
|
|
|
|
undefined4 FUN_00040bac(int *param_1,int *param_2,uint param_3,undefined4 param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
uint uVar2;
|
|
undefined4 local_1c;
|
|
|
|
local_1c = 0;
|
|
while( true ) {
|
|
piVar1 = (int *)*param_1;
|
|
if ((piVar1 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar1[2] < (byte *)piVar1[3]) {
|
|
uVar2 = (uint)*(byte *)piVar1[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar1 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
if ((param_2 != (int *)0x0) && ((param_3 & 0xff0000) == 0)) {
|
|
if ((byte *)param_2[2] < (byte *)param_2[3]) {
|
|
uVar2 = (uint)*(byte *)param_2[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_3 = (uint)(uVar2 == 0xffffffff) << 8 | 0x10000;
|
|
}
|
|
if ((uint)*(byte *)((int)param_1 + 5) == (param_3 >> 8 & 0xff)) {
|
|
return local_1c;
|
|
}
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar1 = (int *)*param_1;
|
|
if ((byte *)piVar1[2] < (byte *)piVar1[3]) {
|
|
uVar2 = (uint)*(byte *)piVar1[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar1 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar2 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
if (9 < (uVar2 - 0x30 & 0xff)) break;
|
|
FUN_00040cb0(param_4,uVar2 & 0xff);
|
|
piVar1 = (int *)*param_1;
|
|
if ((uint)piVar1[2] < (uint)piVar1[3]) {
|
|
piVar1[2] = piVar1[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
local_1c = 1;
|
|
}
|
|
return local_1c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00040cb0 @ 00040cb0
|
|
|
|
void FUN_00040cb0(int *param_1,undefined1 param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
undefined1 *puVar3;
|
|
int *piVar4;
|
|
int *piVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
int *piVar8;
|
|
int *piVar9;
|
|
int *piVar10;
|
|
|
|
piVar10 = (int *)param_1[0x46];
|
|
piVar5 = param_1 + 0x46;
|
|
if (piVar10 == param_1) {
|
|
piVar8 = (int *)param_1[4];
|
|
piVar4 = param_1 + 4;
|
|
}
|
|
else {
|
|
piVar8 = (int *)param_1[4];
|
|
piVar4 = (int *)*param_1;
|
|
}
|
|
if ((int)piVar4 - (int)piVar8 == 1) {
|
|
uVar2 = (int)piVar8 - (int)piVar10;
|
|
if (uVar2 == 0xfffffffe) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar6 = uVar2;
|
|
if (uVar2 < 2) {
|
|
uVar6 = 1;
|
|
}
|
|
uVar7 = uVar2 + uVar6 + 1;
|
|
uVar1 = 0xfffffffe;
|
|
if (uVar2 <= uVar7) {
|
|
uVar1 = uVar7;
|
|
}
|
|
uVar7 = 0xfffffffe;
|
|
if (uVar2 + uVar6 != -2) {
|
|
uVar7 = uVar1;
|
|
}
|
|
if (uVar7 >> 1 < 0x81) {
|
|
piVar4 = param_1 + 5;
|
|
}
|
|
else {
|
|
piVar4 = (int *)operator_new(uVar7);
|
|
piVar8 = (int *)param_1[4];
|
|
piVar10 = (int *)*piVar5;
|
|
}
|
|
piVar9 = piVar4;
|
|
if (0 < (int)piVar8 - (int)piVar10) {
|
|
puVar3 = (undefined1 *)((int)piVar8 + (1 - (int)piVar10));
|
|
do {
|
|
*(char *)piVar9 = (char)*piVar10;
|
|
puVar3 = puVar3 + -1;
|
|
piVar9 = (int *)((int)piVar9 + 1);
|
|
piVar10 = (int *)((int)piVar10 + 1);
|
|
} while (1 < (int)puVar3);
|
|
}
|
|
*(undefined1 *)piVar9 = 0;
|
|
piVar10 = (int *)*piVar5;
|
|
if (((piVar10 != param_1) && (piVar10 != (int *)0x0)) && (param_1 + 5 != piVar10)) {
|
|
if ((uint)(*param_1 - (int)piVar10) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar10,*param_1 - (int)piVar10);
|
|
}
|
|
else {
|
|
operator_delete(piVar10);
|
|
}
|
|
}
|
|
param_1[4] = (int)piVar9;
|
|
*param_1 = (int)((int)piVar4 + uVar7);
|
|
*piVar5 = (int)piVar4;
|
|
piVar8 = piVar9;
|
|
}
|
|
param_1 = param_1 + 4;
|
|
*(undefined1 *)((int)piVar8 + 1) = 0;
|
|
*(undefined1 *)*param_1 = param_2;
|
|
*param_1 = *param_1 + 1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00040dac @ 00040dac
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_00040dac(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,double *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
undefined1 *local_134 [4];
|
|
undefined1 **local_124;
|
|
undefined1 local_120;
|
|
undefined1 auStack_11f [256];
|
|
undefined1 auStack_1f [3];
|
|
undefined1 **local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<char>::id);
|
|
__aeabi_memclr(auStack_11f,0x100);
|
|
local_120 = 0;
|
|
local_134[0] = auStack_1f;
|
|
local_124 = (undefined1 **)&local_120;
|
|
local_1c = (undefined1 **)&local_120;
|
|
iVar3 = FUN_00040604(local_134,param_2,param_3,uVar1,uVar2);
|
|
uVar5 = 4;
|
|
if (iVar3 == 1) {
|
|
uVar5 = 0;
|
|
std::priv::__string_to_float((__basic_iostring *)local_134,param_6);
|
|
}
|
|
*param_5 = uVar5;
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar5 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar5;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff;
|
|
}
|
|
piVar4 = (int *)*param_3;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar5 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar5;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar3 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar3;
|
|
if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_120 != local_1c)) {
|
|
if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00040f24 @ 00040f24
|
|
|
|
void FUN_00040f24(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
uVar4 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar4 = 0;
|
|
*param_6 = 0;
|
|
param_6[1] = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<char>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar5 = FUN_00041128(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar4 = 0;
|
|
if (iVar5 == 0) {
|
|
uVar4 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar4;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar5 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar5;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041128 @ 00041128
|
|
|
|
undefined4
|
|
FUN_00041128(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
bool bVar1;
|
|
longlong lVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
undefined4 uVar6;
|
|
char cVar7;
|
|
bool bVar8;
|
|
int iVar9;
|
|
int iVar10;
|
|
undefined8 uVar11;
|
|
longlong lVar12;
|
|
undefined4 local_94;
|
|
int local_78;
|
|
char *local_70;
|
|
uint local_64;
|
|
uint local_60;
|
|
uint local_5c;
|
|
int local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar9 = *(int *)(param_8 + 0x10);
|
|
iVar10 = *(int *)(param_8 + 0x14);
|
|
local_94 = 1;
|
|
uVar11 = __aeabi_uldivmod(0xffffffff,0xffffffff,param_3);
|
|
uVar5 = (uint)((ulonglong)uVar11 >> 0x20);
|
|
local_58 = 0;
|
|
local_78 = param_5;
|
|
cVar7 = '\0';
|
|
bVar8 = false;
|
|
lVar2 = 0;
|
|
while( true ) {
|
|
local_5c = (uint)((ulonglong)lVar2 >> 0x20);
|
|
local_60 = (uint)lVar2;
|
|
local_70 = acStack_54 + local_58;
|
|
piVar3 = (int *)*param_1;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar4 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
local_64 = 0xff;
|
|
lVar12 = lVar2;
|
|
if ((uVar4 & 0xff) == param_7 && iVar10 != iVar9) {
|
|
*local_70 = cVar7;
|
|
local_58 = local_58 + 1;
|
|
cVar7 = '\0';
|
|
}
|
|
else {
|
|
if (-1 < (char)uVar4) {
|
|
local_64 = std::priv::__digit_val_table(uVar4 & 0xff);
|
|
}
|
|
if (param_3 <= (int)local_64) break;
|
|
bVar1 = (uint)uVar11 < local_60;
|
|
if (local_5c != uVar5) {
|
|
bVar1 = uVar5 < local_5c;
|
|
}
|
|
cVar7 = cVar7 + '\x01';
|
|
local_78 = local_78 + 1;
|
|
if (bVar1) {
|
|
bVar8 = true;
|
|
}
|
|
else {
|
|
lVar12 = __muldi3(local_60,local_5c,param_3,param_3 >> 0x1f);
|
|
lVar12 = lVar12 + (ulonglong)local_64;
|
|
uVar4 = (uint)((ulonglong)lVar12 >> 0x20);
|
|
bVar1 = local_60 < (uint)lVar12;
|
|
if (uVar4 != local_5c) {
|
|
bVar1 = local_5c < uVar4;
|
|
}
|
|
bVar8 = (bool)(bVar8 | (lVar2 != 0 && !bVar1));
|
|
}
|
|
}
|
|
piVar3 = (int *)*param_1;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
lVar2 = lVar12;
|
|
}
|
|
if ((iVar10 != iVar9) && (local_58 != 0)) {
|
|
*local_70 = cVar7;
|
|
local_70 = acStack_54 + local_58 + 1;
|
|
}
|
|
uVar6 = 0;
|
|
if (0 < local_78) {
|
|
if (bVar8) {
|
|
*param_4 = 0xffffffff;
|
|
param_4[1] = 0xffffffff;
|
|
return 0;
|
|
}
|
|
uVar5 = -local_60;
|
|
if (param_6 == 0) {
|
|
uVar5 = local_60;
|
|
}
|
|
*param_4 = uVar5;
|
|
uVar5 = -(uint)(local_60 != 0) - local_5c;
|
|
if (param_6 == 0) {
|
|
uVar5 = local_5c;
|
|
}
|
|
param_4[1] = uVar5;
|
|
uVar6 = local_94;
|
|
if (iVar10 != iVar9) {
|
|
uVar6 = std::priv::__valid_grouping
|
|
(acStack_54,local_70,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004139c @ 0004139c
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_0004139c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
longdouble *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
undefined1 *local_134 [4];
|
|
undefined1 **local_124;
|
|
undefined1 local_120;
|
|
undefined1 auStack_11f [256];
|
|
undefined1 auStack_1f [3];
|
|
undefined1 **local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<char>::id);
|
|
__aeabi_memclr(auStack_11f,0x100);
|
|
local_120 = 0;
|
|
local_134[0] = auStack_1f;
|
|
local_124 = (undefined1 **)&local_120;
|
|
local_1c = (undefined1 **)&local_120;
|
|
iVar3 = FUN_00040604(local_134,param_2,param_3,uVar1,uVar2);
|
|
uVar5 = 4;
|
|
if (iVar3 == 1) {
|
|
uVar5 = 0;
|
|
std::priv::__string_to_float((__basic_iostring *)local_134,param_6);
|
|
}
|
|
*param_5 = uVar5;
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar5 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar5;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar5 == 0xffffffff;
|
|
}
|
|
piVar4 = (int *)*param_3;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar4[2] < (byte *)piVar4[3]) {
|
|
uVar5 = (uint)*(byte *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar5;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar5 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar3 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar3;
|
|
if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_120 != local_1c)) {
|
|
if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041514 @ 00041514
|
|
|
|
void FUN_00041514(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
uVar2 = FUN_0003f220(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar4 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar4;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar4 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
uVar4 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar4 = 0;
|
|
*param_6 = 0;
|
|
param_6[1] = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<char>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar5 = FUN_00041718(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar4 = 0;
|
|
if (iVar5 == 0) {
|
|
uVar4 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar4;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 6) == '\0')) {
|
|
if ((byte *)piVar3[2] < (byte *)piVar3[3]) {
|
|
uVar2 = (uint)*(byte *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
*(char *)(param_3 + 1) = (char)uVar2;
|
|
*(undefined1 *)((int)param_3 + 6) = 1;
|
|
*(bool *)((int)param_3 + 5) = uVar2 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_2 + 5) == *(char *)((int)param_3 + 5)) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar5 = param_2[1];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar5;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041718 @ 00041718
|
|
|
|
undefined4
|
|
FUN_00041718(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
bool bVar1;
|
|
int *piVar2;
|
|
uint uVar3;
|
|
undefined4 uVar4;
|
|
char cVar5;
|
|
bool bVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
undefined8 uVar13;
|
|
undefined8 uVar14;
|
|
uint local_a4;
|
|
undefined4 local_90;
|
|
int local_70;
|
|
char *local_68;
|
|
uint local_60;
|
|
uint local_5c;
|
|
int local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar7 = *(int *)(param_8 + 0x10);
|
|
iVar8 = *(int *)(param_8 + 0x14);
|
|
local_90 = 1;
|
|
local_a4 = 0x80000000;
|
|
uVar13 = __aeabi_ldivmod(0);
|
|
uVar9 = (uint)((ulonglong)uVar13 >> 0x20);
|
|
local_70 = param_5;
|
|
cVar5 = '\0';
|
|
local_5c = 0;
|
|
bVar6 = false;
|
|
local_58 = 0;
|
|
local_60 = 0;
|
|
while( true ) {
|
|
local_68 = acStack_54 + local_58;
|
|
piVar2 = (int *)*param_1;
|
|
if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 6) == '\0')) {
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
piVar2 = (int *)*param_2;
|
|
if ((piVar2 != (int *)0x0) && (*(char *)((int)param_2 + 6) == '\0')) {
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_2 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_2 + 6) = 1;
|
|
*(bool *)((int)param_2 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
if (*(char *)((int)param_1 + 5) == *(char *)((int)param_2 + 5)) break;
|
|
if (*(char *)((int)param_1 + 6) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((byte *)piVar2[2] < (byte *)piVar2[3]) {
|
|
uVar3 = (uint)*(byte *)piVar2[2];
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
*(char *)(param_1 + 1) = (char)uVar3;
|
|
*(undefined1 *)((int)param_1 + 6) = 1;
|
|
*(bool *)((int)param_1 + 5) = uVar3 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar3 = (uint)*(byte *)(param_1 + 1);
|
|
}
|
|
uVar11 = 0xff;
|
|
uVar10 = local_60;
|
|
uVar12 = local_5c;
|
|
if ((uVar3 & 0xff) == param_7 && iVar8 != iVar7) {
|
|
*local_68 = cVar5;
|
|
local_58 = local_58 + 1;
|
|
cVar5 = '\0';
|
|
}
|
|
else {
|
|
if (-1 < (char)uVar3) {
|
|
uVar11 = std::priv::__digit_val_table(uVar3 & 0xff);
|
|
}
|
|
if (param_3 <= (int)uVar11) break;
|
|
bVar1 = local_5c < (uint)uVar13;
|
|
if (local_60 != uVar9) {
|
|
bVar1 = (int)local_60 < (int)uVar9;
|
|
}
|
|
cVar5 = cVar5 + '\x01';
|
|
local_70 = local_70 + 1;
|
|
if (bVar1) {
|
|
bVar6 = true;
|
|
}
|
|
else {
|
|
uVar14 = __muldi3(local_5c,local_60,param_3,param_3 >> 0x1f);
|
|
uVar12 = (uint)uVar14 - uVar11;
|
|
uVar10 = (int)((ulonglong)uVar14 >> 0x20) - (uint)((uint)uVar14 < uVar11);
|
|
bVar1 = uVar12 < local_5c;
|
|
if (uVar10 != local_60) {
|
|
bVar1 = (int)uVar10 < (int)local_60;
|
|
}
|
|
bVar6 = (bool)(bVar6 | ((local_5c != 0 || local_60 != 0) && !bVar1));
|
|
}
|
|
}
|
|
piVar2 = (int *)*param_1;
|
|
if ((uint)piVar2[2] < (uint)piVar2[3]) {
|
|
piVar2[2] = piVar2[2] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
local_60 = uVar10;
|
|
local_5c = uVar12;
|
|
}
|
|
if ((iVar8 != iVar7) && (local_58 != 0)) {
|
|
*local_68 = cVar5;
|
|
local_68 = acStack_54 + local_58 + 1;
|
|
}
|
|
uVar4 = 0;
|
|
if (0 < local_70) {
|
|
if (bVar6) {
|
|
uVar9 = 0;
|
|
if (param_6 == 0) {
|
|
uVar9 = 0xffffffff;
|
|
}
|
|
*param_4 = uVar9;
|
|
if (param_6 == 0) {
|
|
local_a4 = 0x7fffffff;
|
|
}
|
|
param_4[1] = local_a4;
|
|
return 0;
|
|
}
|
|
uVar9 = local_5c;
|
|
if (param_6 == 0) {
|
|
uVar9 = -local_5c;
|
|
}
|
|
*param_4 = uVar9;
|
|
if (param_6 == 0) {
|
|
local_60 = -(uint)(local_5c != 0) - local_60;
|
|
}
|
|
param_4[1] = local_60;
|
|
uVar4 = local_90;
|
|
if (iVar8 != iVar7) {
|
|
uVar4 = std::priv::__valid_grouping
|
|
(acStack_54,local_68,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041986 @ 00041986
|
|
|
|
void FUN_00041986(facet *param_1)
|
|
|
|
{
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000419e8 @ 000419e8
|
|
|
|
void FUN_000419e8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
int param_5,undefined4 param_6,undefined4 param_7)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_16 [2];
|
|
|
|
uVar2 = *(undefined4 *)(param_5 + 4);
|
|
uVar1 = FUN_00041ecc(auStack_16,uVar2,param_7);
|
|
FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041a22 @ 00041a22
|
|
|
|
void FUN_00041a22(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
int param_5,undefined4 param_6,undefined4 param_7)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_16 [2];
|
|
|
|
uVar2 = *(undefined4 *)(param_5 + 4);
|
|
uVar1 = FUN_000424fc(auStack_16,uVar2,param_7);
|
|
FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041a5c @ 00041a5c
|
|
|
|
void FUN_00041a5c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6)
|
|
|
|
{
|
|
FUN_000425e8(param_1,param_3,param_4,param_5,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041a80 @ 00041a80
|
|
|
|
void FUN_00041a80(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6)
|
|
|
|
{
|
|
FUN_00042a64(param_1,param_3,param_4,param_5,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041aa4 @ 00041aa4
|
|
|
|
void FUN_00041aa4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_16 [2];
|
|
|
|
uVar2 = *(undefined4 *)(param_5 + 4);
|
|
uVar1 = FUN_00042c10(auStack_16,uVar2,param_7,param_8);
|
|
FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041ae0 @ 00041ae0
|
|
|
|
void FUN_00041ae0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_16 [2];
|
|
|
|
uVar2 = *(undefined4 *)(param_5 + 4);
|
|
uVar1 = FUN_00042d68(auStack_16,uVar2,param_7,param_8);
|
|
FUN_00042010(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041b1c @ 00041b1c
|
|
|
|
void FUN_00041b1c(undefined4 param_1,undefined4 param_2,int *param_3,uint param_4,int param_5,
|
|
undefined4 param_6,int param_7)
|
|
|
|
{
|
|
bool bVar1;
|
|
locale *this;
|
|
int *piVar2;
|
|
undefined4 uVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
undefined1 *puVar6;
|
|
undefined4 uVar7;
|
|
uint uVar8;
|
|
undefined4 uVar9;
|
|
uint local_28;
|
|
locale alStack_24 [14];
|
|
undefined1 auStack_16 [2];
|
|
|
|
this = (locale *)std::locale::locale(alStack_24,(locale *)(param_5 + 0x20));
|
|
piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<char>::id);
|
|
std::locale::~locale(alStack_24);
|
|
uVar3 = 10;
|
|
*(undefined4 *)(param_5 + 0x1c) = 10;
|
|
uVar8 = *(uint *)(param_5 + 4);
|
|
*(uint *)(param_5 + 4) = uVar8 & 0xfffffdc0 | 0x214;
|
|
local_28 = param_4;
|
|
if (param_7 == 0) {
|
|
if ((int)(uVar8 << 0x11) < 0) {
|
|
iVar4 = std::priv::__hex_char_table_hi();
|
|
}
|
|
else {
|
|
iVar4 = std::priv::__hex_char_table_lo();
|
|
}
|
|
iVar5 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30);
|
|
bVar1 = true;
|
|
if ((param_4 & 0xff) != 0) {
|
|
puVar6 = (undefined1 *)param_3[5];
|
|
if (puVar6 < (undefined1 *)param_3[6]) {
|
|
param_3[5] = (int)(puVar6 + 1);
|
|
*puVar6 = (char)iVar5;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_3 + 0x34))(param_3);
|
|
}
|
|
bVar1 = true;
|
|
if (iVar5 != -1) {
|
|
bVar1 = false;
|
|
}
|
|
}
|
|
iVar4 = (**(code **)(*piVar2 + 0x18))(piVar2,*(undefined1 *)(iVar4 + 0x10));
|
|
local_28 = 0;
|
|
if (!bVar1) {
|
|
puVar6 = (undefined1 *)param_3[5];
|
|
if (puVar6 < (undefined1 *)param_3[6]) {
|
|
param_3[5] = (int)(puVar6 + 1);
|
|
*puVar6 = (char)iVar4;
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*param_3 + 0x34))(param_3);
|
|
}
|
|
local_28 = 1;
|
|
if (iVar4 == -1) {
|
|
local_28 = 0;
|
|
}
|
|
}
|
|
local_28 = param_4 & 0xffffff00 | local_28;
|
|
uVar3 = 8;
|
|
}
|
|
*(undefined4 *)(param_5 + 0x1c) = uVar3;
|
|
uVar3 = (**(code **)(*piVar2 + 0x18))(piVar2,0x30);
|
|
uVar9 = *(undefined4 *)(param_5 + 4);
|
|
uVar7 = FUN_000424fc(auStack_16,uVar9,param_7);
|
|
FUN_00042010(param_1,uVar7,auStack_16,param_3,local_28,param_5,uVar9,uVar3);
|
|
*(uint *)(param_5 + 4) = uVar8;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041c48 @ 00041c48
|
|
|
|
void FUN_00041c48(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6)
|
|
|
|
{
|
|
byte bVar1;
|
|
locale *this;
|
|
int *piVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
byte *pbVar5;
|
|
undefined1 *puVar6;
|
|
code *pcVar7;
|
|
int iVar8;
|
|
byte *pbVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
byte *local_30;
|
|
int local_2c [4];
|
|
int local_1c;
|
|
byte *local_18;
|
|
|
|
this = (locale *)std::locale::locale((locale *)local_2c,(locale *)(param_4 + 0x20));
|
|
piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct<char>::id);
|
|
std::locale::~locale((locale *)local_2c);
|
|
if (param_6 == 1) {
|
|
pcVar7 = *(code **)(*piVar2 + 0x14);
|
|
}
|
|
else {
|
|
pcVar7 = *(code **)(*piVar2 + 0x18);
|
|
}
|
|
(*pcVar7)(local_2c,piVar2);
|
|
pbVar9 = local_18;
|
|
uVar10 = *(uint *)(param_4 + 0x1c);
|
|
local_30 = (byte *)0x0;
|
|
*(undefined4 *)(param_4 + 0x1c) = 0;
|
|
uVar3 = local_1c - (int)local_18;
|
|
if (uVar3 < uVar10) {
|
|
if ((*(uint *)(param_4 + 4) & 7) == 1) {
|
|
uVar4 = param_3;
|
|
if (0 < (int)uVar3) {
|
|
iVar8 = (local_1c + 1) - (int)local_18;
|
|
local_30 = local_18;
|
|
uVar11 = param_3;
|
|
do {
|
|
uVar4 = 0;
|
|
if ((uVar11 & 0xff) != 0) {
|
|
bVar1 = *local_30;
|
|
uVar4 = (uint)bVar1;
|
|
pbVar5 = (byte *)param_2[5];
|
|
if (pbVar5 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar5 + 1);
|
|
*pbVar5 = bVar1;
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar4 = (uint)(uVar4 != 0xffffffff);
|
|
}
|
|
iVar8 = iVar8 + -1;
|
|
local_30 = local_30 + 1;
|
|
uVar11 = uVar4;
|
|
} while (1 < iVar8);
|
|
}
|
|
param_3 = uVar4 & 0xff | param_3 & 0xffffff00;
|
|
if (0 < (int)(uVar10 - uVar3)) {
|
|
pbVar9 = pbVar9 + ((uVar10 + 1) - local_1c);
|
|
do {
|
|
uVar3 = 0;
|
|
if ((param_3 & 0xff) != 0) {
|
|
puVar6 = (undefined1 *)param_2[5];
|
|
if (puVar6 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar6 + 1);
|
|
*puVar6 = (char)param_5;
|
|
iVar8 = param_5;
|
|
}
|
|
else {
|
|
iVar8 = (**(code **)(*param_2 + 0x34))(param_2,param_5);
|
|
}
|
|
uVar3 = 1;
|
|
if (iVar8 == -1) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | uVar3;
|
|
pbVar9 = pbVar9 + -1;
|
|
} while (1 < (int)pbVar9);
|
|
}
|
|
}
|
|
else {
|
|
uVar4 = param_3;
|
|
if (0 < (int)(uVar10 - uVar3)) {
|
|
pbVar9 = local_18 + ((uVar10 + 1) - local_1c);
|
|
uVar3 = param_3;
|
|
do {
|
|
uVar4 = 0;
|
|
if ((uVar3 & 0xff) != 0) {
|
|
puVar6 = (undefined1 *)param_2[5];
|
|
if (puVar6 < (undefined1 *)param_2[6]) {
|
|
param_2[5] = (int)(puVar6 + 1);
|
|
*puVar6 = (char)param_5;
|
|
iVar8 = param_5;
|
|
}
|
|
else {
|
|
iVar8 = (**(code **)(*param_2 + 0x34))(param_2,param_5);
|
|
}
|
|
uVar4 = 1;
|
|
if (iVar8 == -1) {
|
|
uVar4 = 0;
|
|
}
|
|
}
|
|
pbVar9 = pbVar9 + -1;
|
|
uVar3 = uVar4;
|
|
} while (1 < (int)pbVar9);
|
|
}
|
|
param_3 = uVar4 & 0xff | param_3 & 0xffffff00;
|
|
if (0 < local_1c - (int)local_18) {
|
|
iVar8 = (local_1c + 1) - (int)local_18;
|
|
pbVar9 = local_18;
|
|
do {
|
|
uVar3 = 0;
|
|
if ((param_3 & 0xff) != 0) {
|
|
bVar1 = *pbVar9;
|
|
uVar3 = (uint)bVar1;
|
|
pbVar5 = (byte *)param_2[5];
|
|
if (pbVar5 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar5 + 1);
|
|
*pbVar5 = bVar1;
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar3 = (uint)(uVar3 != 0xffffffff);
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | uVar3;
|
|
iVar8 = iVar8 + -1;
|
|
pbVar9 = pbVar9 + 1;
|
|
} while (1 < iVar8);
|
|
}
|
|
}
|
|
}
|
|
else if (0 < (int)uVar3) {
|
|
iVar8 = (local_1c + 1) - (int)local_18;
|
|
do {
|
|
pbVar5 = local_30;
|
|
if ((param_3 & 0xff) != 0) {
|
|
bVar1 = *pbVar9;
|
|
uVar3 = (uint)bVar1;
|
|
pbVar5 = (byte *)param_2[5];
|
|
if (pbVar5 < (byte *)param_2[6]) {
|
|
param_2[5] = (int)(pbVar5 + 1);
|
|
*pbVar5 = bVar1;
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
pbVar5 = (byte *)(uint)(uVar3 != 0xffffffff);
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | (uint)pbVar5;
|
|
iVar8 = iVar8 + -1;
|
|
pbVar9 = pbVar9 + 1;
|
|
} while (1 < iVar8);
|
|
}
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
if ((local_18 != (byte *)local_2c) && (local_18 != (byte *)0x0)) {
|
|
if (0x80 < (uint)(local_2c[0] - (int)local_18)) {
|
|
operator_delete(local_18);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00041ecc @ 00041ecc
|
|
|
|
byte * FUN_00041ecc(byte *param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
ulonglong uVar1;
|
|
byte bVar2;
|
|
byte *pbVar3;
|
|
byte *pbVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
undefined8 uVar7;
|
|
|
|
if (param_3 == 0) {
|
|
param_1[-1] = 0x30;
|
|
if ((param_2 & 0x830) != 0x800) {
|
|
return param_1 + -1;
|
|
}
|
|
param_1[-2] = 0x2b;
|
|
return param_1 + -2;
|
|
}
|
|
if ((param_2 & 0x38) == 0x10) {
|
|
if ((int)(param_2 << 0x11) < 0) {
|
|
iVar5 = std::priv::__hex_char_table_hi();
|
|
}
|
|
else {
|
|
iVar5 = std::priv::__hex_char_table_lo();
|
|
}
|
|
pbVar4 = param_1 + -2;
|
|
do {
|
|
pbVar3 = pbVar4;
|
|
pbVar3[1] = *(byte *)(iVar5 + (param_3 & 0xf));
|
|
pbVar4 = pbVar3 + -1;
|
|
param_3 = param_3 >> 4;
|
|
} while (param_3 != 0);
|
|
if ((param_2 & 0x200) == 0) {
|
|
return pbVar3 + 1;
|
|
}
|
|
bVar2 = *(byte *)(iVar5 + 0x10);
|
|
*pbVar4 = 0x30;
|
|
*pbVar3 = bVar2;
|
|
return pbVar4;
|
|
}
|
|
if ((param_2 & 0x38) != 0x20) {
|
|
uVar6 = -param_3;
|
|
iVar5 = -(uint)(param_3 != 0) - ((int)param_3 >> 0x1f);
|
|
if (-1 < (int)param_3) {
|
|
uVar6 = param_3;
|
|
iVar5 = (int)param_3 >> 0x1f;
|
|
}
|
|
uVar7 = CONCAT44(iVar5,uVar6);
|
|
if (uVar6 != 0 || iVar5 != 0) {
|
|
do {
|
|
uVar1 = (ulonglong)uVar7 >> 0x20;
|
|
uVar6 = (uint)uVar7;
|
|
bVar2 = 10;
|
|
uVar7 = __aeabi_uldivmod();
|
|
param_1[-1] = bVar2 | 0x30;
|
|
param_1 = param_1 + -1;
|
|
} while ((int)uVar1 != 0 || 9 < uVar6);
|
|
}
|
|
if ((int)param_3 < 0) {
|
|
bVar2 = 0x2d;
|
|
}
|
|
else {
|
|
if ((param_2 & 0x800) == 0) {
|
|
return param_1;
|
|
}
|
|
bVar2 = 0x2b;
|
|
}
|
|
param_1[-1] = bVar2;
|
|
return param_1 + -1;
|
|
}
|
|
pbVar4 = param_1 + -1;
|
|
do {
|
|
pbVar3 = pbVar4;
|
|
*pbVar3 = (byte)param_3 & 7 | 0x30;
|
|
pbVar4 = pbVar3 + -1;
|
|
param_3 = param_3 >> 3;
|
|
} while (param_3 != 0);
|
|
if ((param_2 & 0x200) == 0) {
|
|
return pbVar3;
|
|
}
|
|
*pbVar4 = 0x30;
|
|
return pbVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00042010 @ 00042010
|
|
|
|
void FUN_00042010(undefined4 param_1,undefined1 *param_2,int param_3,undefined4 param_4,
|
|
undefined4 param_5,int param_6,uint param_7,undefined4 param_8)
|
|
|
|
{
|
|
locale *this;
|
|
int *piVar1;
|
|
undefined4 uVar2;
|
|
undefined1 uVar3;
|
|
undefined1 *local_70;
|
|
int local_6c [4];
|
|
int *local_5c;
|
|
int *local_58;
|
|
undefined1 auStack_54 [64];
|
|
|
|
this = (locale *)std::locale::locale((locale *)local_6c,(locale *)(param_6 + 0x20));
|
|
param_3 = param_3 - (int)param_2;
|
|
piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct<char>::id);
|
|
std::locale::~locale((locale *)local_6c);
|
|
(**(code **)(*piVar1 + 0x10))(local_6c,piVar1);
|
|
local_70 = param_2;
|
|
if (local_58 != local_5c) {
|
|
uVar3 = 0;
|
|
if ((int)(param_7 << 0x16) < 0) {
|
|
uVar3 = 2;
|
|
if ((param_7 & 0x38) != 0x10) {
|
|
uVar3 = (param_7 & 0x38) == 0x20;
|
|
}
|
|
}
|
|
if (param_3 != 0) {
|
|
__aeabi_memcpy(auStack_54,param_2,param_3);
|
|
}
|
|
uVar2 = (**(code **)(*piVar1 + 0xc))(piVar1);
|
|
local_70 = auStack_54;
|
|
param_3 = FUN_00050058(local_70,local_70 + param_3,local_6c,uVar2,0x2b,0x2d,uVar3);
|
|
}
|
|
uVar2 = *(undefined4 *)(param_6 + 0x1c);
|
|
*(undefined4 *)(param_6 + 0x1c) = 0;
|
|
FUN_00042144(param_1,local_70,param_3,param_4,param_5,param_7,uVar2,param_8,0x2b,0x2d);
|
|
if ((local_58 != local_6c) && (local_58 != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_6c[0] - (int)local_58)) {
|
|
operator_delete(local_58);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_58,local_6c[0] - (int)local_58);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00042144 @ 00042144
|
|
|
|
undefined4 *
|
|
FUN_00042144(undefined4 *param_1,byte *param_2,int param_3,int *param_4,uint param_5,uint param_6,
|
|
int param_7,int param_8,uint param_9,uint param_10)
|
|
|
|
{
|
|
byte bVar1;
|
|
undefined1 uVar2;
|
|
uint uVar3;
|
|
byte *pbVar4;
|
|
undefined1 *puVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
int local_28;
|
|
byte *local_18;
|
|
|
|
if (param_7 <= param_3) {
|
|
if (0 < param_3) {
|
|
param_3 = param_3 + 1;
|
|
do {
|
|
uVar3 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
bVar1 = *param_2;
|
|
uVar6 = (uint)bVar1;
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar3 = 1;
|
|
if (uVar6 == 0xffffffff) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar3;
|
|
param_3 = param_3 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < param_3);
|
|
}
|
|
goto LAB_00042256;
|
|
}
|
|
iVar7 = param_7 - param_3;
|
|
uVar2 = (undefined1)param_8;
|
|
if ((param_6 & 7) == 1) {
|
|
uVar3 = param_5;
|
|
if (0 < param_3) {
|
|
iVar8 = param_3 + 1;
|
|
uVar6 = param_5;
|
|
local_18 = param_2;
|
|
do {
|
|
uVar3 = 0;
|
|
if ((uVar6 & 0xff) != 0) {
|
|
bVar1 = *local_18;
|
|
uVar6 = (uint)bVar1;
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar3 = 1;
|
|
if (uVar6 == 0xffffffff) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
iVar8 = iVar8 + -1;
|
|
local_18 = local_18 + 1;
|
|
uVar6 = uVar3;
|
|
} while (1 < iVar8);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar3 & 0xff;
|
|
if (0 < iVar7) {
|
|
param_3 = (param_7 + 1) - param_3;
|
|
do {
|
|
uVar3 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
puVar5 = (undefined1 *)param_4[5];
|
|
if (puVar5 < (undefined1 *)param_4[6]) {
|
|
param_4[5] = (int)(puVar5 + 1);
|
|
*puVar5 = uVar2;
|
|
iVar7 = param_8;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar3 = 1;
|
|
if (iVar7 == -1) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar3;
|
|
param_3 = param_3 + -1;
|
|
} while (1 < param_3);
|
|
}
|
|
goto LAB_00042256;
|
|
}
|
|
if ((param_3 != 0) && ((param_6 & 7) == 4)) {
|
|
bVar1 = *param_2;
|
|
uVar3 = (uint)bVar1;
|
|
if ((uVar3 == param_9) || (uVar3 == param_10)) {
|
|
uVar6 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar6 = 1;
|
|
if (uVar3 == 0xffffffff) {
|
|
uVar6 = 0;
|
|
}
|
|
}
|
|
if (0 < iVar7) {
|
|
iVar7 = (param_7 + 1) - param_3;
|
|
uVar3 = uVar6;
|
|
do {
|
|
uVar6 = 0;
|
|
if (uVar3 != 0) {
|
|
puVar5 = (undefined1 *)param_4[5];
|
|
if (puVar5 < (undefined1 *)param_4[6]) {
|
|
param_4[5] = (int)(puVar5 + 1);
|
|
*puVar5 = uVar2;
|
|
iVar8 = param_8;
|
|
}
|
|
else {
|
|
iVar8 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar6 = 1;
|
|
if (iVar8 == -1) {
|
|
uVar6 = 0;
|
|
}
|
|
}
|
|
iVar7 = iVar7 + -1;
|
|
uVar3 = uVar6;
|
|
} while (1 < iVar7);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar6;
|
|
local_28 = param_3;
|
|
if (0 < param_3 + -1) {
|
|
do {
|
|
param_2 = param_2 + 1;
|
|
uVar3 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
bVar1 = *param_2;
|
|
uVar6 = (uint)bVar1;
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar3 = 1;
|
|
if (uVar6 == 0xffffffff) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar3;
|
|
local_28 = local_28 + -1;
|
|
} while (1 < local_28);
|
|
}
|
|
goto LAB_00042256;
|
|
}
|
|
}
|
|
if ((param_3 < 2) || ((param_6 & 0x23f) != 0x214)) {
|
|
uVar3 = param_5;
|
|
if (0 < iVar7) {
|
|
iVar7 = (param_7 + 1) - param_3;
|
|
uVar6 = param_5;
|
|
do {
|
|
uVar3 = 0;
|
|
if ((uVar6 & 0xff) != 0) {
|
|
puVar5 = (undefined1 *)param_4[5];
|
|
if (puVar5 < (undefined1 *)param_4[6]) {
|
|
param_4[5] = (int)(puVar5 + 1);
|
|
*puVar5 = uVar2;
|
|
iVar8 = param_8;
|
|
}
|
|
else {
|
|
iVar8 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar3 = 1;
|
|
if (iVar8 == -1) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
iVar7 = iVar7 + -1;
|
|
uVar6 = uVar3;
|
|
} while (1 < iVar7);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar3 & 0xff;
|
|
if (0 < param_3) {
|
|
param_3 = param_3 + 1;
|
|
do {
|
|
uVar3 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
bVar1 = *param_2;
|
|
uVar6 = (uint)bVar1;
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar3 = 1;
|
|
if (uVar6 == 0xffffffff) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar3;
|
|
param_3 = param_3 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < param_3);
|
|
}
|
|
goto LAB_00042256;
|
|
}
|
|
uVar3 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
bVar1 = *param_2;
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
iVar8 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
if (iVar8 == -1) goto LAB_00042398;
|
|
}
|
|
pbVar4 = (byte *)param_4[5];
|
|
bVar1 = param_2[1];
|
|
uVar6 = (uint)bVar1;
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar3 = 1;
|
|
if (uVar6 == 0xffffffff) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
LAB_00042398:
|
|
if (0 < iVar7) {
|
|
iVar7 = (param_7 + 1) - param_3;
|
|
uVar6 = uVar3;
|
|
do {
|
|
uVar3 = 0;
|
|
if (uVar6 != 0) {
|
|
puVar5 = (undefined1 *)param_4[5];
|
|
if (puVar5 < (undefined1 *)param_4[6]) {
|
|
param_4[5] = (int)(puVar5 + 1);
|
|
*puVar5 = uVar2;
|
|
iVar8 = param_8;
|
|
}
|
|
else {
|
|
iVar8 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar3 = 1;
|
|
if (iVar8 == -1) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
iVar7 = iVar7 + -1;
|
|
uVar6 = uVar3;
|
|
} while (1 < iVar7);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar3;
|
|
if (0 < param_3 + -2) {
|
|
param_3 = param_3 + -1;
|
|
param_2 = param_2 + 2;
|
|
do {
|
|
uVar3 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
bVar1 = *param_2;
|
|
uVar6 = (uint)bVar1;
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar3 = 1;
|
|
if (uVar6 == 0xffffffff) {
|
|
uVar3 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar3;
|
|
param_3 = param_3 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < param_3);
|
|
}
|
|
LAB_00042256:
|
|
*param_1 = param_4;
|
|
param_1[1] = param_5;
|
|
return param_1 + 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000424fc @ 000424fc
|
|
|
|
byte * FUN_000424fc(int param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
bool bVar1;
|
|
byte bVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
byte extraout_r1;
|
|
byte *pbVar5;
|
|
byte *pbVar6;
|
|
byte *pbVar7;
|
|
|
|
if (param_3 == 0) {
|
|
*(undefined1 *)(param_1 + -1) = 0x30;
|
|
pbVar7 = (byte *)(param_1 + -1);
|
|
if ((param_2 & 0x830) == 0x800) {
|
|
*(undefined1 *)(param_1 + -2) = 0x2b;
|
|
pbVar7 = (byte *)(param_1 + -2);
|
|
}
|
|
}
|
|
else if ((param_2 & 0x38) == 0x10) {
|
|
if ((int)(param_2 << 0x11) < 0) {
|
|
iVar3 = std::priv::__hex_char_table_hi();
|
|
}
|
|
else {
|
|
iVar3 = std::priv::__hex_char_table_lo();
|
|
}
|
|
pbVar5 = (byte *)(param_1 + -2);
|
|
do {
|
|
pbVar6 = pbVar5;
|
|
pbVar6[1] = *(byte *)(iVar3 + (param_3 & 0xf));
|
|
pbVar5 = pbVar6 + -1;
|
|
param_3 = param_3 >> 4;
|
|
} while (param_3 != 0);
|
|
pbVar7 = pbVar6 + 1;
|
|
if ((param_2 & 0x200) != 0) {
|
|
bVar2 = *(byte *)(iVar3 + 0x10);
|
|
*pbVar5 = 0x30;
|
|
*pbVar6 = bVar2;
|
|
pbVar7 = pbVar5;
|
|
}
|
|
}
|
|
else if ((param_2 & 0x38) == 0x20) {
|
|
pbVar5 = (byte *)(param_1 + -1);
|
|
do {
|
|
pbVar7 = pbVar5;
|
|
*pbVar7 = (byte)param_3 & 7 | 0x30;
|
|
pbVar5 = pbVar7 + -1;
|
|
param_3 = param_3 >> 3;
|
|
} while (param_3 != 0);
|
|
if ((param_2 & 0x200) != 0) {
|
|
*pbVar5 = 0x30;
|
|
pbVar7 = pbVar5;
|
|
}
|
|
}
|
|
else {
|
|
pbVar5 = (byte *)(param_1 + -1);
|
|
do {
|
|
pbVar7 = pbVar5;
|
|
uVar4 = __aeabi_uidivmod(param_3,10);
|
|
*pbVar7 = extraout_r1 | 0x30;
|
|
pbVar5 = pbVar7 + -1;
|
|
bVar1 = 9 < param_3;
|
|
param_3 = uVar4;
|
|
} while (bVar1);
|
|
if ((param_2 & 0x800) != 0) {
|
|
*pbVar5 = 0x2b;
|
|
pbVar7 = pbVar5;
|
|
}
|
|
}
|
|
return pbVar7;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000425e8 @ 000425e8
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_000425e8(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
uint uVar2;
|
|
locale *this;
|
|
int *piVar3;
|
|
undefined4 uVar4;
|
|
int local_148 [4];
|
|
int *local_138;
|
|
int *local_134;
|
|
undefined1 *local_130 [4];
|
|
undefined1 **local_120;
|
|
undefined1 local_11c;
|
|
undefined1 auStack_11b [256];
|
|
undefined1 auStack_1b [3];
|
|
undefined1 **local_18;
|
|
|
|
__aeabi_memclr(auStack_11b,0x100);
|
|
local_11c = 0;
|
|
local_130[0] = auStack_1b;
|
|
local_120 = (undefined1 **)&local_11c;
|
|
local_18 = (undefined1 **)&local_11c;
|
|
uVar2 = FUN_00051490(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18));
|
|
this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20));
|
|
piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct<char>::id);
|
|
std::locale::~locale((locale *)local_148);
|
|
uVar1 = (**(code **)(*piVar3 + 8))(piVar3);
|
|
uVar4 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_148,piVar3);
|
|
if ((uVar2 < (uint)((int)local_120 - (int)local_18)) && (*(char *)((int)local_18 + uVar2) == '.'))
|
|
{
|
|
*(undefined1 *)((int)local_18 + uVar2) = uVar1;
|
|
}
|
|
if (local_134 != local_138) {
|
|
FUN_000500f4(local_130,uVar2,local_148,uVar4);
|
|
}
|
|
*(undefined4 *)(param_4 + 0x1c) = 0;
|
|
FUN_00042794(param_1,local_18,local_120,param_2);
|
|
if ((local_134 != local_148) && (local_134 != (int *)0x0)) {
|
|
if ((uint)(local_148[0] - (int)local_134) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134);
|
|
}
|
|
else {
|
|
operator_delete(local_134);
|
|
}
|
|
}
|
|
if (((local_18 != local_130) && (local_18 != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_11c != local_18)) {
|
|
if (0x80 < (uint)((int)local_130[0] - (int)local_18)) {
|
|
operator_delete(local_18);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_18,(int)local_130[0] - (int)local_18);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00042794 @ 00042794
|
|
|
|
undefined4 *
|
|
FUN_00042794(undefined4 *param_1,byte *param_2,byte *param_3,int *param_4,uint param_5,uint param_6,
|
|
int param_7,int param_8,uint param_9,uint param_10)
|
|
|
|
{
|
|
byte bVar1;
|
|
undefined1 uVar2;
|
|
undefined1 *puVar3;
|
|
byte *pbVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
byte *pbVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
byte *local_1c;
|
|
|
|
iVar9 = (int)param_3 - (int)param_2;
|
|
if (iVar9 < param_7) {
|
|
iVar5 = param_7 - iVar9;
|
|
uVar2 = (undefined1)param_8;
|
|
if ((param_6 & 7) == 4) {
|
|
if (param_2 != param_3) {
|
|
bVar1 = *param_2;
|
|
uVar6 = (uint)bVar1;
|
|
if ((uVar6 == param_9) || (uVar6 == param_10)) {
|
|
pbVar7 = param_2 + 1;
|
|
uVar8 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar8 = 1;
|
|
if (uVar6 == 0xffffffff) {
|
|
uVar8 = 0;
|
|
}
|
|
}
|
|
if (0 < iVar5) {
|
|
param_2 = param_2 + ((param_7 + 1) - (int)param_3);
|
|
uVar6 = uVar8;
|
|
do {
|
|
uVar8 = 0;
|
|
if (uVar6 != 0) {
|
|
puVar3 = (undefined1 *)param_4[5];
|
|
if (puVar3 < (undefined1 *)param_4[6]) {
|
|
param_4[5] = (int)(puVar3 + 1);
|
|
*puVar3 = uVar2;
|
|
iVar9 = param_8;
|
|
}
|
|
else {
|
|
iVar9 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar8 = 1;
|
|
if (iVar9 == -1) {
|
|
uVar8 = 0;
|
|
}
|
|
}
|
|
param_2 = param_2 + -1;
|
|
uVar6 = uVar8;
|
|
} while (1 < (int)param_2);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar8;
|
|
if (0 < (int)param_3 - (int)pbVar7) {
|
|
param_3 = param_3 + (1 - (int)pbVar7);
|
|
do {
|
|
uVar6 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
bVar1 = *pbVar7;
|
|
uVar8 = (uint)bVar1;
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar8 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar6 = 1;
|
|
if (uVar8 == 0xffffffff) {
|
|
uVar6 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar6;
|
|
param_3 = param_3 + -1;
|
|
pbVar7 = pbVar7 + 1;
|
|
} while (1 < (int)param_3);
|
|
}
|
|
goto LAB_00042984;
|
|
}
|
|
}
|
|
}
|
|
else if ((param_6 & 7) == 1) {
|
|
uVar6 = param_5;
|
|
if (0 < iVar9) {
|
|
pbVar7 = param_3 + (1 - (int)param_2);
|
|
uVar8 = param_5;
|
|
local_1c = param_2;
|
|
do {
|
|
uVar6 = 0;
|
|
if ((uVar8 & 0xff) != 0) {
|
|
bVar1 = *local_1c;
|
|
uVar6 = (uint)bVar1;
|
|
pbVar4 = (byte *)param_4[5];
|
|
if (pbVar4 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar4 + 1);
|
|
*pbVar4 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar6 = (uint)(uVar6 != 0xffffffff);
|
|
}
|
|
pbVar7 = pbVar7 + -1;
|
|
local_1c = local_1c + 1;
|
|
uVar8 = uVar6;
|
|
} while (1 < (int)pbVar7);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar6 & 0xff;
|
|
if (0 < iVar5) {
|
|
param_2 = param_2 + ((param_7 + 1) - (int)param_3);
|
|
do {
|
|
uVar6 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
puVar3 = (undefined1 *)param_4[5];
|
|
if (puVar3 < (undefined1 *)param_4[6]) {
|
|
param_4[5] = (int)(puVar3 + 1);
|
|
*puVar3 = uVar2;
|
|
iVar9 = param_8;
|
|
}
|
|
else {
|
|
iVar9 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar6 = 1;
|
|
if (iVar9 == -1) {
|
|
uVar6 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar6;
|
|
param_2 = param_2 + -1;
|
|
} while (1 < (int)param_2);
|
|
}
|
|
goto LAB_00042984;
|
|
}
|
|
uVar6 = param_5;
|
|
if (0 < iVar5) {
|
|
pbVar7 = param_2 + ((param_7 + 1) - (int)param_3);
|
|
uVar8 = param_5;
|
|
do {
|
|
uVar6 = 0;
|
|
if ((uVar8 & 0xff) != 0) {
|
|
puVar3 = (undefined1 *)param_4[5];
|
|
if (puVar3 < (undefined1 *)param_4[6]) {
|
|
param_4[5] = (int)(puVar3 + 1);
|
|
*puVar3 = uVar2;
|
|
iVar5 = param_8;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar6 = (uint)(iVar5 != -1);
|
|
}
|
|
pbVar7 = pbVar7 + -1;
|
|
uVar8 = uVar6;
|
|
} while (1 < (int)pbVar7);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar6 & 0xff;
|
|
if (0 < iVar9) {
|
|
param_3 = param_3 + (1 - (int)param_2);
|
|
do {
|
|
uVar6 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
bVar1 = *param_2;
|
|
uVar6 = (uint)bVar1;
|
|
pbVar7 = (byte *)param_4[5];
|
|
if (pbVar7 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar7 + 1);
|
|
*pbVar7 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar6 = (uint)(uVar6 != 0xffffffff);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar6;
|
|
param_3 = param_3 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < (int)param_3);
|
|
}
|
|
}
|
|
else if (0 < iVar9) {
|
|
param_3 = param_3 + (1 - (int)param_2);
|
|
do {
|
|
uVar6 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
bVar1 = *param_2;
|
|
uVar6 = (uint)bVar1;
|
|
pbVar7 = (byte *)param_4[5];
|
|
if (pbVar7 < (byte *)param_4[6]) {
|
|
param_4[5] = (int)(pbVar7 + 1);
|
|
*pbVar7 = bVar1;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar6 = (uint)(uVar6 != 0xffffffff);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar6;
|
|
param_3 = param_3 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < (int)param_3);
|
|
}
|
|
LAB_00042984:
|
|
*param_1 = param_4;
|
|
param_1[1] = param_5;
|
|
return param_1 + 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00042a64 @ 00042a64
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_00042a64(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
uint uVar2;
|
|
locale *this;
|
|
int *piVar3;
|
|
undefined4 uVar4;
|
|
int local_148 [4];
|
|
int *local_138;
|
|
int *local_134;
|
|
undefined1 *local_130 [4];
|
|
undefined1 **local_120;
|
|
undefined1 local_11c;
|
|
undefined1 auStack_11b [256];
|
|
undefined1 auStack_1b [3];
|
|
undefined1 **local_18;
|
|
|
|
__aeabi_memclr(auStack_11b,0x100);
|
|
local_11c = 0;
|
|
local_130[0] = auStack_1b;
|
|
local_120 = (undefined1 **)&local_11c;
|
|
local_18 = (undefined1 **)&local_11c;
|
|
uVar2 = FUN_00051642(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18));
|
|
this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20));
|
|
piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct<char>::id);
|
|
std::locale::~locale((locale *)local_148);
|
|
uVar1 = (**(code **)(*piVar3 + 8))(piVar3);
|
|
uVar4 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_148,piVar3);
|
|
if ((uVar2 < (uint)((int)local_120 - (int)local_18)) && (*(char *)((int)local_18 + uVar2) == '.'))
|
|
{
|
|
*(undefined1 *)((int)local_18 + uVar2) = uVar1;
|
|
}
|
|
if (local_134 != local_138) {
|
|
FUN_000500f4(local_130,uVar2,local_148,uVar4);
|
|
}
|
|
*(undefined4 *)(param_4 + 0x1c) = 0;
|
|
FUN_00042794(param_1,local_18,local_120,param_2);
|
|
if ((local_134 != local_148) && (local_134 != (int *)0x0)) {
|
|
if ((uint)(local_148[0] - (int)local_134) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134);
|
|
}
|
|
else {
|
|
operator_delete(local_134);
|
|
}
|
|
}
|
|
if (((local_18 != local_130) && (local_18 != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_11c != local_18)) {
|
|
if (0x80 < (uint)((int)local_130[0] - (int)local_18)) {
|
|
operator_delete(local_18);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_18,(int)local_130[0] - (int)local_18);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00042c10 @ 00042c10
|
|
|
|
byte * FUN_00042c10(byte *param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
byte bVar1;
|
|
byte *pbVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
byte *pbVar6;
|
|
byte *pbVar7;
|
|
uint uVar8;
|
|
undefined8 uVar9;
|
|
uint local_28;
|
|
|
|
if (param_3 == 0 && param_4 == 0) {
|
|
param_1[-1] = 0x30;
|
|
pbVar7 = param_1 + -1;
|
|
if ((param_2 & 0x830) == 0x800) {
|
|
param_1[-2] = 0x2b;
|
|
pbVar7 = param_1 + -2;
|
|
}
|
|
}
|
|
else {
|
|
local_28 = 1;
|
|
if ((param_2 & 0x38) == 0x10) {
|
|
if ((int)(param_2 << 0x11) < 0) {
|
|
iVar3 = std::priv::__hex_char_table_hi();
|
|
}
|
|
else {
|
|
iVar3 = std::priv::__hex_char_table_lo();
|
|
}
|
|
pbVar2 = param_1 + -2;
|
|
do {
|
|
pbVar6 = pbVar2;
|
|
pbVar6[1] = *(byte *)(iVar3 + (param_3 & 0xf));
|
|
pbVar2 = pbVar6 + -1;
|
|
param_3 = param_4 << 0x1c | param_3 >> 4;
|
|
param_4 = param_4 >> 4;
|
|
} while (param_3 != 0 || param_4 != 0);
|
|
pbVar7 = pbVar6 + 1;
|
|
if ((param_2 & 0x200) != 0) {
|
|
bVar1 = *(byte *)(iVar3 + 0x10);
|
|
*pbVar2 = 0x30;
|
|
*pbVar6 = bVar1;
|
|
pbVar7 = pbVar2;
|
|
}
|
|
}
|
|
else if ((param_2 & 0x38) == 0x20) {
|
|
pbVar2 = param_1 + -1;
|
|
do {
|
|
pbVar7 = pbVar2;
|
|
*pbVar7 = (byte)param_3 & 7 | 0x30;
|
|
pbVar2 = pbVar7 + -1;
|
|
param_3 = param_4 << 0x1d | param_3 >> 3;
|
|
param_4 = param_4 >> 3;
|
|
} while (param_3 != 0 || param_4 != 0);
|
|
if ((param_2 & 0x200) != 0) {
|
|
*pbVar2 = 0x30;
|
|
pbVar7 = pbVar2;
|
|
}
|
|
}
|
|
else {
|
|
uVar4 = (int)param_4 >> 0x1f;
|
|
uVar5 = param_3 + uVar4 ^ uVar4;
|
|
uVar4 = param_4 + uVar4 + (uint)CARRY4(param_3,uVar4) ^ uVar4;
|
|
uVar9 = CONCAT44(uVar4,uVar5);
|
|
if (uVar5 != 0 || uVar4 != 0) {
|
|
do {
|
|
uVar8 = (uint)((ulonglong)uVar9 >> 0x20);
|
|
uVar5 = (uint)uVar9;
|
|
bVar1 = 10;
|
|
uVar9 = __aeabi_uldivmod(uVar5,uVar8,10,0);
|
|
param_1[-1] = bVar1 | 0x30;
|
|
uVar4 = uVar8;
|
|
if (uVar8 != 0) {
|
|
uVar4 = local_28;
|
|
}
|
|
uVar5 = (uint)(9 < uVar5);
|
|
if (uVar8 != 0) {
|
|
uVar5 = uVar4;
|
|
}
|
|
param_1 = param_1 + -1;
|
|
} while (uVar5 != 0);
|
|
}
|
|
if ((int)param_4 < 0) {
|
|
bVar1 = 0x2d;
|
|
}
|
|
else {
|
|
if ((param_2 & 0x800) == 0) {
|
|
return param_1;
|
|
}
|
|
bVar1 = 0x2b;
|
|
}
|
|
param_1[-1] = bVar1;
|
|
pbVar7 = param_1 + -1;
|
|
}
|
|
}
|
|
return pbVar7;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00042d68 @ 00042d68
|
|
|
|
byte * FUN_00042d68(int param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
byte *pbVar2;
|
|
int iVar3;
|
|
byte *pbVar4;
|
|
byte bVar5;
|
|
uint uVar6;
|
|
byte *pbVar7;
|
|
uint uVar8;
|
|
undefined8 uVar9;
|
|
uint local_1c;
|
|
|
|
uVar9 = CONCAT44(param_4,param_3);
|
|
if (param_3 == 0 && param_4 == 0) {
|
|
*(undefined1 *)(param_1 + -1) = 0x30;
|
|
pbVar4 = (byte *)(param_1 + -1);
|
|
if ((param_2 & 0x830) == 0x800) {
|
|
*(undefined1 *)(param_1 + -2) = 0x2b;
|
|
pbVar4 = (byte *)(param_1 + -2);
|
|
}
|
|
}
|
|
else {
|
|
local_1c = 1;
|
|
if ((param_2 & 0x38) == 0x10) {
|
|
if ((int)(param_2 << 0x11) < 0) {
|
|
iVar3 = std::priv::__hex_char_table_hi();
|
|
}
|
|
else {
|
|
iVar3 = std::priv::__hex_char_table_lo();
|
|
}
|
|
pbVar2 = (byte *)(param_1 + -2);
|
|
do {
|
|
pbVar7 = pbVar2;
|
|
pbVar7[1] = *(byte *)(iVar3 + (param_3 & 0xf));
|
|
pbVar2 = pbVar7 + -1;
|
|
param_3 = param_4 << 0x1c | param_3 >> 4;
|
|
param_4 = param_4 >> 4;
|
|
} while (param_3 != 0 || param_4 != 0);
|
|
pbVar4 = pbVar7 + 1;
|
|
if ((param_2 & 0x200) != 0) {
|
|
bVar5 = *(byte *)(iVar3 + 0x10);
|
|
*pbVar2 = 0x30;
|
|
*pbVar7 = bVar5;
|
|
pbVar4 = pbVar2;
|
|
}
|
|
}
|
|
else if ((param_2 & 0x38) == 0x20) {
|
|
pbVar2 = (byte *)(param_1 + -1);
|
|
do {
|
|
pbVar4 = pbVar2;
|
|
*pbVar4 = (byte)param_3 & 7 | 0x30;
|
|
pbVar2 = pbVar4 + -1;
|
|
param_3 = param_4 << 0x1d | param_3 >> 3;
|
|
param_4 = param_4 >> 3;
|
|
} while (param_3 != 0 || param_4 != 0);
|
|
if ((param_2 & 0x200) != 0) {
|
|
*pbVar2 = 0x30;
|
|
pbVar4 = pbVar2;
|
|
}
|
|
}
|
|
else {
|
|
pbVar2 = (byte *)(param_1 + -1);
|
|
do {
|
|
pbVar4 = pbVar2;
|
|
uVar8 = (uint)((ulonglong)uVar9 >> 0x20);
|
|
uVar6 = (uint)uVar9;
|
|
bVar5 = 10;
|
|
uVar9 = __aeabi_uldivmod(uVar6,uVar8,10,0);
|
|
*pbVar4 = bVar5 | 0x30;
|
|
uVar1 = uVar8;
|
|
if (uVar8 != 0) {
|
|
uVar1 = local_1c;
|
|
}
|
|
uVar6 = (uint)(9 < uVar6);
|
|
if (uVar8 != 0) {
|
|
uVar6 = uVar1;
|
|
}
|
|
pbVar2 = pbVar4 + -1;
|
|
} while (uVar6 != 0);
|
|
if ((param_2 & 0x800) != 0) {
|
|
*pbVar2 = 0x2b;
|
|
pbVar4 = pbVar2;
|
|
}
|
|
}
|
|
}
|
|
return pbVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00042e96 @ 00042e96
|
|
|
|
void FUN_00042e96(facet *param_1)
|
|
|
|
{
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00042fc0 @ 00042fc0
|
|
|
|
void FUN_00042fc0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11,undefined4 param_12)
|
|
|
|
{
|
|
undefined1 local_14 [4];
|
|
|
|
local_14[0] = 1;
|
|
FUN_00043000(param_1,param_3,param_4,param_5,param_6,param_7,param_8,param_9,param_10,param_11,
|
|
param_12,local_14,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00043000 @ 00043000
|
|
|
|
void FUN_00043000(undefined4 *param_1,int *param_2,int param_3,uint param_4,int *param_5,int param_6
|
|
,uint param_7,int param_8,int param_9,uint *param_10,int *param_11,char *param_12)
|
|
|
|
{
|
|
locale *this;
|
|
int *piVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
undefined4 uVar5;
|
|
undefined4 uVar6;
|
|
int iVar7;
|
|
undefined4 uVar8;
|
|
char cVar9;
|
|
int iVar10;
|
|
uint uVar11;
|
|
int iVar12;
|
|
undefined4 local_1d4;
|
|
int local_1c4;
|
|
int local_19c;
|
|
int *local_190;
|
|
int local_18c;
|
|
undefined2 local_188;
|
|
char local_184;
|
|
int *local_180;
|
|
int local_17c;
|
|
undefined2 local_178;
|
|
char local_174;
|
|
int local_170 [4];
|
|
int *local_160;
|
|
int *local_15c;
|
|
int *local_158;
|
|
int local_154;
|
|
undefined4 local_150;
|
|
char local_14c;
|
|
int local_148 [16];
|
|
undefined4 local_108;
|
|
int *local_104;
|
|
int local_100 [16];
|
|
int *local_c0;
|
|
int *local_bc;
|
|
int local_b8 [16];
|
|
int *local_78;
|
|
int *local_74;
|
|
int local_70 [16];
|
|
int *local_30;
|
|
int *local_2c;
|
|
undefined4 local_28;
|
|
locale alStack_24 [4];
|
|
int *local_20;
|
|
int local_1c;
|
|
undefined4 local_18;
|
|
|
|
local_20 = param_2;
|
|
local_1c = param_3;
|
|
local_18 = param_4;
|
|
if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
local_1c = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
param_4 = (uint)(local_1c == -1);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
local_19c = param_6;
|
|
if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) {
|
|
if ((int *)param_5[2] < (int *)param_5[3]) {
|
|
local_19c = *(int *)param_5[2];
|
|
}
|
|
else {
|
|
local_19c = (**(code **)(*param_5 + 0x20))();
|
|
}
|
|
param_7 = param_7 & 0xffff0000 | (uint)(local_19c == -1) | 0x100;
|
|
}
|
|
if ((param_4 & 0xff) == (param_7 & 0xff)) {
|
|
*param_10 = *param_10 | 2;
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
param_1[2] = local_18;
|
|
return;
|
|
}
|
|
this = (locale *)std::locale::locale(alStack_24,(locale *)(param_9 + 0x20));
|
|
piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::moneypunct<wchar_t,false>::id);
|
|
piVar2 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::moneypunct<wchar_t,true>::id);
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_24,(id *)&std::ctype<wchar_t>::id);
|
|
if (param_8 == 1) {
|
|
local_28 = (**(code **)(*piVar2 + 0x28))();
|
|
(**(code **)(*piVar2 + 0x1c))(local_70);
|
|
(**(code **)(*piVar2 + 0x18))(local_b8);
|
|
}
|
|
else {
|
|
local_28 = (**(code **)(*piVar1 + 0x28))();
|
|
(**(code **)(*piVar1 + 0x1c))(local_70);
|
|
(**(code **)(*piVar1 + 0x18))(local_b8);
|
|
}
|
|
uVar4 = *(uint *)(param_9 + 4);
|
|
local_1c4 = 1;
|
|
local_100[0] = 0;
|
|
local_1d4 = 0;
|
|
iVar10 = -1;
|
|
local_c0 = local_100;
|
|
local_bc = local_100;
|
|
do {
|
|
switch(alStack_24[iVar10 + -3]) {
|
|
case (locale)0x0:
|
|
cVar9 = local_18._1_1_;
|
|
while( true ) {
|
|
if ((local_20 != (int *)0x0) && (cVar9 == '\0')) {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) {
|
|
if ((int *)param_5[2] < (int *)param_5[3]) {
|
|
local_19c = *(int *)param_5[2];
|
|
}
|
|
else {
|
|
local_19c = (**(code **)(*param_5 + 0x20))(param_5);
|
|
}
|
|
param_7 = param_7 & 0xffff0000 | (uint)(local_19c == -1) | 0x100;
|
|
}
|
|
if ((local_18 & 0xff) == (param_7 & 0xff)) break;
|
|
if (local_18._1_1_ == '\0') {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
iVar7 = (**(code **)(*piVar3 + 8))(piVar3,1,local_1c);
|
|
if (iVar7 != 1) break;
|
|
uVar11 = local_20[2];
|
|
if (uVar11 < (uint)local_20[3]) {
|
|
LAB_0004350e:
|
|
local_20[2] = uVar11 + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*local_20 + 0x24))();
|
|
}
|
|
LAB_00043512:
|
|
local_18._0_2_ = (ushort)(byte)local_18;
|
|
cVar9 = '\0';
|
|
}
|
|
break;
|
|
case (locale)0x1:
|
|
if (local_18._1_1_ == '\0') {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
iVar7 = (**(code **)(*piVar3 + 8))(piVar3,1,local_1c);
|
|
if (iVar7 != 0) {
|
|
uVar11 = local_20[2];
|
|
if (uVar11 < (uint)local_20[3]) goto LAB_0004350e;
|
|
(**(code **)(*local_20 + 0x24))();
|
|
goto LAB_00043512;
|
|
}
|
|
LAB_000437c4:
|
|
*param_10 = 4;
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
param_1[2] = local_18;
|
|
goto LAB_00043760;
|
|
case (locale)0x2:
|
|
if (param_8 == 1) {
|
|
(**(code **)(*piVar2 + 0x14))(local_148);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0x14))(local_148);
|
|
}
|
|
FUN_00043930(&local_158,local_20,local_1c,local_18,param_5,local_19c,param_7,local_104,
|
|
local_108);
|
|
if (((uVar4 & 0x200) != 0) && (local_14c == '\0')) {
|
|
*param_10 = 4;
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,(short)local_150);
|
|
local_1c = local_154;
|
|
local_20 = local_158;
|
|
if ((local_104 != local_148) && (local_104 != (int *)0x0)) {
|
|
if ((uint)(local_148[0] - (int)local_104) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_104,local_148[0] - (int)local_104);
|
|
}
|
|
else {
|
|
operator_delete(local_104);
|
|
}
|
|
}
|
|
break;
|
|
case (locale)0x3:
|
|
if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) {
|
|
if ((int *)param_5[2] < (int *)param_5[3]) {
|
|
local_19c = *(int *)param_5[2];
|
|
}
|
|
else {
|
|
local_19c = (**(code **)(*param_5 + 0x20))(param_5);
|
|
}
|
|
param_7 = param_7 & 0xffff0000 | (uint)(local_19c == -1) | 0x100;
|
|
}
|
|
if ((local_18 & 0xff) == (param_7 & 0xff)) {
|
|
if (local_74 != local_78) {
|
|
if (local_2c != local_30) goto LAB_000437c4;
|
|
*param_12 = '\0';
|
|
}
|
|
}
|
|
else if (local_74 == local_78) {
|
|
if (local_2c != local_30) {
|
|
if (local_18._1_1_ == '\0') {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if (local_1c == *local_2c) {
|
|
uVar11 = local_20[2];
|
|
if (uVar11 < (uint)local_20[3]) {
|
|
LAB_000434ea:
|
|
local_20[2] = uVar11 + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*local_20 + 0x24))();
|
|
}
|
|
LAB_000434f6:
|
|
local_18._0_2_ = (ushort)(byte)local_18;
|
|
*param_12 = '\0';
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (local_18._1_1_ == '\0') {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if (local_1c == *local_74) {
|
|
if ((uint)local_20[2] < (uint)local_20[3]) {
|
|
local_20[2] = local_20[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*local_20 + 0x24))();
|
|
}
|
|
local_18._0_2_ = (ushort)(byte)local_18;
|
|
}
|
|
else if (local_2c != local_30) {
|
|
if (local_1c == *local_2c) {
|
|
uVar11 = local_20[2];
|
|
if (uVar11 < (uint)local_20[3]) goto LAB_000434ea;
|
|
(**(code **)(*local_20 + 0x24))();
|
|
goto LAB_000434f6;
|
|
}
|
|
goto LAB_000437c4;
|
|
}
|
|
}
|
|
break;
|
|
case (locale)0x4:
|
|
if (param_8 == 1) {
|
|
uVar8 = (**(code **)(*piVar2 + 8))();
|
|
uVar5 = (**(code **)(*piVar2 + 0x20))();
|
|
(**(code **)(*piVar2 + 0x10))(local_170);
|
|
}
|
|
else {
|
|
uVar8 = (**(code **)(*piVar1 + 8))();
|
|
uVar5 = (**(code **)(*piVar1 + 0x20))();
|
|
(**(code **)(*piVar1 + 0x10))(local_170);
|
|
}
|
|
local_148[0] = CONCAT31(local_148[0]._1_3_,1);
|
|
uVar6 = local_1d4;
|
|
if (local_15c != local_160) {
|
|
if (param_8 == 1) {
|
|
uVar6 = (**(code **)(*piVar2 + 0xc))();
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar1 + 0xc))();
|
|
}
|
|
}
|
|
iVar7 = FUN_00043a78(&local_20,param_5,local_19c,param_7,local_100,piVar3,uVar8,uVar5,uVar6,
|
|
local_170,local_148);
|
|
if ((char)local_148[0] == '\0') {
|
|
*param_10 = *param_10 | 4;
|
|
}
|
|
iVar12 = 5;
|
|
if (iVar7 == 0) {
|
|
*param_10 = 4;
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
param_1[2] = local_18;
|
|
iVar12 = local_1c4;
|
|
}
|
|
if ((local_15c != local_170) && (local_15c != (int *)0x0)) {
|
|
if ((uint)(local_170[0] - (int)local_15c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_15c,local_170[0] - (int)local_15c);
|
|
}
|
|
else {
|
|
operator_delete(local_15c);
|
|
}
|
|
}
|
|
if (iVar12 != 5) goto LAB_00043760;
|
|
}
|
|
iVar10 = iVar10 + 1;
|
|
} while (iVar10 < 3);
|
|
if (*param_12 == '\0') {
|
|
if (1 < (uint)((int)local_30 - (int)local_2c >> 2)) {
|
|
FUN_00043930(&local_190,local_20,local_1c,local_18,param_5,local_19c,param_7,local_2c + 1,
|
|
local_30);
|
|
local_18 = CONCAT22(local_18._2_2_,local_188);
|
|
local_1c = local_18c;
|
|
local_20 = local_190;
|
|
if (local_184 == '\0') {
|
|
*param_10 = *param_10 | 4;
|
|
}
|
|
}
|
|
if (-1 < (int)((uint)(byte)*param_10 << 0x1d)) {
|
|
uVar8 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2d);
|
|
FUN_00044304(param_11,1,uVar8);
|
|
FUN_000441a0(param_11,local_bc,local_c0);
|
|
}
|
|
}
|
|
else {
|
|
if (1 < (uint)((int)local_78 - (int)local_74 >> 2)) {
|
|
FUN_00043930(&local_180,local_20,local_1c,local_18,param_5,local_19c,param_7,local_74 + 1,
|
|
local_78);
|
|
local_18 = CONCAT22(local_18._2_2_,local_178);
|
|
local_1c = local_17c;
|
|
local_20 = local_180;
|
|
if (local_174 == '\0') {
|
|
*param_10 = *param_10 | 4;
|
|
}
|
|
}
|
|
if ((local_100 != param_11) && ((*param_10 & 4) == 0)) {
|
|
FUN_0004413c(param_11,local_bc,local_c0);
|
|
}
|
|
}
|
|
if ((local_20 != (int *)0x0) && (local_18._1_1_ == '\0')) {
|
|
if ((int *)local_20[2] < (int *)local_20[3]) {
|
|
local_1c = *(int *)local_20[2];
|
|
}
|
|
else {
|
|
local_1c = (**(code **)(*local_20 + 0x20))();
|
|
}
|
|
local_18 = CONCAT22(local_18._2_2_,0x100);
|
|
local_18 = CONCAT31(local_18._1_3_,local_1c == -1);
|
|
}
|
|
if (((param_7 & 0xff00) == 0) && (param_5 != (int *)0x0)) {
|
|
if ((int *)param_5[2] < (int *)param_5[3]) {
|
|
iVar10 = *(int *)param_5[2];
|
|
}
|
|
else {
|
|
iVar10 = (**(code **)(*param_5 + 0x20))();
|
|
}
|
|
param_7 = (uint)(iVar10 == -1);
|
|
}
|
|
if ((local_18 & 0xff) == (param_7 & 0xff)) {
|
|
*param_10 = *param_10 | 2;
|
|
}
|
|
*param_1 = local_20;
|
|
param_1[1] = local_1c;
|
|
param_1[2] = local_18;
|
|
LAB_00043760:
|
|
if ((local_bc != local_100) && (local_bc != (int *)0x0)) {
|
|
if ((uint)(local_100[0] - (int)local_bc) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_bc,local_100[0] - (int)local_bc);
|
|
}
|
|
else {
|
|
operator_delete(local_bc);
|
|
}
|
|
}
|
|
if ((local_74 != local_b8) && (local_74 != (int *)0x0)) {
|
|
if ((uint)(local_b8[0] - (int)local_74) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_74,local_b8[0] - (int)local_74);
|
|
}
|
|
else {
|
|
operator_delete(local_74);
|
|
}
|
|
}
|
|
if ((local_2c != local_70) && (local_2c != (int *)0x0)) {
|
|
if ((uint)(local_70[0] - (int)local_2c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_2c,local_70[0] - (int)local_2c);
|
|
}
|
|
else {
|
|
operator_delete(local_2c);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_24);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000438b2 @ 000438b2
|
|
|
|
undefined4 FUN_000438b2(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined1 auStack_30 [4];
|
|
uint local_2c [4];
|
|
uint *local_1c;
|
|
uint *local_18;
|
|
|
|
local_1c = local_2c;
|
|
local_2c[0] = local_2c[0] & 0xffffff00;
|
|
local_18 = local_1c;
|
|
uVar1 = FUN_0004461c(param_1,param_2,10,param_3,0,0,0,local_1c,auStack_30);
|
|
if ((local_18 != local_2c) && (local_18 != (uint *)0x0)) {
|
|
if (local_2c[0] - (int)local_18 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00043930 @ 00043930
|
|
|
|
void FUN_00043930(undefined4 *param_1,int *param_2,int param_3,uint param_4,int *param_5,
|
|
undefined4 param_6,uint param_7,int *param_8,int *param_9)
|
|
|
|
{
|
|
int iVar1;
|
|
bool bVar2;
|
|
|
|
while( true ) {
|
|
if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
param_3 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
param_3 = (**(code **)(*param_2 + 0x20))();
|
|
}
|
|
param_4 = param_4 & 0xffff0000 | (uint)(param_3 == -1) | 0x100;
|
|
}
|
|
if ((param_5 != (int *)0x0) && ((param_7 & 0xff00) == 0)) {
|
|
if ((int *)param_5[2] < (int *)param_5[3]) {
|
|
iVar1 = *(int *)param_5[2];
|
|
}
|
|
else {
|
|
iVar1 = (**(code **)(*param_5 + 0x20))(param_5);
|
|
}
|
|
param_7 = iVar1 == -1 | 0x100;
|
|
}
|
|
bVar2 = param_9 == param_8;
|
|
if ((param_9 == param_8) || ((param_4 & 0xff) == (param_7 & 0xff))) break;
|
|
if ((param_4 & 0xff00) == 0) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
param_3 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
param_3 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_4 = param_4 & 0xffff0000 | (uint)(param_3 == -1) | 0x100;
|
|
}
|
|
bVar2 = false;
|
|
if (param_3 != *param_8) break;
|
|
if ((uint)param_2[2] < (uint)param_2[3]) {
|
|
param_2[2] = param_2[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*param_2 + 0x24))(param_2);
|
|
}
|
|
param_4 = param_4 & 0xffff00ff;
|
|
param_8 = param_8 + 1;
|
|
}
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
param_1[2] = param_4;
|
|
*(bool *)(param_1 + 3) = bVar2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00043a78 @ 00043a78
|
|
|
|
undefined4
|
|
FUN_00043a78(int *param_1,int *param_2,undefined4 param_3,uint param_4,int *param_5,int *param_6,
|
|
int param_7,int param_8,int param_9,int param_10,char *param_11)
|
|
|
|
{
|
|
char cVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
char *pcVar4;
|
|
undefined4 *puVar5;
|
|
uint uVar6;
|
|
char *pcVar7;
|
|
uint uVar8;
|
|
char *pcVar9;
|
|
uint uVar10;
|
|
char *pcVar11;
|
|
char *local_c8;
|
|
int local_c4;
|
|
uint local_a8;
|
|
char local_94 [128];
|
|
|
|
piVar2 = (int *)*param_1;
|
|
if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 9) == '\0')) {
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
if (((param_4 << 0x10) >> 0x18 == 0) && (param_2 != (int *)0x0)) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
iVar3 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_4 = iVar3 == -1 | 0x100;
|
|
}
|
|
if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) {
|
|
return 0;
|
|
}
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
iVar3 = (**(code **)(*param_6 + 8))(param_6,0x40,iVar3);
|
|
if (iVar3 != 1) {
|
|
return 0;
|
|
}
|
|
local_c8 = (char *)0x0;
|
|
if (*(int *)(param_10 + 0x14) != *(int *)(param_10 + 0x10)) {
|
|
local_c8 = local_94;
|
|
}
|
|
local_c4 = param_8;
|
|
do {
|
|
cVar1 = '\0';
|
|
while( true ) {
|
|
piVar2 = (int *)*param_1;
|
|
if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 9) == '\0')) {
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
local_a8 = 0x3ffffffe;
|
|
if (((param_4 & 0xff00) == 0) && (param_2 != (int *)0x0)) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
iVar3 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_4 = iVar3 == -1 | 0x100;
|
|
}
|
|
pcVar4 = local_c8;
|
|
if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) goto LAB_00043d7e;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
iVar3 = (**(code **)(*param_6 + 8))(param_6,0x40,iVar3);
|
|
if (iVar3 != 1) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
piVar2 = (int *)*param_1;
|
|
if ((uint)piVar2[2] < (uint)piVar2[3]) {
|
|
piVar2[2] = piVar2[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
if ((int *)param_5[0x11] == param_5) {
|
|
piVar2 = (int *)param_5[0x10];
|
|
if ((int)piVar2 - (int)param_5 >> 2 == 0xf) goto LAB_00043cde;
|
|
}
|
|
else {
|
|
piVar2 = (int *)param_5[0x10];
|
|
if (*param_5 - (int)piVar2 >> 2 == 1) {
|
|
LAB_00043cde:
|
|
uVar6 = (int)piVar2 - param_5[0x11] >> 2;
|
|
uVar10 = uVar6;
|
|
if (uVar6 < 2) {
|
|
uVar10 = 1;
|
|
}
|
|
uVar8 = uVar6 + uVar10 + 1;
|
|
uVar10 = 0x3ffffffe;
|
|
if (uVar6 <= uVar8) {
|
|
uVar10 = uVar8;
|
|
}
|
|
uVar6 = 0x3ffffffe;
|
|
if (uVar8 < 0x3fffffff) {
|
|
uVar6 = uVar10;
|
|
}
|
|
FUN_00044094(param_5,uVar6);
|
|
piVar2 = (int *)param_5[0x10];
|
|
}
|
|
}
|
|
*piVar2 = iVar3;
|
|
piVar2[1] = 0;
|
|
param_5[0x10] = (int)(piVar2 + 1);
|
|
}
|
|
pcVar4 = (char *)0x0;
|
|
if (local_c8 == (char *)0x0) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
pcVar4 = local_c8;
|
|
if (iVar3 != param_9) break;
|
|
*local_c8 = cVar1;
|
|
local_c8 = local_c8 + 1;
|
|
piVar2 = (int *)*param_1;
|
|
if ((uint)piVar2[2] < (uint)piVar2[3]) {
|
|
piVar2[2] = piVar2[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
} while( true );
|
|
LAB_00043d7e:
|
|
pcVar11 = *(char **)(param_10 + 0x10);
|
|
pcVar9 = *(char **)(param_10 + 0x14);
|
|
if (pcVar9 == pcVar11) {
|
|
*param_11 = '\x01';
|
|
LAB_00043e5c:
|
|
piVar2 = (int *)*param_1;
|
|
if ((uint)piVar2[2] < (uint)piVar2[3]) {
|
|
piVar2[2] = piVar2[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x24))();
|
|
}
|
|
cVar1 = '\0';
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
while( true ) {
|
|
piVar2 = (int *)*param_1;
|
|
if ((piVar2 != (int *)0x0) && (cVar1 == '\0')) {
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
if (((param_4 & 0xff00) == 0) && (param_2 != (int *)0x0)) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
iVar3 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_4 = iVar3 == -1 | 0x100;
|
|
}
|
|
if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
iVar3 = (**(code **)(*param_6 + 8))(param_6,0x40,iVar3);
|
|
if (iVar3 != 1) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
piVar2 = (int *)*param_1;
|
|
if ((uint)piVar2[2] < (uint)piVar2[3]) {
|
|
piVar2[2] = piVar2[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
if ((int *)param_5[0x11] == param_5) {
|
|
piVar2 = (int *)param_5[0x10];
|
|
if ((int)piVar2 - (int)param_5 >> 2 == 0xf) goto LAB_00044030;
|
|
}
|
|
else {
|
|
piVar2 = (int *)param_5[0x10];
|
|
if (*param_5 - (int)piVar2 >> 2 == 1) {
|
|
LAB_00044030:
|
|
uVar6 = (int)piVar2 - param_5[0x11] >> 2;
|
|
uVar10 = uVar6;
|
|
if (uVar6 < 2) {
|
|
uVar10 = 1;
|
|
}
|
|
uVar8 = uVar6 + uVar10 + 1;
|
|
uVar10 = local_a8;
|
|
if (uVar6 <= uVar8) {
|
|
uVar10 = uVar8;
|
|
}
|
|
uVar6 = local_a8;
|
|
if (uVar8 < 0x3fffffff) {
|
|
uVar6 = uVar10;
|
|
}
|
|
FUN_00044094(param_5,uVar6);
|
|
piVar2 = (int *)param_5[0x10];
|
|
}
|
|
}
|
|
*piVar2 = iVar3;
|
|
piVar2[1] = 0;
|
|
param_5[0x10] = (int)(piVar2 + 1);
|
|
local_c4 = local_c4 + -1;
|
|
cVar1 = *(char *)((int)param_1 + 9);
|
|
}
|
|
*param_11 = local_c4 == 0 && *param_11 != '\0';
|
|
}
|
|
else {
|
|
pcVar7 = local_94;
|
|
if (pcVar4 != pcVar7) {
|
|
*pcVar4 = cVar1;
|
|
pcVar7 = pcVar4 + 1;
|
|
pcVar11 = *(char **)(param_10 + 0x10);
|
|
pcVar9 = *(char **)(param_10 + 0x14);
|
|
}
|
|
cVar1 = std::priv::__valid_grouping(local_94,pcVar7,pcVar9,pcVar11);
|
|
*param_11 = cVar1;
|
|
piVar2 = (int *)*param_1;
|
|
if ((piVar2 != (int *)0x0) && (*(char *)((int)param_1 + 9) == '\0')) {
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
if (((param_4 & 0xff00) == 0) && (param_2 != (int *)0x0)) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
iVar3 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_4 = iVar3 == -1 | 0x100;
|
|
}
|
|
if ((uint)*(byte *)(param_1 + 2) != (param_4 & 0xff)) {
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar2 = (int *)*param_1;
|
|
if ((int *)piVar2[2] < (int *)piVar2[3]) {
|
|
iVar3 = *(int *)piVar2[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar2 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
if (iVar3 == param_7) goto LAB_00043e5c;
|
|
}
|
|
if (param_8 != 0) {
|
|
do {
|
|
if ((int *)param_5[0x11] == param_5) {
|
|
puVar5 = (undefined4 *)param_5[0x10];
|
|
if ((int)puVar5 - (int)param_5 >> 2 == 0xf) goto LAB_00043ea2;
|
|
}
|
|
else {
|
|
puVar5 = (undefined4 *)param_5[0x10];
|
|
if (*param_5 - (int)puVar5 >> 2 == 1) {
|
|
LAB_00043ea2:
|
|
uVar6 = (int)puVar5 - param_5[0x11] >> 2;
|
|
uVar10 = uVar6;
|
|
if (uVar6 < 2) {
|
|
uVar10 = 1;
|
|
}
|
|
uVar8 = uVar6 + uVar10 + 1;
|
|
uVar10 = local_a8;
|
|
if (uVar6 <= uVar8) {
|
|
uVar10 = uVar8;
|
|
}
|
|
uVar6 = local_a8;
|
|
if (uVar8 < 0x3fffffff) {
|
|
uVar6 = uVar10;
|
|
}
|
|
FUN_00044094(param_5,uVar6);
|
|
puVar5 = (undefined4 *)param_5[0x10];
|
|
}
|
|
}
|
|
*puVar5 = 0x30;
|
|
puVar5[1] = 0;
|
|
param_5[0x10] = (int)(puVar5 + 1);
|
|
param_8 = param_8 + -1;
|
|
} while (param_8 != 0);
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00044094 @ 00044094
|
|
|
|
void FUN_00044094(int *param_1,uint param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
int *piVar6;
|
|
int *piVar7;
|
|
uint local_1c;
|
|
uint local_18;
|
|
|
|
if (param_2 >> 0x1e == 0) {
|
|
piVar6 = (int *)0x0;
|
|
if (param_2 == 0) {
|
|
local_1c = 0;
|
|
}
|
|
else {
|
|
param_2 = param_2 << 2;
|
|
local_18 = param_2;
|
|
if (param_2 < 0x81) {
|
|
piVar6 = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
param_2 = local_18;
|
|
}
|
|
else {
|
|
piVar6 = (int *)operator_new(param_2);
|
|
}
|
|
local_1c = param_2 >> 2;
|
|
}
|
|
piVar1 = (int *)param_1[0x11];
|
|
piVar7 = piVar6;
|
|
if (0 < param_1[0x10] - (int)piVar1) {
|
|
iVar3 = ((uint)(param_1[0x10] - (int)piVar1) >> 2) + 1;
|
|
piVar4 = piVar1;
|
|
do {
|
|
iVar5 = *piVar4;
|
|
piVar4 = piVar4 + 1;
|
|
*piVar7 = iVar5;
|
|
piVar7 = piVar7 + 1;
|
|
iVar3 = iVar3 + -1;
|
|
} while (1 < iVar3);
|
|
}
|
|
*piVar7 = 0;
|
|
if ((piVar1 != param_1) && (piVar1 != (int *)0x0)) {
|
|
if ((uint)(*param_1 - (int)piVar1) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar1,*param_1 - (int)piVar1);
|
|
}
|
|
else {
|
|
operator_delete(piVar1);
|
|
}
|
|
}
|
|
param_1[0x10] = (int)piVar7;
|
|
param_1[0x11] = (int)piVar6;
|
|
*param_1 = (int)(piVar6 + local_1c);
|
|
return;
|
|
}
|
|
FUN_00030824(4);
|
|
uVar2 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004413c @ 0004413c
|
|
|
|
int FUN_0004413c(int param_1,wchar_t *param_2,int param_3)
|
|
|
|
{
|
|
wchar_t *pwVar1;
|
|
size_t __n;
|
|
uint __n_00;
|
|
wchar_t *__s1;
|
|
|
|
__n_00 = param_3 - (int)param_2 >> 2;
|
|
pwVar1 = *(wchar_t **)(param_1 + 0x44);
|
|
__n = *(int *)(param_1 + 0x40) - (int)pwVar1 >> 2;
|
|
if (__n < __n_00) {
|
|
wmemmove(pwVar1,param_2,__n);
|
|
FUN_000441a0(param_1,(int)param_2 + (*(int *)(param_1 + 0x40) - *(int *)(param_1 + 0x44)),
|
|
param_3);
|
|
}
|
|
else {
|
|
wmemmove(pwVar1,param_2,__n_00);
|
|
pwVar1 = *(wchar_t **)(param_1 + 0x40);
|
|
__s1 = (wchar_t *)(*(int *)(param_1 + 0x44) + __n_00 * 4);
|
|
if (__s1 != pwVar1) {
|
|
wmemmove(__s1,pwVar1,1);
|
|
*(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) - ((int)pwVar1 - (int)__s1);
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000441a0 @ 000441a0
|
|
|
|
int * FUN_000441a0(int *param_1,int *param_2,int *param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int *piVar2;
|
|
undefined4 uVar3;
|
|
int iVar4;
|
|
int *piVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
int *piVar8;
|
|
uint uVar9;
|
|
int iVar10;
|
|
int *piVar11;
|
|
uint local_24;
|
|
uint local_18;
|
|
|
|
if (param_2 != param_3) {
|
|
uVar1 = (int)param_3 - (int)param_2;
|
|
uVar6 = (int)uVar1 >> 2;
|
|
piVar2 = (int *)param_1[0x11];
|
|
if (piVar2 == param_1) {
|
|
piVar8 = (int *)param_1[0x10];
|
|
uVar9 = 0x10 - ((int)piVar8 - (int)param_1 >> 2);
|
|
}
|
|
else {
|
|
piVar8 = (int *)param_1[0x10];
|
|
uVar9 = *param_1 - (int)piVar8 >> 2;
|
|
}
|
|
if (uVar6 < uVar9) {
|
|
piVar2 = param_2 + 1;
|
|
if (0 < (int)param_3 - (int)piVar2) {
|
|
iVar10 = ((uint)((int)param_3 - (int)piVar2) >> 2) + 1;
|
|
piVar5 = piVar8;
|
|
do {
|
|
piVar5 = piVar5 + 1;
|
|
iVar4 = *piVar2;
|
|
piVar2 = piVar2 + 1;
|
|
*piVar5 = iVar4;
|
|
iVar10 = iVar10 + -1;
|
|
} while (1 < iVar10);
|
|
}
|
|
piVar8[uVar6] = 0;
|
|
*piVar8 = *param_2;
|
|
param_1[0x10] = (int)(piVar8 + uVar6);
|
|
}
|
|
else {
|
|
uVar9 = (int)piVar8 - (int)piVar2 >> 2;
|
|
if (0x3ffffffe - uVar9 < uVar6) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar7 = uVar9;
|
|
if (uVar9 <= uVar6) {
|
|
uVar7 = uVar6;
|
|
}
|
|
uVar7 = uVar9 + uVar7 + 1;
|
|
uVar6 = 0x3ffffffe;
|
|
if (uVar9 <= uVar7) {
|
|
uVar6 = uVar7;
|
|
}
|
|
local_24 = 0x3ffffffe;
|
|
if (uVar7 < 0x3fffffff) {
|
|
local_24 = uVar6;
|
|
}
|
|
if (0x3fffffff < local_24) {
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
piVar5 = (int *)0x0;
|
|
if (local_24 == 0) {
|
|
local_24 = 0;
|
|
}
|
|
else {
|
|
local_24 = local_24 << 2;
|
|
local_18 = local_24;
|
|
if (local_24 < 0x81) {
|
|
piVar5 = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
local_24 = local_18;
|
|
}
|
|
else {
|
|
piVar5 = (int *)operator_new(local_24);
|
|
}
|
|
piVar8 = (int *)param_1[0x10];
|
|
piVar2 = (int *)param_1[0x11];
|
|
local_24 = local_24 >> 2;
|
|
}
|
|
piVar11 = piVar5;
|
|
if (0 < (int)piVar8 - (int)piVar2) {
|
|
iVar10 = ((uint)((int)piVar8 - (int)piVar2) >> 2) + 1;
|
|
piVar8 = piVar2;
|
|
do {
|
|
iVar4 = *piVar8;
|
|
piVar8 = piVar8 + 1;
|
|
*piVar11 = iVar4;
|
|
piVar11 = piVar11 + 1;
|
|
iVar10 = iVar10 + -1;
|
|
} while (1 < iVar10);
|
|
}
|
|
if (0 < (int)uVar1) {
|
|
iVar10 = (uVar1 >> 2) + 1;
|
|
do {
|
|
iVar4 = *param_2;
|
|
param_2 = param_2 + 1;
|
|
*piVar11 = iVar4;
|
|
piVar11 = piVar11 + 1;
|
|
iVar10 = iVar10 + -1;
|
|
} while (1 < iVar10);
|
|
}
|
|
*piVar11 = 0;
|
|
if ((piVar2 != param_1) && (piVar2 != (int *)0x0)) {
|
|
if ((uint)(*param_1 - (int)piVar2) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar2,*param_1 - (int)piVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar2);
|
|
}
|
|
}
|
|
param_1[0x10] = (int)piVar11;
|
|
param_1[0x11] = (int)piVar5;
|
|
*param_1 = (int)(piVar5 + local_24);
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00044304 @ 00044304
|
|
|
|
wchar_t * FUN_00044304(wchar_t *param_1,uint param_2,wchar_t param_3)
|
|
|
|
{
|
|
wchar_t *pwVar1;
|
|
uint uVar2;
|
|
uint __n;
|
|
wchar_t *__s1;
|
|
undefined1 auStack_60 [4];
|
|
int local_5c [17];
|
|
int *local_18;
|
|
|
|
pwVar1 = (wchar_t *)param_1[0x11];
|
|
__n = param_1[0x10] - (int)pwVar1 >> 2;
|
|
if (__n < param_2) {
|
|
uVar2 = 0xf;
|
|
if (param_1 != pwVar1) {
|
|
uVar2 = (*param_1 - (int)pwVar1 >> 2) - 1;
|
|
}
|
|
if (param_2 < uVar2) {
|
|
wmemset(pwVar1,param_3,__n);
|
|
FUN_000443dc(param_1,param_2 - (param_1[0x10] - param_1[0x11] >> 2),param_3);
|
|
}
|
|
else {
|
|
FUN_00044474(local_5c,param_2,param_3,auStack_60);
|
|
FUN_00044510(param_1,local_5c);
|
|
if ((local_18 != local_5c) && (local_18 != (int *)0x0)) {
|
|
if ((uint)(local_5c[0] - (int)local_18) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_18,local_5c[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
wmemset(pwVar1,param_3,param_2);
|
|
pwVar1 = (wchar_t *)param_1[0x10];
|
|
__s1 = (wchar_t *)(param_1[0x11] + param_2 * 4);
|
|
if (__s1 != pwVar1) {
|
|
wmemmove(__s1,pwVar1,1);
|
|
param_1[0x10] = param_1[0x10] - ((int)pwVar1 - (int)__s1);
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000443dc @ 000443dc
|
|
|
|
int * FUN_000443dc(int *param_1,uint param_2,undefined4 param_3)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
undefined4 *puVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
|
|
if (param_2 != 0) {
|
|
puVar2 = (undefined4 *)param_1[0x10];
|
|
uVar3 = (int)puVar2 - param_1[0x11] >> 2;
|
|
if (0x3ffffffe - uVar3 < param_2) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
if (param_1 == (int *)param_1[0x11]) {
|
|
uVar4 = 0x10 - ((int)puVar2 - (int)param_1 >> 2);
|
|
}
|
|
else {
|
|
uVar4 = *param_1 - (int)puVar2 >> 2;
|
|
}
|
|
if (uVar4 <= param_2) {
|
|
uVar4 = uVar3;
|
|
if (uVar3 <= param_2) {
|
|
uVar4 = param_2;
|
|
}
|
|
uVar5 = uVar3 + uVar4 + 1;
|
|
uVar4 = 0x3ffffffe;
|
|
if (uVar3 <= uVar5) {
|
|
uVar4 = uVar5;
|
|
}
|
|
uVar3 = 0x3ffffffe;
|
|
if (uVar5 < 0x3fffffff) {
|
|
uVar3 = uVar4;
|
|
}
|
|
FUN_00044094(param_1,uVar3);
|
|
puVar2 = (undefined4 *)param_1[0x10];
|
|
}
|
|
uVar3 = param_2;
|
|
puVar1 = puVar2;
|
|
if (0 < (int)(param_2 * 4 + -4)) {
|
|
do {
|
|
puVar1[1] = param_3;
|
|
uVar3 = uVar3 - 1;
|
|
puVar1 = puVar1 + 1;
|
|
} while (1 < (int)uVar3);
|
|
}
|
|
puVar2[param_2] = 0;
|
|
*puVar2 = param_3;
|
|
param_1[0x10] = (int)(puVar2 + param_2);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00044474 @ 00044474
|
|
|
|
int * FUN_00044474(int *param_1,uint param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int *piVar2;
|
|
undefined4 uVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
uint local_18;
|
|
|
|
param_1[0x10] = (int)param_1;
|
|
param_1[0x11] = (int)param_1;
|
|
uVar5 = param_2 + 1;
|
|
if (0x3ffffffe < param_2) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
piVar2 = param_1;
|
|
if (0x10 < uVar5) {
|
|
if (0x3fffffff < uVar5) {
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
uVar1 = uVar5 * 4;
|
|
local_18 = uVar1;
|
|
if (uVar1 < 0x81) {
|
|
piVar2 = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
}
|
|
else {
|
|
piVar2 = (int *)operator_new(uVar1);
|
|
local_18 = uVar1;
|
|
}
|
|
param_1[0x10] = (int)piVar2;
|
|
param_1[0x11] = (int)piVar2;
|
|
*param_1 = (int)piVar2 + (local_18 & 0xfffffffc);
|
|
}
|
|
piVar4 = piVar2 + param_2;
|
|
if (0 < (int)(param_2 * 4)) {
|
|
do {
|
|
*piVar2 = param_3;
|
|
piVar2 = piVar2 + 1;
|
|
uVar5 = uVar5 - 1;
|
|
} while (1 < (int)uVar5);
|
|
}
|
|
param_1[0x10] = (int)piVar4;
|
|
*piVar4 = 0;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00044510 @ 00044510
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_00044510(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 *puVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
undefined4 uVar5;
|
|
int iVar6;
|
|
undefined4 uVar7;
|
|
undefined4 uVar8;
|
|
undefined4 uVar9;
|
|
undefined4 uVar10;
|
|
undefined4 uVar11;
|
|
undefined4 uVar12;
|
|
undefined4 uVar13;
|
|
undefined4 *puVar14;
|
|
undefined4 uVar15;
|
|
undefined4 uVar16;
|
|
undefined4 uVar17;
|
|
undefined4 uVar18;
|
|
undefined4 uVar19;
|
|
undefined4 uVar20;
|
|
undefined4 uVar21;
|
|
undefined4 uVar22;
|
|
|
|
puVar2 = (undefined4 *)param_2[0x11];
|
|
puVar14 = (undefined4 *)param_1[0x11];
|
|
if (puVar14 == param_1) {
|
|
if (puVar2 != param_2) {
|
|
FUN_00044510();
|
|
return;
|
|
}
|
|
uVar1 = *param_1;
|
|
uVar21 = param_1[1];
|
|
uVar9 = param_1[2];
|
|
uVar16 = param_1[3];
|
|
uVar7 = param_1[4];
|
|
uVar3 = param_1[5];
|
|
uVar10 = param_1[6];
|
|
uVar17 = param_1[7];
|
|
uVar8 = param_1[8];
|
|
uVar4 = param_1[9];
|
|
uVar11 = param_1[10];
|
|
uVar18 = param_1[0xb];
|
|
uVar15 = param_1[0xc];
|
|
uVar5 = param_1[0xd];
|
|
uVar12 = param_1[0xe];
|
|
uVar19 = param_1[0xf];
|
|
uVar13 = param_2[1];
|
|
uVar20 = param_2[2];
|
|
uVar22 = param_2[3];
|
|
*param_1 = *param_2;
|
|
param_1[1] = uVar13;
|
|
param_1[2] = uVar20;
|
|
param_1[3] = uVar22;
|
|
uVar13 = param_2[5];
|
|
uVar20 = param_2[6];
|
|
uVar22 = param_2[7];
|
|
param_1[4] = param_2[4];
|
|
param_1[5] = uVar13;
|
|
param_1[6] = uVar20;
|
|
param_1[7] = uVar22;
|
|
uVar13 = param_2[9];
|
|
uVar20 = param_2[10];
|
|
uVar22 = param_2[0xb];
|
|
param_1[8] = param_2[8];
|
|
param_1[9] = uVar13;
|
|
param_1[10] = uVar20;
|
|
param_1[0xb] = uVar22;
|
|
uVar13 = param_2[0xd];
|
|
uVar20 = param_2[0xe];
|
|
uVar22 = param_2[0xf];
|
|
param_1[0xc] = param_2[0xc];
|
|
param_1[0xd] = uVar13;
|
|
param_1[0xe] = uVar20;
|
|
param_1[0xf] = uVar22;
|
|
*param_2 = uVar1;
|
|
param_2[1] = uVar21;
|
|
param_2[2] = uVar9;
|
|
param_2[3] = uVar16;
|
|
param_2[4] = uVar7;
|
|
param_2[5] = uVar3;
|
|
param_2[6] = uVar10;
|
|
param_2[7] = uVar17;
|
|
param_2[8] = uVar8;
|
|
param_2[9] = uVar4;
|
|
param_2[10] = uVar11;
|
|
param_2[0xb] = uVar18;
|
|
param_2[0xc] = uVar15;
|
|
param_2[0xd] = uVar5;
|
|
param_2[0xe] = uVar12;
|
|
param_2[0xf] = uVar19;
|
|
iVar6 = param_1[0x10];
|
|
param_1[0x10] = param_1[0x11] + (param_2[0x10] - param_2[0x11]);
|
|
param_2[0x10] = (int)param_2 + (iVar6 - param_1[0x11]);
|
|
param_1[0x11] = puVar14;
|
|
param_2[0x11] = puVar2;
|
|
return;
|
|
}
|
|
if (puVar2 != param_2) {
|
|
uVar1 = *param_1;
|
|
*param_1 = *param_2;
|
|
*param_2 = uVar1;
|
|
uVar1 = param_1[0x11];
|
|
param_1[0x11] = param_2[0x11];
|
|
param_2[0x11] = uVar1;
|
|
uVar1 = param_1[0x10];
|
|
param_1[0x10] = param_2[0x10];
|
|
param_2[0x10] = uVar1;
|
|
return;
|
|
}
|
|
uVar1 = param_1[0x10];
|
|
uVar7 = *param_1;
|
|
uVar8 = param_2[1];
|
|
uVar15 = param_2[2];
|
|
uVar21 = param_2[3];
|
|
*param_1 = *param_2;
|
|
param_1[1] = uVar8;
|
|
param_1[2] = uVar15;
|
|
param_1[3] = uVar21;
|
|
uVar8 = param_2[5];
|
|
uVar15 = param_2[6];
|
|
uVar21 = param_2[7];
|
|
param_1[4] = param_2[4];
|
|
param_1[5] = uVar8;
|
|
param_1[6] = uVar15;
|
|
param_1[7] = uVar21;
|
|
uVar8 = param_2[9];
|
|
uVar15 = param_2[10];
|
|
uVar21 = param_2[0xb];
|
|
param_1[8] = param_2[8];
|
|
param_1[9] = uVar8;
|
|
param_1[10] = uVar15;
|
|
param_1[0xb] = uVar21;
|
|
uVar8 = param_2[0xd];
|
|
uVar15 = param_2[0xe];
|
|
uVar21 = param_2[0xf];
|
|
param_1[0xc] = param_2[0xc];
|
|
param_1[0xd] = uVar8;
|
|
param_1[0xe] = uVar15;
|
|
param_1[0xf] = uVar21;
|
|
param_1[0x11] = param_1;
|
|
param_1[0x10] = (int)param_1 + (param_2[0x10] - (int)param_2);
|
|
*puVar2 = uVar7;
|
|
param_2[0x10] = uVar1;
|
|
param_2[0x11] = puVar14;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004461c @ 0004461c
|
|
|
|
undefined4
|
|
FUN_0004461c(int *param_1,undefined4 *param_2,int param_3,undefined4 *param_4,int param_5,
|
|
int param_6,uint param_7,int param_8)
|
|
|
|
{
|
|
uint *puVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
undefined4 uVar4;
|
|
char cVar5;
|
|
char *pcVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
int iVar12;
|
|
undefined4 uVar13;
|
|
undefined8 uVar14;
|
|
undefined8 uVar15;
|
|
undefined8 uVar16;
|
|
undefined8 uVar17;
|
|
uint local_9c;
|
|
undefined4 local_70;
|
|
int local_64;
|
|
undefined4 local_60;
|
|
char local_54 [64];
|
|
|
|
uVar14 = __floatsidf(param_3);
|
|
uVar15 = __divdf3(0xffffffff,0x7fefffff);
|
|
iVar7 = *(int *)(param_8 + 0x10);
|
|
iVar9 = *(int *)(param_8 + 0x14);
|
|
puVar1 = (uint *)*param_1;
|
|
local_9c = 1;
|
|
local_64 = param_5;
|
|
if (puVar1 == (uint *)*param_2) {
|
|
uVar11 = 0;
|
|
pcVar6 = local_54;
|
|
uVar16 = 0;
|
|
}
|
|
else {
|
|
pcVar6 = local_54;
|
|
uVar8 = 0;
|
|
uVar16 = 0;
|
|
cVar5 = '\0';
|
|
uVar10 = uVar8;
|
|
do {
|
|
local_70 = (undefined4)((ulonglong)uVar16 >> 0x20);
|
|
local_60 = (undefined4)uVar16;
|
|
uVar2 = *puVar1;
|
|
uVar11 = uVar10;
|
|
if (uVar2 == param_7 && iVar9 != iVar7) {
|
|
*pcVar6 = cVar5;
|
|
uVar8 = uVar8 + 1;
|
|
cVar5 = '\0';
|
|
}
|
|
else {
|
|
iVar12 = 0xff;
|
|
if (uVar2 < 0x80) {
|
|
iVar12 = std::priv::__digit_val_table(uVar2);
|
|
}
|
|
if (param_3 <= iVar12) break;
|
|
iVar3 = __aeabi_dcmpgt(local_60,local_70,(int)uVar15,(int)((ulonglong)uVar15 >> 0x20));
|
|
cVar5 = cVar5 + '\x01';
|
|
local_64 = local_64 + 1;
|
|
uVar11 = local_9c;
|
|
if (iVar3 == 0) {
|
|
uVar16 = __muldf3(local_60,local_70,(int)uVar14,(int)((ulonglong)uVar14 >> 0x20));
|
|
uVar17 = __floatsidf(iVar12);
|
|
uVar16 = __adddf3((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),(int)uVar17,
|
|
(int)((ulonglong)uVar17 >> 0x20));
|
|
iVar12 = __aeabi_dcmple((int)uVar16,(int)((ulonglong)uVar16 >> 0x20),local_60,local_70);
|
|
iVar3 = __aeabi_dcmpeq(local_60,local_70,0,0);
|
|
uVar11 = uVar10 | (iVar3 == 0 && iVar12 != 0);
|
|
}
|
|
}
|
|
puVar1 = (uint *)(*param_1 + 4);
|
|
*param_1 = (int)puVar1;
|
|
pcVar6 = local_54 + uVar8;
|
|
uVar10 = uVar11;
|
|
} while (puVar1 != (uint *)*param_2);
|
|
pcVar6 = local_54 + uVar8;
|
|
if ((iVar9 != iVar7) && (uVar8 != 0)) {
|
|
*pcVar6 = cVar5;
|
|
pcVar6 = local_54 + uVar8 + 1;
|
|
}
|
|
}
|
|
uVar13 = (undefined4)((ulonglong)uVar16 >> 0x20);
|
|
local_60 = (undefined4)uVar16;
|
|
uVar4 = 0;
|
|
if (0 < local_64) {
|
|
if (uVar11 != 0) {
|
|
*param_4 = 0xffffffff;
|
|
param_4[1] = 0x7fefffff;
|
|
return 0;
|
|
}
|
|
uVar14 = __subdf3(0,0x80000000,local_60,uVar13);
|
|
uVar4 = (int)((ulonglong)uVar14 >> 0x20);
|
|
if (param_6 == 0) {
|
|
uVar4 = uVar13;
|
|
}
|
|
param_4[1] = uVar4;
|
|
uVar4 = (int)uVar14;
|
|
if (param_6 == 0) {
|
|
uVar4 = local_60;
|
|
}
|
|
*param_4 = uVar4;
|
|
uVar4 = 1;
|
|
if (iVar9 != iVar7) {
|
|
uVar4 = std::priv::__valid_grouping
|
|
(local_54,pcVar6,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000447ec @ 000447ec
|
|
|
|
void FUN_000447ec(facet *param_1)
|
|
|
|
{
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000448f4 @ 000448f4
|
|
|
|
void FUN_000448f4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8)
|
|
|
|
{
|
|
FUN_000455e4(param_1,param_3,param_4,param_5,param_6,param_7,param_8,1,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00044920 @ 00044920
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_00044920(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6,
|
|
int param_7,int param_8)
|
|
|
|
{
|
|
locale *this;
|
|
int *piVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int ******ppppppiVar4;
|
|
undefined4 uVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
int *******pppppppiVar9;
|
|
int iVar10;
|
|
int *******pppppppiVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
uint uVar15;
|
|
uint uVar16;
|
|
int iVar17;
|
|
int *******pppppppiVar18;
|
|
uint uVar19;
|
|
uint uVar20;
|
|
uint uVar21;
|
|
int iVar22;
|
|
int ******ppppppiVar23;
|
|
int iVar24;
|
|
int iVar25;
|
|
uint uVar26;
|
|
byte bVar27;
|
|
bool bVar28;
|
|
undefined8 uVar29;
|
|
int local_578;
|
|
undefined4 local_564;
|
|
int *******local_524;
|
|
uint local_520;
|
|
uint local_514;
|
|
undefined4 *******local_510 [16];
|
|
int *******local_4d0;
|
|
int ******local_4cc;
|
|
undefined1 auStack_4c8 [1024];
|
|
int *******local_c8;
|
|
int local_c4 [16];
|
|
int *local_84;
|
|
int *local_80;
|
|
int local_7c [16];
|
|
int local_3c;
|
|
int *local_38;
|
|
int local_34 [4];
|
|
int *local_24;
|
|
int *local_20;
|
|
locale alStack_1c [4];
|
|
undefined1 auStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20));
|
|
piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
piVar2 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct<wchar_t,false>::id);
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct<wchar_t,true>::id);
|
|
ppppppiVar4 = (int ******)(**(code **)(*piVar1 + 0x28))(piVar1,0x2d);
|
|
uVar5 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2b);
|
|
iVar6 = (**(code **)(*piVar1 + 0x28))(piVar1,0x20);
|
|
iVar7 = (**(code **)(*piVar1 + 0x28))(piVar1,0x30);
|
|
if (param_4 == 1) {
|
|
local_578 = (**(code **)(*piVar3 + 8))();
|
|
local_564 = (**(code **)(*piVar3 + 0xc))();
|
|
(**(code **)(*piVar3 + 0x10))(local_34);
|
|
uVar8 = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34);
|
|
(**(code **)(*piVar3 + 0x14))(local_7c,piVar3,*(code **)(*piVar3 + 0x14),local_34);
|
|
}
|
|
else {
|
|
local_578 = (**(code **)(*piVar2 + 8))();
|
|
local_564 = (**(code **)(*piVar2 + 0xc))();
|
|
(**(code **)(*piVar2 + 0x10))(local_34);
|
|
uVar8 = (**(code **)(*piVar2 + 0x20))(piVar2,*(code **)(*piVar2 + 0x20),local_34);
|
|
(**(code **)(*piVar2 + 0x14))(local_7c,piVar2,*(code **)(*piVar2 + 0x14),local_34);
|
|
}
|
|
pppppppiVar9 = *(int ********)(param_7 + 0x448);
|
|
pppppppiVar18 = *(int ********)(param_7 + 0x40);
|
|
if (pppppppiVar9 == pppppppiVar18) {
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
if ((local_38 != local_7c) && (local_38 != (int *)0x0)) {
|
|
if ((uint)(local_7c[0] - (int)local_38) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38);
|
|
}
|
|
else {
|
|
operator_delete(local_38);
|
|
}
|
|
}
|
|
if ((local_20 != local_34) && (local_20 != (int *)0x0)) {
|
|
if ((uint)(local_34[0] - (int)local_20) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20);
|
|
}
|
|
else {
|
|
operator_delete(local_20);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_1c);
|
|
return;
|
|
}
|
|
ppppppiVar23 = *pppppppiVar9;
|
|
pppppppiVar11 = pppppppiVar9 + 1;
|
|
if (ppppppiVar23 != ppppppiVar4) {
|
|
pppppppiVar11 = pppppppiVar9;
|
|
}
|
|
if (param_4 == 1) {
|
|
if (ppppppiVar23 == ppppppiVar4) {
|
|
(**(code **)(*piVar3 + 0x1c))(local_c4,piVar3);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x18))(local_c4,piVar3);
|
|
}
|
|
}
|
|
else if (ppppppiVar23 == ppppppiVar4) {
|
|
(**(code **)(*piVar2 + 0x1c))(local_c4);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x18))(local_c4);
|
|
}
|
|
local_524 = pppppppiVar18;
|
|
pppppppiVar9 = pppppppiVar11;
|
|
if (param_8 == 1) {
|
|
while ((local_524 = pppppppiVar18, pppppppiVar9 != pppppppiVar18 &&
|
|
(iVar10 = (**(code **)(*piVar1 + 8))(piVar1,0x40,*pppppppiVar9), local_524 = pppppppiVar9
|
|
, iVar10 == 1))) {
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
}
|
|
if (local_524 == pppppppiVar11) {
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
goto LAB_00045268;
|
|
}
|
|
}
|
|
__aeabi_memclr4(auStack_4c8,0x400);
|
|
local_4d0 = &local_4cc;
|
|
local_4cc = (int ******)0x0;
|
|
local_510[0] = &local_c8;
|
|
local_c8 = &local_4cc;
|
|
if (local_20 != local_24) {
|
|
if (pppppppiVar11 != local_524) {
|
|
FUN_00045484(local_510,pppppppiVar11,local_524,auStack_18);
|
|
}
|
|
FUN_0005031c(local_510,((int)local_4d0 - (int)local_c8 >> 2) - uVar8,local_34,local_564,uVar5,
|
|
ppppppiVar4,0);
|
|
pppppppiVar11 = local_c8;
|
|
local_524 = local_4d0;
|
|
}
|
|
uVar12 = (int)local_524 - (int)pppppppiVar11;
|
|
uVar13 = (int)uVar12 >> 2;
|
|
uVar14 = uVar13 + 1;
|
|
if (uVar8 == 0) {
|
|
uVar14 = uVar13;
|
|
}
|
|
iVar10 = uVar14 + ((int)local_84 - (int)local_80 >> 2);
|
|
uVar19 = *(uint *)(param_5 + 4) & 0x200;
|
|
uVar14 = *(uint *)(param_5 + 0x1c);
|
|
if (uVar19 != 0) {
|
|
iVar10 = (local_3c - (int)local_38 >> 2) + iVar10;
|
|
}
|
|
if (param_4 == 1) {
|
|
if (ppppppiVar23 == ppppppiVar4) {
|
|
local_514 = (**(code **)(*piVar3 + 0x28))();
|
|
}
|
|
else {
|
|
local_514 = (**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
}
|
|
else if (ppppppiVar23 == ppppppiVar4) {
|
|
local_514 = (**(code **)(*piVar2 + 0x28))(piVar2);
|
|
}
|
|
else {
|
|
local_514 = (**(code **)(*piVar2 + 0x24))(piVar2);
|
|
}
|
|
uVar15 = iVar10 + (uint)((local_514 & 0xff00) == 0x100 || (local_514 & 0xff0000) == 0x10000);
|
|
iVar10 = uVar14 - uVar15;
|
|
if (uVar14 <= uVar15) {
|
|
iVar10 = 0;
|
|
}
|
|
uVar20 = *(uint *)(param_5 + 4);
|
|
local_520 = param_3;
|
|
if ((iVar10 != 0) && ((uVar20 & 5) == 0)) {
|
|
uVar21 = param_3;
|
|
if (0 < iVar10) {
|
|
iVar24 = (uVar14 + 1) - uVar15;
|
|
do {
|
|
uVar16 = uVar21 & 0xff;
|
|
uVar21 = 0;
|
|
if (uVar16 != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = param_6;
|
|
iVar22 = param_6;
|
|
}
|
|
else {
|
|
iVar22 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar21 = 1;
|
|
if (iVar22 == -1) {
|
|
uVar21 = 0;
|
|
}
|
|
}
|
|
iVar24 = iVar24 + -1;
|
|
} while (1 < iVar24);
|
|
}
|
|
local_520 = uVar21 & 0xff | param_3 & 0xffffff00;
|
|
}
|
|
uVar21 = (int)(local_524 + -uVar8) - (int)pppppppiVar11;
|
|
iVar22 = (uVar12 >> 2) + 1;
|
|
iVar24 = 0;
|
|
do {
|
|
uVar16 = local_520;
|
|
switch(*(undefined1 *)((int)local_510 + iVar24 + -4)) {
|
|
case 1:
|
|
uVar16 = 0;
|
|
if ((local_520 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = iVar6;
|
|
iVar25 = iVar6;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar6);
|
|
}
|
|
uVar16 = 1;
|
|
if (iVar25 == -1) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
local_520 = local_520 & 0xffffff00 | uVar16;
|
|
case 0:
|
|
if (iVar10 != 0 && (uVar20 & 7) == 4) {
|
|
iVar25 = (uVar14 + 1) - uVar15;
|
|
uVar16 = local_520;
|
|
uVar26 = local_520;
|
|
if (0 < iVar10) {
|
|
do {
|
|
uVar16 = 0;
|
|
if ((uVar26 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = param_6;
|
|
iVar17 = param_6;
|
|
}
|
|
else {
|
|
iVar17 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar16 = 1;
|
|
if (iVar17 == -1) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
uVar26 = uVar16;
|
|
} while (1 < iVar25);
|
|
}
|
|
local_520 = local_520 & 0xffffff00 | uVar16 & 0xff;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (uVar19 != 0) {
|
|
if (0 < local_3c - (int)local_38) {
|
|
iVar25 = ((uint)(local_3c - (int)local_38) >> 2) + 1;
|
|
uVar26 = local_520;
|
|
piVar1 = local_38;
|
|
do {
|
|
uVar16 = 0;
|
|
if ((uVar26 & 0xff) != 0) {
|
|
iVar17 = *piVar1;
|
|
piVar2 = (int *)param_2[5];
|
|
if (piVar2 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar17;
|
|
}
|
|
else {
|
|
iVar17 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar16 = 1;
|
|
if (iVar17 == -1) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
piVar1 = piVar1 + 1;
|
|
uVar26 = uVar16;
|
|
} while (1 < iVar25);
|
|
}
|
|
LAB_00044f52:
|
|
local_520 = local_520 & 0xffffff00 | uVar16 & 0xff;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (local_80 != local_84) {
|
|
uVar16 = 0;
|
|
if ((local_520 & 0xff) != 0) {
|
|
iVar25 = *local_80;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = iVar25;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar16 = 1;
|
|
if (iVar25 == -1) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
local_520 = local_520 & 0xffffff00 | uVar16;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (uVar8 == 0) {
|
|
iVar25 = iVar22;
|
|
uVar26 = local_520;
|
|
pppppppiVar9 = pppppppiVar11;
|
|
if (0 < (int)uVar12) {
|
|
do {
|
|
uVar16 = 0;
|
|
if ((uVar26 & 0xff) != 0) {
|
|
ppppppiVar4 = *pppppppiVar9;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = (int)ppppppiVar4;
|
|
}
|
|
else {
|
|
ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar16 = 1;
|
|
if (ppppppiVar4 == (int ******)0xffffffff) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
uVar26 = uVar16;
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
} while (1 < iVar25);
|
|
}
|
|
goto LAB_00044f52;
|
|
}
|
|
if ((int)uVar8 < (int)uVar13) {
|
|
iVar25 = (uVar21 >> 2) + 1;
|
|
uVar26 = local_520;
|
|
pppppppiVar9 = pppppppiVar11;
|
|
if (0 < (int)uVar21) {
|
|
do {
|
|
uVar16 = 0;
|
|
if ((uVar26 & 0xff) != 0) {
|
|
ppppppiVar4 = *pppppppiVar9;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = (int)ppppppiVar4;
|
|
}
|
|
else {
|
|
ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar16 = 1;
|
|
if (ppppppiVar4 == (int ******)0xffffffff) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
uVar26 = uVar16;
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
} while (1 < iVar25);
|
|
}
|
|
bVar27 = 0;
|
|
if ((uVar16 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = local_578;
|
|
iVar25 = local_578;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578);
|
|
}
|
|
bVar27 = 1;
|
|
if (iVar25 == -1) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
iVar25 = (uVar8 & 0x3fffffff) + 1;
|
|
pppppppiVar9 = local_524 + -uVar8;
|
|
if (0 < (int)(uVar8 * 4)) {
|
|
do {
|
|
bVar28 = bVar27 != 0;
|
|
bVar27 = 0;
|
|
if (bVar28) {
|
|
ppppppiVar4 = *pppppppiVar9;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = (int)ppppppiVar4;
|
|
}
|
|
else {
|
|
ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
bVar27 = 1;
|
|
if (ppppppiVar4 == (int ******)0xffffffff) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
} while (1 < iVar25);
|
|
}
|
|
}
|
|
else {
|
|
bVar27 = 0;
|
|
if ((local_520 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = iVar7;
|
|
iVar25 = iVar7;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar7);
|
|
}
|
|
if (iVar25 != -1) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = local_578;
|
|
iVar25 = local_578;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578);
|
|
}
|
|
bVar27 = 1;
|
|
if (iVar25 == -1) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
}
|
|
iVar25 = uVar13 - uVar8;
|
|
if (uVar8 != uVar13) {
|
|
do {
|
|
bVar28 = bVar27 != 0;
|
|
bVar27 = 0;
|
|
if (bVar28) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = iVar7;
|
|
iVar17 = iVar7;
|
|
}
|
|
else {
|
|
iVar17 = (**(code **)(*param_2 + 0x34))(param_2,iVar7);
|
|
}
|
|
bVar27 = 1;
|
|
if (iVar17 == -1) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + 1;
|
|
} while (iVar25 != 0);
|
|
}
|
|
iVar25 = iVar22;
|
|
pppppppiVar9 = pppppppiVar11;
|
|
if (0 < (int)uVar12) {
|
|
do {
|
|
bVar28 = bVar27 != 0;
|
|
bVar27 = 0;
|
|
if (bVar28) {
|
|
ppppppiVar4 = *pppppppiVar9;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = (int)ppppppiVar4;
|
|
}
|
|
else {
|
|
ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
bVar27 = 1;
|
|
if (ppppppiVar4 == (int ******)0xffffffff) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
} while (1 < iVar25);
|
|
}
|
|
}
|
|
local_520 = local_520 & 0xffffff00;
|
|
local_520 = local_520 | bVar27;
|
|
}
|
|
bVar28 = iVar24 < 3;
|
|
iVar24 = iVar24 + 1;
|
|
} while (bVar28);
|
|
if (1 < (uint)((int)local_84 - (int)local_80 >> 2)) {
|
|
piVar1 = local_80 + 1;
|
|
uVar8 = local_520;
|
|
if (0 < (int)local_84 - (int)piVar1) {
|
|
iVar6 = ((uint)((int)local_84 - (int)piVar1) >> 2) + 1;
|
|
uVar12 = local_520;
|
|
do {
|
|
uVar8 = 0;
|
|
if ((uVar12 & 0xff) != 0) {
|
|
iVar7 = *piVar1;
|
|
piVar2 = (int *)param_2[5];
|
|
if (piVar2 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar7;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar8 = 1;
|
|
if (iVar7 == -1) {
|
|
uVar8 = 0;
|
|
}
|
|
}
|
|
iVar6 = iVar6 + -1;
|
|
piVar1 = piVar1 + 1;
|
|
uVar12 = uVar8;
|
|
} while (1 < iVar6);
|
|
}
|
|
local_520 = uVar8 & 0xff | local_520 & 0xffffff00;
|
|
}
|
|
if ((iVar10 != 0) && ((uVar20 & 6) == 0)) {
|
|
uVar8 = local_520;
|
|
if (0 < iVar10) {
|
|
iVar6 = (uVar14 + 1) - uVar15;
|
|
uVar14 = local_520;
|
|
do {
|
|
uVar8 = 0;
|
|
if ((uVar14 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = param_6;
|
|
iVar7 = param_6;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar8 = 1;
|
|
if (iVar7 == -1) {
|
|
uVar8 = 0;
|
|
}
|
|
}
|
|
iVar6 = iVar6 + -1;
|
|
uVar14 = uVar8;
|
|
} while (1 < iVar6);
|
|
}
|
|
local_520 = uVar8 & 0xff | local_520 & 0xffffff00;
|
|
}
|
|
*param_1 = param_2;
|
|
param_1[1] = local_520;
|
|
if ((((undefined4 ********)local_c8 != local_510) && (local_c8 != (int *******)0x0)) &&
|
|
(&local_4cc != local_c8)) {
|
|
if ((uint)((int)local_510[0] - (int)local_c8) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_c8,(int)local_510[0] - (int)local_c8);
|
|
}
|
|
else {
|
|
operator_delete(local_c8);
|
|
}
|
|
}
|
|
LAB_00045268:
|
|
if (local_80 == local_c4) {
|
|
FUN_00044a98();
|
|
return;
|
|
}
|
|
if (local_80 != (int *)0x0) {
|
|
uVar29 = CONCAT44(local_c4[0] - (int)local_80,local_80);
|
|
if (0x80 < (uint)(local_c4[0] - (int)local_80)) {
|
|
operator_delete(local_80);
|
|
uVar29 = FUN_00044a98();
|
|
}
|
|
std::__node_alloc::_M_deallocate((void *)uVar29,(uint)((ulonglong)uVar29 >> 0x20));
|
|
uVar5 = FUN_00044a98();
|
|
if ((local_80 != local_c4) && (local_80 != (int *)0x0)) {
|
|
if ((uint)(local_c4[0] - (int)local_80) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_80,local_c4[0] - (int)local_80);
|
|
}
|
|
else {
|
|
operator_delete(local_80);
|
|
}
|
|
}
|
|
if ((local_38 != local_7c) && (local_38 != (int *)0x0)) {
|
|
if ((uint)(local_7c[0] - (int)local_38) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38);
|
|
}
|
|
else {
|
|
operator_delete(local_38);
|
|
}
|
|
}
|
|
if ((local_20 != local_34) && (local_20 != (int *)0x0)) {
|
|
if ((uint)(local_34[0] - (int)local_20) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20);
|
|
}
|
|
else {
|
|
operator_delete(local_20);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_1c);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar5);
|
|
}
|
|
FUN_00044a98();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00044a98 @ 00044a98
|
|
|
|
void FUN_00044a98(void)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
int in_stack_00000060;
|
|
int *in_stack_0000007c;
|
|
|
|
puVar1 = *(undefined1 **)(in_stack_00000060 + 4);
|
|
if ((puVar1 != &stack0x0000052c) && (puVar1 != (undefined1 *)0x0)) {
|
|
if ((uint)(*in_stack_0000007c - (int)puVar1) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(puVar1,*in_stack_0000007c - (int)puVar1);
|
|
}
|
|
else {
|
|
operator_delete(puVar1);
|
|
}
|
|
}
|
|
puVar1 = (undefined1 *)in_stack_0000007c[0x17];
|
|
if ((puVar1 != &stack0x00000574) && (puVar1 != (undefined1 *)0x0)) {
|
|
if ((uint)(in_stack_0000007c[0x12] - (int)puVar1) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(puVar1,in_stack_0000007c[0x12] - (int)puVar1);
|
|
}
|
|
else {
|
|
operator_delete(puVar1);
|
|
}
|
|
}
|
|
std::locale::~locale((locale *)&stack0x0000058c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000453a0 @ 000453a0
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_000453a0(undefined4 param_1,int param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
undefined4 extraout_r1;
|
|
locale alStack_134 [4];
|
|
undefined1 *local_130 [4];
|
|
undefined1 **local_120;
|
|
undefined1 local_11c;
|
|
undefined1 auStack_11b [256];
|
|
undefined1 auStack_1b [3];
|
|
undefined1 **local_18;
|
|
|
|
__aeabi_memclr(auStack_11b,0x100);
|
|
local_11c = 0;
|
|
local_130[0] = auStack_1b;
|
|
local_120 = (undefined1 **)&local_11c;
|
|
local_18 = (undefined1 **)&local_11c;
|
|
FUN_000517f8(local_130,extraout_r1,param_3,param_4);
|
|
this = (locale *)std::locale::locale(alStack_134,(locale *)(param_2 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
std::locale::~locale(alStack_134);
|
|
FUN_00051848(local_130,param_1,uVar1,0,0);
|
|
if (((local_18 != local_130) && (local_18 != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_11c != local_18)) {
|
|
if (0x80 < (uint)((int)local_130[0] - (int)local_18)) {
|
|
operator_delete(local_18);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_18,(int)local_130[0] - (int)local_18);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00045484 @ 00045484
|
|
|
|
int * FUN_00045484(int *param_1,int *param_2,int *param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
undefined4 uVar5;
|
|
int *piVar6;
|
|
uint uVar7;
|
|
int *piVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
int *piVar11;
|
|
uint local_18;
|
|
|
|
if (param_2 != param_3) {
|
|
piVar6 = (int *)param_1[0x112];
|
|
piVar1 = param_1 + 0x112;
|
|
iVar2 = (int)param_3 - (int)param_2;
|
|
uVar9 = iVar2 >> 2;
|
|
if (piVar6 == param_1) {
|
|
piVar3 = (int *)param_1[0x10];
|
|
uVar7 = 0x10 - ((int)piVar3 - (int)param_1 >> 2);
|
|
}
|
|
else {
|
|
piVar3 = (int *)param_1[0x10];
|
|
uVar7 = *param_1 - (int)piVar3 >> 2;
|
|
}
|
|
piVar8 = param_1 + 0x10;
|
|
if (uVar9 < uVar7) {
|
|
piVar1 = param_2 + 1;
|
|
*piVar3 = *param_2;
|
|
if (piVar1 != param_3) {
|
|
__aeabi_memcpy(piVar3 + 1,piVar1,(int)param_3 - (int)piVar1);
|
|
piVar3 = (int *)*piVar8;
|
|
}
|
|
piVar3[uVar9] = 0;
|
|
*piVar8 = (int)(piVar3 + uVar9);
|
|
}
|
|
else {
|
|
uVar7 = (int)piVar3 - (int)piVar6 >> 2;
|
|
if (0x3ffffffe - uVar7 < uVar9) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar10 = uVar7;
|
|
if (uVar7 <= uVar9) {
|
|
uVar10 = uVar9;
|
|
}
|
|
uVar10 = uVar7 + uVar10 + 1;
|
|
uVar9 = 0x3ffffffe;
|
|
if (uVar7 <= uVar10) {
|
|
uVar9 = uVar10;
|
|
}
|
|
uVar7 = 0x3ffffffe;
|
|
if (uVar10 < 0x3fffffff) {
|
|
uVar7 = uVar9;
|
|
}
|
|
if (uVar7 >> 1 < 0x81) {
|
|
piVar4 = param_1 + 0x11;
|
|
}
|
|
else {
|
|
if (0x3fffffff < uVar7) {
|
|
FUN_00030824(4);
|
|
uVar5 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
local_18 = uVar7 << 2;
|
|
if (local_18 < 0x81) {
|
|
piVar4 = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
}
|
|
else {
|
|
piVar4 = (int *)operator_new(local_18);
|
|
}
|
|
piVar3 = (int *)*piVar8;
|
|
piVar6 = (int *)*piVar1;
|
|
}
|
|
piVar11 = piVar4;
|
|
if (piVar3 != piVar6) {
|
|
__aeabi_memcpy(piVar4,piVar6,(int)piVar3 - (int)piVar6);
|
|
piVar11 = (int *)((int)piVar4 + ((int)piVar3 - (int)piVar6));
|
|
}
|
|
__aeabi_memcpy(piVar11,param_2,iVar2);
|
|
*(undefined4 *)((int)piVar11 + iVar2) = 0;
|
|
piVar6 = (int *)*piVar1;
|
|
if (((piVar6 != param_1) && (piVar6 != (int *)0x0)) && (param_1 + 0x11 != piVar6)) {
|
|
if ((uint)(*param_1 - (int)piVar6) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar6,*param_1 - (int)piVar6);
|
|
}
|
|
else {
|
|
operator_delete(piVar6);
|
|
}
|
|
}
|
|
*param_1 = (int)(piVar4 + uVar7);
|
|
*piVar8 = (int)piVar11 + iVar2;
|
|
*piVar1 = (int)piVar4;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000455e4 @ 000455e4
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_000455e4(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6,
|
|
int param_7,int param_8)
|
|
|
|
{
|
|
locale *this;
|
|
int *piVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int ******ppppppiVar4;
|
|
undefined4 uVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
int *******pppppppiVar9;
|
|
int iVar10;
|
|
int *******pppppppiVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
uint uVar15;
|
|
uint uVar16;
|
|
int iVar17;
|
|
int *******pppppppiVar18;
|
|
uint uVar19;
|
|
uint uVar20;
|
|
uint uVar21;
|
|
int iVar22;
|
|
int ******ppppppiVar23;
|
|
int iVar24;
|
|
int iVar25;
|
|
uint uVar26;
|
|
byte bVar27;
|
|
bool bVar28;
|
|
int local_578;
|
|
undefined4 local_564;
|
|
int *******local_524;
|
|
uint local_520;
|
|
uint local_514;
|
|
undefined4 *******local_510 [16];
|
|
int *******local_4d0;
|
|
int ******local_4cc;
|
|
undefined1 auStack_4c8 [1024];
|
|
int *******local_c8;
|
|
int local_c4 [16];
|
|
int *local_84;
|
|
int *local_80;
|
|
int local_7c [16];
|
|
int local_3c;
|
|
int *local_38;
|
|
int local_34 [4];
|
|
int *local_24;
|
|
int *local_20;
|
|
locale alStack_1c [4];
|
|
undefined1 auStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_1c,(locale *)(param_5 + 0x20));
|
|
piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
piVar2 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct<wchar_t,false>::id);
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_1c,(id *)&std::moneypunct<wchar_t,true>::id);
|
|
ppppppiVar4 = (int ******)(**(code **)(*piVar1 + 0x28))(piVar1,0x2d);
|
|
uVar5 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2b);
|
|
iVar6 = (**(code **)(*piVar1 + 0x28))(piVar1,0x20);
|
|
iVar7 = (**(code **)(*piVar1 + 0x28))(piVar1,0x30);
|
|
if (param_4 == 1) {
|
|
local_578 = (**(code **)(*piVar3 + 8))();
|
|
local_564 = (**(code **)(*piVar3 + 0xc))();
|
|
(**(code **)(*piVar3 + 0x10))(local_34);
|
|
uVar8 = (**(code **)(*piVar3 + 0x20))(piVar3,*(code **)(*piVar3 + 0x20),local_34);
|
|
(**(code **)(*piVar3 + 0x14))(local_7c,piVar3,*(code **)(*piVar3 + 0x14),local_34);
|
|
}
|
|
else {
|
|
local_578 = (**(code **)(*piVar2 + 8))();
|
|
local_564 = (**(code **)(*piVar2 + 0xc))();
|
|
(**(code **)(*piVar2 + 0x10))(local_34);
|
|
uVar8 = (**(code **)(*piVar2 + 0x20))(piVar2,*(code **)(*piVar2 + 0x20),local_34);
|
|
(**(code **)(*piVar2 + 0x14))(local_7c,piVar2,*(code **)(*piVar2 + 0x14),local_34);
|
|
}
|
|
pppppppiVar18 = *(int ********)(param_7 + 0x40);
|
|
pppppppiVar9 = *(int ********)(param_7 + 0x44);
|
|
if (pppppppiVar9 == pppppppiVar18) {
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
if ((local_38 != local_7c) && (local_38 != (int *)0x0)) {
|
|
if ((uint)(local_7c[0] - (int)local_38) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38);
|
|
}
|
|
else {
|
|
operator_delete(local_38);
|
|
}
|
|
}
|
|
if ((local_20 != local_34) && (local_20 != (int *)0x0)) {
|
|
if ((uint)(local_34[0] - (int)local_20) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20);
|
|
}
|
|
else {
|
|
operator_delete(local_20);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_1c);
|
|
return;
|
|
}
|
|
ppppppiVar23 = *pppppppiVar9;
|
|
pppppppiVar11 = pppppppiVar9 + 1;
|
|
if (ppppppiVar23 != ppppppiVar4) {
|
|
pppppppiVar11 = pppppppiVar9;
|
|
}
|
|
if (param_4 == 1) {
|
|
if (ppppppiVar23 == ppppppiVar4) {
|
|
(**(code **)(*piVar3 + 0x1c))(local_c4,piVar3);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x18))(local_c4,piVar3);
|
|
}
|
|
}
|
|
else if (ppppppiVar23 == ppppppiVar4) {
|
|
(**(code **)(*piVar2 + 0x1c))(local_c4);
|
|
}
|
|
else {
|
|
(**(code **)(*piVar2 + 0x18))(local_c4);
|
|
}
|
|
local_524 = pppppppiVar18;
|
|
pppppppiVar9 = pppppppiVar11;
|
|
if (param_8 == 1) {
|
|
while ((local_524 = pppppppiVar18, pppppppiVar9 != pppppppiVar18 &&
|
|
(iVar10 = (**(code **)(*piVar1 + 8))(piVar1,0x40,*pppppppiVar9), local_524 = pppppppiVar9
|
|
, iVar10 == 1))) {
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
}
|
|
if (local_524 == pppppppiVar11) {
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
goto LAB_00045f22;
|
|
}
|
|
}
|
|
__aeabi_memclr4(auStack_4c8,0x400);
|
|
local_4cc = (int ******)0x0;
|
|
local_510[0] = &local_c8;
|
|
local_4d0 = &local_4cc;
|
|
local_c8 = &local_4cc;
|
|
if (local_20 != local_24) {
|
|
if (pppppppiVar11 != local_524) {
|
|
FUN_00045484(local_510,pppppppiVar11,local_524,auStack_18);
|
|
}
|
|
FUN_0005031c(local_510,((int)local_4d0 - (int)local_c8 >> 2) - uVar8,local_34,local_564,uVar5,
|
|
ppppppiVar4,0);
|
|
pppppppiVar11 = local_c8;
|
|
local_524 = local_4d0;
|
|
}
|
|
uVar12 = (int)local_524 - (int)pppppppiVar11;
|
|
uVar13 = (int)uVar12 >> 2;
|
|
uVar14 = uVar13 + 1;
|
|
if (uVar8 == 0) {
|
|
uVar14 = uVar13;
|
|
}
|
|
iVar10 = uVar14 + ((int)local_84 - (int)local_80 >> 2);
|
|
uVar19 = *(uint *)(param_5 + 4) & 0x200;
|
|
uVar14 = *(uint *)(param_5 + 0x1c);
|
|
if (uVar19 != 0) {
|
|
iVar10 = (local_3c - (int)local_38 >> 2) + iVar10;
|
|
}
|
|
if (param_4 == 1) {
|
|
if (ppppppiVar23 == ppppppiVar4) {
|
|
local_514 = (**(code **)(*piVar3 + 0x28))();
|
|
}
|
|
else {
|
|
local_514 = (**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
}
|
|
else if (ppppppiVar23 == ppppppiVar4) {
|
|
local_514 = (**(code **)(*piVar2 + 0x28))(piVar2);
|
|
}
|
|
else {
|
|
local_514 = (**(code **)(*piVar2 + 0x24))(piVar2);
|
|
}
|
|
uVar15 = iVar10 + (uint)((local_514 & 0xff00) == 0x100 || (local_514 & 0xff0000) == 0x10000);
|
|
iVar10 = uVar14 - uVar15;
|
|
if (uVar14 <= uVar15) {
|
|
iVar10 = 0;
|
|
}
|
|
uVar20 = *(uint *)(param_5 + 4);
|
|
local_520 = param_3;
|
|
if ((iVar10 != 0) && ((uVar20 & 5) == 0)) {
|
|
uVar21 = param_3;
|
|
if (0 < iVar10) {
|
|
iVar24 = (uVar14 + 1) - uVar15;
|
|
do {
|
|
uVar16 = uVar21 & 0xff;
|
|
uVar21 = 0;
|
|
if (uVar16 != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = param_6;
|
|
iVar22 = param_6;
|
|
}
|
|
else {
|
|
iVar22 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar21 = 1;
|
|
if (iVar22 == -1) {
|
|
uVar21 = 0;
|
|
}
|
|
}
|
|
iVar24 = iVar24 + -1;
|
|
} while (1 < iVar24);
|
|
}
|
|
local_520 = uVar21 & 0xff | param_3 & 0xffffff00;
|
|
}
|
|
uVar21 = (int)(local_524 + -uVar8) - (int)pppppppiVar11;
|
|
iVar22 = (uVar12 >> 2) + 1;
|
|
iVar24 = 0;
|
|
do {
|
|
uVar16 = local_520;
|
|
switch(*(undefined1 *)((int)local_510 + iVar24 + -4)) {
|
|
case 1:
|
|
uVar16 = 0;
|
|
if ((local_520 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = iVar6;
|
|
iVar25 = iVar6;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar6);
|
|
}
|
|
uVar16 = 1;
|
|
if (iVar25 == -1) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
local_520 = local_520 & 0xffffff00 | uVar16;
|
|
case 0:
|
|
if (iVar10 != 0 && (uVar20 & 7) == 4) {
|
|
iVar25 = (uVar14 + 1) - uVar15;
|
|
uVar16 = local_520;
|
|
uVar26 = local_520;
|
|
if (0 < iVar10) {
|
|
do {
|
|
uVar16 = 0;
|
|
if ((uVar26 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = param_6;
|
|
iVar17 = param_6;
|
|
}
|
|
else {
|
|
iVar17 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar16 = 1;
|
|
if (iVar17 == -1) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
uVar26 = uVar16;
|
|
} while (1 < iVar25);
|
|
}
|
|
local_520 = local_520 & 0xffffff00 | uVar16 & 0xff;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (uVar19 != 0) {
|
|
if (0 < local_3c - (int)local_38) {
|
|
iVar25 = ((uint)(local_3c - (int)local_38) >> 2) + 1;
|
|
uVar26 = local_520;
|
|
piVar1 = local_38;
|
|
do {
|
|
uVar16 = 0;
|
|
if ((uVar26 & 0xff) != 0) {
|
|
iVar17 = *piVar1;
|
|
piVar2 = (int *)param_2[5];
|
|
if (piVar2 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar17;
|
|
}
|
|
else {
|
|
iVar17 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar16 = 1;
|
|
if (iVar17 == -1) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
piVar1 = piVar1 + 1;
|
|
uVar26 = uVar16;
|
|
} while (1 < iVar25);
|
|
}
|
|
LAB_00045c0a:
|
|
local_520 = local_520 & 0xffffff00 | uVar16 & 0xff;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (local_80 != local_84) {
|
|
uVar16 = 0;
|
|
if ((local_520 & 0xff) != 0) {
|
|
iVar25 = *local_80;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = iVar25;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar16 = 1;
|
|
if (iVar25 == -1) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
local_520 = local_520 & 0xffffff00 | uVar16;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (uVar8 == 0) {
|
|
iVar25 = iVar22;
|
|
uVar26 = local_520;
|
|
pppppppiVar9 = pppppppiVar11;
|
|
if (0 < (int)uVar12) {
|
|
do {
|
|
uVar16 = 0;
|
|
if ((uVar26 & 0xff) != 0) {
|
|
ppppppiVar4 = *pppppppiVar9;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = (int)ppppppiVar4;
|
|
}
|
|
else {
|
|
ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar16 = 1;
|
|
if (ppppppiVar4 == (int ******)0xffffffff) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
uVar26 = uVar16;
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
} while (1 < iVar25);
|
|
}
|
|
goto LAB_00045c0a;
|
|
}
|
|
if ((int)uVar8 < (int)uVar13) {
|
|
iVar25 = (uVar21 >> 2) + 1;
|
|
uVar26 = local_520;
|
|
pppppppiVar9 = pppppppiVar11;
|
|
if (0 < (int)uVar21) {
|
|
do {
|
|
uVar16 = 0;
|
|
if ((uVar26 & 0xff) != 0) {
|
|
ppppppiVar4 = *pppppppiVar9;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = (int)ppppppiVar4;
|
|
}
|
|
else {
|
|
ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar16 = 1;
|
|
if (ppppppiVar4 == (int ******)0xffffffff) {
|
|
uVar16 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
uVar26 = uVar16;
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
} while (1 < iVar25);
|
|
}
|
|
bVar27 = 0;
|
|
if ((uVar16 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = local_578;
|
|
iVar25 = local_578;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578);
|
|
}
|
|
bVar27 = 1;
|
|
if (iVar25 == -1) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
iVar25 = (uVar8 & 0x3fffffff) + 1;
|
|
pppppppiVar9 = local_524 + -uVar8;
|
|
if (0 < (int)(uVar8 * 4)) {
|
|
do {
|
|
bVar28 = bVar27 != 0;
|
|
bVar27 = 0;
|
|
if (bVar28) {
|
|
ppppppiVar4 = *pppppppiVar9;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = (int)ppppppiVar4;
|
|
}
|
|
else {
|
|
ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
bVar27 = 1;
|
|
if (ppppppiVar4 == (int ******)0xffffffff) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
} while (1 < iVar25);
|
|
}
|
|
}
|
|
else {
|
|
bVar27 = 0;
|
|
if ((local_520 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = iVar7;
|
|
iVar25 = iVar7;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2,iVar7);
|
|
}
|
|
if (iVar25 != -1) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = local_578;
|
|
iVar25 = local_578;
|
|
}
|
|
else {
|
|
iVar25 = (**(code **)(*param_2 + 0x34))(param_2,local_578);
|
|
}
|
|
bVar27 = 1;
|
|
if (iVar25 == -1) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
}
|
|
iVar25 = uVar13 - uVar8;
|
|
if (uVar8 != uVar13) {
|
|
do {
|
|
bVar28 = bVar27 != 0;
|
|
bVar27 = 0;
|
|
if (bVar28) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = iVar7;
|
|
iVar17 = iVar7;
|
|
}
|
|
else {
|
|
iVar17 = (**(code **)(*param_2 + 0x34))(param_2,iVar7);
|
|
}
|
|
bVar27 = 1;
|
|
if (iVar17 == -1) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + 1;
|
|
} while (iVar25 != 0);
|
|
}
|
|
iVar25 = iVar22;
|
|
pppppppiVar9 = pppppppiVar11;
|
|
if (0 < (int)uVar12) {
|
|
do {
|
|
bVar28 = bVar27 != 0;
|
|
bVar27 = 0;
|
|
if (bVar28) {
|
|
ppppppiVar4 = *pppppppiVar9;
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = (int)ppppppiVar4;
|
|
}
|
|
else {
|
|
ppppppiVar4 = (int ******)(**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
bVar27 = 1;
|
|
if (ppppppiVar4 == (int ******)0xffffffff) {
|
|
bVar27 = 0;
|
|
}
|
|
}
|
|
iVar25 = iVar25 + -1;
|
|
pppppppiVar9 = pppppppiVar9 + 1;
|
|
} while (1 < iVar25);
|
|
}
|
|
}
|
|
local_520 = local_520 & 0xffffff00;
|
|
local_520 = local_520 | bVar27;
|
|
}
|
|
bVar28 = iVar24 < 3;
|
|
iVar24 = iVar24 + 1;
|
|
} while (bVar28);
|
|
if (1 < (uint)((int)local_84 - (int)local_80 >> 2)) {
|
|
piVar1 = local_80 + 1;
|
|
uVar8 = local_520;
|
|
if (0 < (int)local_84 - (int)piVar1) {
|
|
iVar6 = ((uint)((int)local_84 - (int)piVar1) >> 2) + 1;
|
|
uVar12 = local_520;
|
|
do {
|
|
uVar8 = 0;
|
|
if ((uVar12 & 0xff) != 0) {
|
|
iVar7 = *piVar1;
|
|
piVar2 = (int *)param_2[5];
|
|
if (piVar2 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar7;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar8 = 1;
|
|
if (iVar7 == -1) {
|
|
uVar8 = 0;
|
|
}
|
|
}
|
|
iVar6 = iVar6 + -1;
|
|
piVar1 = piVar1 + 1;
|
|
uVar12 = uVar8;
|
|
} while (1 < iVar6);
|
|
}
|
|
local_520 = uVar8 & 0xff | local_520 & 0xffffff00;
|
|
}
|
|
if ((iVar10 != 0) && ((uVar20 & 6) == 0)) {
|
|
uVar8 = local_520;
|
|
if (0 < iVar10) {
|
|
iVar6 = (uVar14 + 1) - uVar15;
|
|
uVar14 = local_520;
|
|
do {
|
|
uVar8 = 0;
|
|
if ((uVar14 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = param_6;
|
|
iVar7 = param_6;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_2 + 0x34))(param_2,param_6);
|
|
}
|
|
uVar8 = 1;
|
|
if (iVar7 == -1) {
|
|
uVar8 = 0;
|
|
}
|
|
}
|
|
iVar6 = iVar6 + -1;
|
|
uVar14 = uVar8;
|
|
} while (1 < iVar6);
|
|
}
|
|
local_520 = uVar8 & 0xff | local_520 & 0xffffff00;
|
|
}
|
|
*param_1 = param_2;
|
|
param_1[1] = local_520;
|
|
if ((((undefined4 ********)local_c8 != local_510) && (local_c8 != (int *******)0x0)) &&
|
|
(&local_4cc != local_c8)) {
|
|
if ((uint)((int)local_510[0] - (int)local_c8) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_c8,(int)local_510[0] - (int)local_c8);
|
|
}
|
|
else {
|
|
operator_delete(local_c8);
|
|
}
|
|
}
|
|
LAB_00045f22:
|
|
if (local_80 == local_c4) {
|
|
FUN_00045758();
|
|
return;
|
|
}
|
|
if (local_80 != (int *)0x0) {
|
|
if ((uint)(local_c4[0] - (int)local_80) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_80,local_c4[0] - (int)local_80);
|
|
uVar5 = FUN_00045758();
|
|
if ((local_80 != local_c4) && (local_80 != (int *)0x0)) {
|
|
if ((uint)(local_c4[0] - (int)local_80) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_80,local_c4[0] - (int)local_80);
|
|
}
|
|
else {
|
|
operator_delete(local_80);
|
|
}
|
|
}
|
|
if ((local_38 != local_7c) && (local_38 != (int *)0x0)) {
|
|
if ((uint)(local_7c[0] - (int)local_38) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_38,local_7c[0] - (int)local_38);
|
|
}
|
|
else {
|
|
operator_delete(local_38);
|
|
}
|
|
}
|
|
if ((local_20 != local_34) && (local_20 != (int *)0x0)) {
|
|
if ((uint)(local_34[0] - (int)local_20) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_20,local_34[0] - (int)local_20);
|
|
}
|
|
else {
|
|
operator_delete(local_20);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_1c);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar5);
|
|
}
|
|
operator_delete(local_80);
|
|
FUN_00045758();
|
|
return;
|
|
}
|
|
FUN_00045758();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00045758 @ 00045758
|
|
|
|
void FUN_00045758(void)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
int *unaff_r4;
|
|
|
|
puVar1 = (undefined1 *)unaff_r4[0x11];
|
|
if ((puVar1 != &stack0x0000052c) && (puVar1 != (undefined1 *)0x0)) {
|
|
if ((uint)(*unaff_r4 - (int)puVar1) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(puVar1,*unaff_r4 - (int)puVar1);
|
|
}
|
|
else {
|
|
operator_delete(puVar1);
|
|
}
|
|
}
|
|
puVar1 = (undefined1 *)unaff_r4[0x17];
|
|
if ((puVar1 != &stack0x00000574) && (puVar1 != (undefined1 *)0x0)) {
|
|
if ((uint)(unaff_r4[0x12] - (int)puVar1) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(puVar1,unaff_r4[0x12] - (int)puVar1);
|
|
}
|
|
else {
|
|
operator_delete(puVar1);
|
|
}
|
|
}
|
|
std::locale::~locale((locale *)&stack0x0000058c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004605c @ 0004605c
|
|
|
|
void FUN_0004605c(facet *param_1)
|
|
|
|
{
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000460f4 @ 000460f4
|
|
|
|
void FUN_000460f4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11)
|
|
|
|
{
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_c = param_5;
|
|
local_1c = param_7;
|
|
local_18 = param_8;
|
|
local_20 = param_6;
|
|
local_14 = param_3;
|
|
local_10 = param_4;
|
|
FUN_00046654(param_1,&local_14,&local_20,param_9,param_10,param_11,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004612a @ 0004612a
|
|
|
|
void FUN_0004612a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11)
|
|
|
|
{
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_c = param_5;
|
|
local_1c = param_7;
|
|
local_18 = param_8;
|
|
local_20 = param_6;
|
|
local_14 = param_3;
|
|
local_10 = param_4;
|
|
FUN_00046e7c(param_1,&local_14,&local_20,param_9,param_10,param_11,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00046160 @ 00046160
|
|
|
|
void FUN_00046160(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11)
|
|
|
|
{
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_c = param_5;
|
|
local_1c = param_7;
|
|
local_18 = param_8;
|
|
local_20 = param_6;
|
|
local_14 = param_3;
|
|
local_10 = param_4;
|
|
FUN_00047274(param_1,&local_14,&local_20,param_9,param_10,param_11,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00046196 @ 00046196
|
|
|
|
void FUN_00046196(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11)
|
|
|
|
{
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_c = param_5;
|
|
local_1c = param_7;
|
|
local_18 = param_8;
|
|
local_20 = param_6;
|
|
local_14 = param_3;
|
|
local_10 = param_4;
|
|
FUN_00047664(param_1,&local_14,&local_20,param_9,param_10,param_11,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000461cc @ 000461cc
|
|
|
|
void FUN_000461cc(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11)
|
|
|
|
{
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_c = param_5;
|
|
local_1c = param_7;
|
|
local_18 = param_8;
|
|
local_20 = param_6;
|
|
local_14 = param_3;
|
|
local_10 = param_4;
|
|
FUN_00047a54(param_1,&local_14,&local_20,param_9,param_10,param_11,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00046202 @ 00046202
|
|
|
|
void FUN_00046202(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11)
|
|
|
|
{
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_c = param_5;
|
|
local_1c = param_7;
|
|
local_18 = param_8;
|
|
local_20 = param_6;
|
|
local_14 = param_3;
|
|
local_10 = param_4;
|
|
FUN_000482e4(param_1,&local_14,&local_20,param_9,param_10,param_11,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00046238 @ 00046238
|
|
|
|
void FUN_00046238(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,byte *param_10,undefined4 *param_11)
|
|
|
|
{
|
|
undefined4 local_30 [2];
|
|
undefined4 local_28;
|
|
undefined4 local_24;
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
|
|
local_14 = param_5;
|
|
local_24 = param_7;
|
|
local_20 = param_8;
|
|
local_28 = param_6;
|
|
local_1c = param_3;
|
|
local_18 = param_4;
|
|
FUN_0004845c(param_1,&local_1c,&local_28,param_9,param_10,local_30,0);
|
|
if (-1 < (int)((uint)*param_10 << 0x1d)) {
|
|
*param_11 = local_30[0];
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004627a @ 0004627a
|
|
|
|
void FUN_0004627a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11)
|
|
|
|
{
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_c = param_5;
|
|
local_1c = param_7;
|
|
local_18 = param_8;
|
|
local_20 = param_6;
|
|
local_14 = param_3;
|
|
local_10 = param_4;
|
|
FUN_000488bc(param_1,&local_14,&local_20,param_9,param_10,param_11,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000462b0 @ 000462b0
|
|
|
|
void FUN_000462b0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11)
|
|
|
|
{
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_c = param_5;
|
|
local_1c = param_7;
|
|
local_18 = param_8;
|
|
local_20 = param_6;
|
|
local_14 = param_3;
|
|
local_10 = param_4;
|
|
FUN_00048a34(param_1,&local_14,&local_20,param_9,param_10,param_11,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000462e6 @ 000462e6
|
|
|
|
void FUN_000462e6(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,undefined4 param_10,undefined4 param_11)
|
|
|
|
{
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined4 local_18;
|
|
undefined4 local_14;
|
|
undefined4 local_10;
|
|
undefined4 local_c;
|
|
|
|
local_c = param_5;
|
|
local_1c = param_7;
|
|
local_18 = param_8;
|
|
local_20 = param_6;
|
|
local_14 = param_3;
|
|
local_10 = param_4;
|
|
FUN_0004845c(param_1,&local_14,&local_20,param_9,param_10,param_11,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004631c @ 0004631c
|
|
|
|
void FUN_0004631c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 param_6)
|
|
|
|
{
|
|
bool bVar1;
|
|
bool bVar2;
|
|
locale *this;
|
|
int *piVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
bool bVar6;
|
|
bool bVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
char cVar10;
|
|
int local_a4 [16];
|
|
int local_64;
|
|
int *local_60;
|
|
int local_5c [16];
|
|
int local_1c;
|
|
int *local_18;
|
|
|
|
this = (locale *)std::locale::locale((locale *)local_5c,(locale *)(param_4 + 0x20));
|
|
piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct<wchar_t>::id);
|
|
std::locale::~locale((locale *)local_5c);
|
|
(**(code **)(*piVar3 + 0x14))(local_5c,piVar3);
|
|
(**(code **)(*piVar3 + 0x18))(local_a4,piVar3);
|
|
cVar10 = *(char *)((int)param_2 + 9);
|
|
bVar1 = true;
|
|
uVar9 = 0;
|
|
bVar7 = true;
|
|
while( true ) {
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (cVar10 == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 == (int *)0x0) || (*(char *)((int)param_3 + 9) != '\0')) {
|
|
cVar10 = (char)param_3[2];
|
|
}
|
|
else {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
cVar10 = iVar4 == -1;
|
|
*(char *)(param_3 + 2) = cVar10;
|
|
}
|
|
if ((char)param_2[2] == cVar10) goto code_r0x000464b6;
|
|
if (*(char *)((int)param_2 + 9) == '\0') {
|
|
piVar3 = (int *)*param_2;
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
else {
|
|
iVar4 = param_2[1];
|
|
}
|
|
bVar6 = false;
|
|
if ((bVar1) && (bVar6 = true, iVar4 != local_18[uVar9])) {
|
|
bVar6 = false;
|
|
}
|
|
bVar1 = bVar6;
|
|
bVar6 = false;
|
|
if ((bVar7) && (bVar6 = true, iVar4 != local_60[uVar9])) {
|
|
bVar6 = false;
|
|
}
|
|
uVar8 = uVar9 + 1;
|
|
bVar2 = false;
|
|
bVar7 = false;
|
|
if (!(bool)(bVar1 | bVar6)) goto LAB_000464ca;
|
|
if ((bVar1) && ((uint)(local_1c - (int)local_18 >> 2) <= uVar8)) break;
|
|
if ((bVar6) && (bVar2 = bVar1, bVar7 = true, (uint)(local_64 - (int)local_60 >> 2) <= uVar8))
|
|
goto LAB_000464ca;
|
|
piVar3 = (int *)*param_2;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
cVar10 = '\0';
|
|
*(undefined1 *)((int)param_2 + 9) = 0;
|
|
uVar9 = uVar8;
|
|
bVar7 = bVar6;
|
|
}
|
|
bVar2 = true;
|
|
bVar7 = bVar6;
|
|
LAB_000464ca:
|
|
uVar9 = uVar9 + 1;
|
|
piVar3 = (int *)*param_2;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_2 + 9) = 0;
|
|
bVar1 = bVar2;
|
|
code_r0x000464b6:
|
|
bVar1 = bVar1 && (uint)(local_1c - (int)local_18 >> 2) <= uVar9;
|
|
bVar6 = false;
|
|
if ((bVar7) && (bVar6 = true, uVar9 < (uint)(local_64 - (int)local_60 >> 2))) {
|
|
bVar6 = false;
|
|
}
|
|
if ((bVar1) || (bVar6)) {
|
|
*param_5 = 0;
|
|
*(bool *)param_6 = bVar1;
|
|
}
|
|
else {
|
|
*param_5 = 4;
|
|
}
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar4 = param_2[1];
|
|
iVar5 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar4;
|
|
param_1[2] = iVar5;
|
|
if ((local_60 != local_a4) && (local_60 != (int *)0x0)) {
|
|
if ((uint)(local_a4[0] - (int)local_60) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_60,local_a4[0] - (int)local_60);
|
|
}
|
|
else {
|
|
operator_delete(local_60);
|
|
}
|
|
}
|
|
if ((local_18 != local_5c) && (local_18 != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_5c[0] - (int)local_18)) {
|
|
operator_delete(local_18);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_18,local_5c[0] - (int)local_18);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00046654 @ 00046654
|
|
|
|
void FUN_00046654(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
uVar5 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar5 = 0;
|
|
*param_6 = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar4 = FUN_00046c84(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar5 = 0;
|
|
if (iVar4 == 0) {
|
|
uVar5 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar5;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar4 = param_2[1];
|
|
iVar6 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar4;
|
|
param_1[2] = iVar6;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00046858 @ 00046858
|
|
|
|
uint FUN_00046858(int *param_1,int *param_2,uint param_3,int *param_4)
|
|
|
|
{
|
|
bool bVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
int local_28;
|
|
int local_24;
|
|
int local_20;
|
|
int local_1c;
|
|
int local_18;
|
|
|
|
uVar2 = std::priv::__narrow_atoms();
|
|
iVar3 = std::priv::__narrow_atoms();
|
|
(**(code **)(*param_4 + 0x2c))(param_4,uVar2,iVar3 + 5,&local_28);
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
if (iVar3 == local_24) {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
uVar5 = 2;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
uVar5 = 2;
|
|
}
|
|
LAB_000468f8:
|
|
bVar1 = false;
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
}
|
|
else {
|
|
uVar5 = 0;
|
|
bVar1 = true;
|
|
if (iVar3 == local_28) {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
uVar5 = 0;
|
|
goto LAB_000468f8;
|
|
}
|
|
}
|
|
param_3 = param_3 & 0x38;
|
|
uVar6 = 0;
|
|
if (param_3 == 0x20) {
|
|
uVar7 = 0x20;
|
|
goto LAB_00046c7a;
|
|
}
|
|
if (param_3 != 0x10) {
|
|
if (param_3 == 8) {
|
|
uVar7 = 0x28;
|
|
goto LAB_00046c7a;
|
|
}
|
|
piVar4 = (int *)*param_1;
|
|
if ((piVar4 != (int *)0x0) && (!bVar1)) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar3;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar3 == -1;
|
|
}
|
|
uVar7 = 0x28;
|
|
if ((char)param_1[2] == (char)param_2[2]) goto LAB_00046c7a;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
if (iVar3 != local_20) goto LAB_00046c7a;
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
LAB_00046b1e:
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
piVar4 = (int *)*param_1;
|
|
if (piVar4 != (int *)0x0) goto LAB_00046b1e;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar3;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar3 == -1;
|
|
}
|
|
uVar6 = 1;
|
|
if ((char)param_1[2] == (char)param_2[2]) {
|
|
uVar7 = 0x20;
|
|
}
|
|
else {
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
if ((iVar3 == local_1c) || (uVar7 = 0x20, iVar3 == local_18)) {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
uVar6 = 0;
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
uVar7 = 0x40;
|
|
}
|
|
}
|
|
goto LAB_00046c7a;
|
|
}
|
|
piVar4 = (int *)*param_1;
|
|
if ((piVar4 != (int *)0x0) && (!bVar1)) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar3;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar3 == -1;
|
|
}
|
|
uVar7 = 0x40;
|
|
if ((char)param_1[2] == (char)param_2[2]) goto LAB_00046c7a;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
if (iVar3 != local_20) goto LAB_00046c7a;
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
LAB_00046a8a:
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
piVar4 = (int *)*param_1;
|
|
if (piVar4 != (int *)0x0) goto LAB_00046a8a;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar3;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar3 == -1;
|
|
}
|
|
uVar6 = 1;
|
|
if ((char)param_1[2] != (char)param_2[2]) {
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar3;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar3 == -1;
|
|
}
|
|
else {
|
|
iVar3 = param_1[1];
|
|
}
|
|
if ((iVar3 == local_1c) || (iVar3 == local_18)) {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
uVar6 = 0;
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
}
|
|
}
|
|
LAB_00046c7a:
|
|
return uVar7 | uVar5 | uVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00046c84 @ 00046c84
|
|
|
|
uint FUN_00046c84(int *param_1,int *param_2,int param_3,int *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
bool bVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
char *pcVar10;
|
|
char cVar11;
|
|
int local_98;
|
|
int local_70;
|
|
uint local_68;
|
|
int local_5c;
|
|
int local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar9 = *(int *)(param_8 + 0x10);
|
|
iVar2 = *(int *)(param_8 + 0x14);
|
|
local_5c = 0;
|
|
cVar11 = *(char *)((int)param_1 + 9);
|
|
local_68 = 1;
|
|
local_98 = -0x80000000;
|
|
iVar3 = __divsi3(0x80000000,param_3);
|
|
local_70 = param_5;
|
|
cVar1 = '\0';
|
|
local_58 = 0;
|
|
bVar7 = false;
|
|
uVar6 = (uint)(cVar11 == '\0');
|
|
while( true ) {
|
|
pcVar10 = acStack_54 + local_5c;
|
|
piVar4 = (int *)*param_1;
|
|
if ((piVar4 != (int *)0x0) && (uVar6 != 0)) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar5;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar5 == -1;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) {
|
|
cVar11 = (char)param_2[2];
|
|
}
|
|
else {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar5;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
cVar11 = iVar5 == -1;
|
|
*(char *)(param_2 + 2) = cVar11;
|
|
}
|
|
if ((char)param_1[2] == cVar11) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint *)piVar4[2] < (uint *)piVar4[3]) {
|
|
uVar6 = *(uint *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = uVar6;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = param_1[1];
|
|
}
|
|
iVar5 = local_58;
|
|
if (uVar6 == param_7 && iVar2 != iVar9) {
|
|
*pcVar10 = cVar1;
|
|
local_5c = local_5c + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
iVar8 = 0xff;
|
|
if (uVar6 < 0x80) {
|
|
iVar8 = std::priv::__digit_val_table(uVar6);
|
|
}
|
|
if (param_3 <= iVar8) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
local_70 = local_70 + 1;
|
|
if (local_58 < iVar3) {
|
|
bVar7 = true;
|
|
}
|
|
else {
|
|
iVar5 = local_58 * param_3 - iVar8;
|
|
bVar7 = (bool)(bVar7 | (local_58 != 0 && local_58 <= iVar5));
|
|
}
|
|
}
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
uVar6 = local_68;
|
|
local_58 = iVar5;
|
|
}
|
|
if ((iVar2 != iVar9) && (local_5c != 0)) {
|
|
*pcVar10 = cVar1;
|
|
pcVar10 = acStack_54 + local_5c + 1;
|
|
}
|
|
uVar6 = 0;
|
|
if (0 < local_70) {
|
|
if (bVar7) {
|
|
if (param_6 == 0) {
|
|
local_98 = 0x7fffffff;
|
|
}
|
|
*param_4 = local_98;
|
|
}
|
|
else {
|
|
if (param_6 == 0) {
|
|
local_58 = -local_58;
|
|
}
|
|
*param_4 = local_58;
|
|
uVar6 = local_68;
|
|
if (iVar2 != iVar9) {
|
|
uVar6 = std::priv::__valid_grouping
|
|
(acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10))
|
|
;
|
|
}
|
|
}
|
|
}
|
|
return uVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00046e7c @ 00046e7c
|
|
|
|
void FUN_00046e7c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined2 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
uVar5 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar5 = 0;
|
|
*param_6 = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar4 = FUN_00047080(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar5 = 0;
|
|
if (iVar4 == 0) {
|
|
uVar5 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar5;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar4 = param_2[1];
|
|
iVar6 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar4;
|
|
param_1[2] = iVar6;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00047080 @ 00047080
|
|
|
|
uint FUN_00047080(int *param_1,int *param_2,uint param_3,short *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
bool bVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
char cVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
char *pcVar10;
|
|
char cVar11;
|
|
int local_70;
|
|
uint local_68;
|
|
uint local_5c;
|
|
int local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar8 = *(int *)(param_8 + 0x10);
|
|
iVar2 = *(int *)(param_8 + 0x14);
|
|
local_58 = 0;
|
|
cVar11 = *(char *)((int)param_1 + 9);
|
|
local_68 = 1;
|
|
uVar3 = __udivsi3(0xffff,param_3 & 0xffff);
|
|
local_70 = param_5;
|
|
cVar7 = '\0';
|
|
local_5c = 0;
|
|
bVar1 = false;
|
|
uVar6 = (uint)(cVar11 == '\0');
|
|
while( true ) {
|
|
pcVar10 = acStack_54 + local_58;
|
|
piVar4 = (int *)*param_1;
|
|
if ((piVar4 != (int *)0x0) && (uVar6 != 0)) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar5;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar5 == -1;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) {
|
|
cVar11 = (char)param_2[2];
|
|
}
|
|
else {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar5;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
cVar11 = iVar5 == -1;
|
|
*(char *)(param_2 + 2) = cVar11;
|
|
}
|
|
if ((char)param_1[2] == cVar11) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint *)piVar4[2] < (uint *)piVar4[3]) {
|
|
uVar6 = *(uint *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = uVar6;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = param_1[1];
|
|
}
|
|
uVar9 = local_5c;
|
|
if (uVar6 == param_7 && iVar2 != iVar8) {
|
|
*pcVar10 = cVar7;
|
|
local_58 = local_58 + 1;
|
|
cVar7 = '\0';
|
|
}
|
|
else {
|
|
iVar5 = 0xff;
|
|
if (uVar6 < 0x80) {
|
|
iVar5 = std::priv::__digit_val_table(uVar6);
|
|
}
|
|
if ((int)param_3 <= iVar5) break;
|
|
uVar6 = local_5c & 0xffff;
|
|
cVar7 = cVar7 + '\x01';
|
|
local_70 = local_70 + 1;
|
|
if (uVar3 < uVar6) {
|
|
bVar1 = true;
|
|
}
|
|
else {
|
|
uVar9 = iVar5 + uVar6 * param_3;
|
|
if ((local_5c & 0xffff) != 0) {
|
|
bVar1 = (bool)(bVar1 | (uVar9 & 0xffff) <= uVar6);
|
|
}
|
|
}
|
|
}
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
uVar6 = local_68;
|
|
local_5c = uVar9;
|
|
}
|
|
if ((iVar2 != iVar8) && (local_58 != 0)) {
|
|
*pcVar10 = cVar7;
|
|
pcVar10 = acStack_54 + local_58 + 1;
|
|
}
|
|
uVar6 = 0;
|
|
if (0 < local_70) {
|
|
if (bVar1) {
|
|
*param_4 = -1;
|
|
}
|
|
else {
|
|
if (param_6 == 1) {
|
|
local_5c._0_2_ = -(short)local_5c;
|
|
}
|
|
*param_4 = (short)local_5c;
|
|
uVar6 = local_68;
|
|
if (iVar2 != iVar8) {
|
|
uVar6 = std::priv::__valid_grouping
|
|
(acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10))
|
|
;
|
|
}
|
|
}
|
|
}
|
|
return uVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00047274 @ 00047274
|
|
|
|
void FUN_00047274(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
uVar5 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar5 = 0;
|
|
*param_6 = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar4 = FUN_00047478(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar5 = 0;
|
|
if (iVar4 == 0) {
|
|
uVar5 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar5;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar4 = param_2[1];
|
|
iVar6 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar4;
|
|
param_1[2] = iVar6;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00047478 @ 00047478
|
|
|
|
uint FUN_00047478(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
bool bVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
char *pcVar10;
|
|
char cVar11;
|
|
int local_70;
|
|
uint local_68;
|
|
int local_5c;
|
|
uint local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar8 = *(int *)(param_8 + 0x10);
|
|
iVar2 = *(int *)(param_8 + 0x14);
|
|
local_5c = 0;
|
|
cVar11 = *(char *)((int)param_1 + 9);
|
|
local_68 = 1;
|
|
uVar3 = __udivsi3(0xffffffff,param_3);
|
|
local_70 = param_5;
|
|
cVar1 = '\0';
|
|
local_58 = 0;
|
|
bVar7 = false;
|
|
uVar6 = (uint)(cVar11 == '\0');
|
|
while( true ) {
|
|
pcVar10 = acStack_54 + local_5c;
|
|
piVar4 = (int *)*param_1;
|
|
if ((piVar4 != (int *)0x0) && (uVar6 != 0)) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar5;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar5 == -1;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) {
|
|
cVar11 = (char)param_2[2];
|
|
}
|
|
else {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar5;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
cVar11 = iVar5 == -1;
|
|
*(char *)(param_2 + 2) = cVar11;
|
|
}
|
|
if ((char)param_1[2] == cVar11) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint *)piVar4[2] < (uint *)piVar4[3]) {
|
|
uVar6 = *(uint *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = uVar6;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = param_1[1];
|
|
}
|
|
uVar9 = local_58;
|
|
if (uVar6 == param_7 && iVar2 != iVar8) {
|
|
*pcVar10 = cVar1;
|
|
local_5c = local_5c + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
iVar5 = 0xff;
|
|
if (uVar6 < 0x80) {
|
|
iVar5 = std::priv::__digit_val_table(uVar6);
|
|
}
|
|
if (param_3 <= iVar5) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
local_70 = local_70 + 1;
|
|
if (uVar3 < local_58) {
|
|
bVar7 = true;
|
|
}
|
|
else {
|
|
uVar9 = iVar5 + local_58 * param_3;
|
|
bVar7 = (bool)(bVar7 | (local_58 != 0 && uVar9 <= local_58));
|
|
}
|
|
}
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
uVar6 = local_68;
|
|
local_58 = uVar9;
|
|
}
|
|
if ((iVar2 != iVar8) && (local_5c != 0)) {
|
|
*pcVar10 = cVar1;
|
|
pcVar10 = acStack_54 + local_5c + 1;
|
|
}
|
|
uVar6 = 0;
|
|
if (0 < local_70) {
|
|
if (bVar7) {
|
|
*param_4 = 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = -local_58;
|
|
if (param_6 == 0) {
|
|
uVar6 = local_58;
|
|
}
|
|
*param_4 = uVar6;
|
|
uVar6 = local_68;
|
|
if (iVar2 != iVar8) {
|
|
uVar6 = std::priv::__valid_grouping
|
|
(acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10))
|
|
;
|
|
}
|
|
}
|
|
}
|
|
return uVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00047664 @ 00047664
|
|
|
|
void FUN_00047664(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
uVar5 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar5 = 0;
|
|
*param_6 = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar4 = FUN_00047868(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar5 = 0;
|
|
if (iVar4 == 0) {
|
|
uVar5 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar5;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar4 = param_2[1];
|
|
iVar6 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar4;
|
|
param_1[2] = iVar6;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00047868 @ 00047868
|
|
|
|
uint FUN_00047868(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
bool bVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
char *pcVar10;
|
|
char cVar11;
|
|
int local_70;
|
|
uint local_68;
|
|
int local_5c;
|
|
uint local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar8 = *(int *)(param_8 + 0x10);
|
|
iVar2 = *(int *)(param_8 + 0x14);
|
|
local_5c = 0;
|
|
cVar11 = *(char *)((int)param_1 + 9);
|
|
local_68 = 1;
|
|
uVar3 = __udivsi3(0xffffffff,param_3);
|
|
local_70 = param_5;
|
|
cVar1 = '\0';
|
|
local_58 = 0;
|
|
bVar7 = false;
|
|
uVar6 = (uint)(cVar11 == '\0');
|
|
while( true ) {
|
|
pcVar10 = acStack_54 + local_5c;
|
|
piVar4 = (int *)*param_1;
|
|
if ((piVar4 != (int *)0x0) && (uVar6 != 0)) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar5;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar5 == -1;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) {
|
|
cVar11 = (char)param_2[2];
|
|
}
|
|
else {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar5;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
cVar11 = iVar5 == -1;
|
|
*(char *)(param_2 + 2) = cVar11;
|
|
}
|
|
if ((char)param_1[2] == cVar11) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint *)piVar4[2] < (uint *)piVar4[3]) {
|
|
uVar6 = *(uint *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = uVar6;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = param_1[1];
|
|
}
|
|
uVar9 = local_58;
|
|
if (uVar6 == param_7 && iVar2 != iVar8) {
|
|
*pcVar10 = cVar1;
|
|
local_5c = local_5c + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
iVar5 = 0xff;
|
|
if (uVar6 < 0x80) {
|
|
iVar5 = std::priv::__digit_val_table(uVar6);
|
|
}
|
|
if (param_3 <= iVar5) break;
|
|
cVar1 = cVar1 + '\x01';
|
|
local_70 = local_70 + 1;
|
|
if (uVar3 < local_58) {
|
|
bVar7 = true;
|
|
}
|
|
else {
|
|
uVar9 = iVar5 + local_58 * param_3;
|
|
bVar7 = (bool)(bVar7 | (local_58 != 0 && uVar9 <= local_58));
|
|
}
|
|
}
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
uVar6 = local_68;
|
|
local_58 = uVar9;
|
|
}
|
|
if ((iVar2 != iVar8) && (local_5c != 0)) {
|
|
*pcVar10 = cVar1;
|
|
pcVar10 = acStack_54 + local_5c + 1;
|
|
}
|
|
uVar6 = 0;
|
|
if (0 < local_70) {
|
|
if (bVar7) {
|
|
*param_4 = 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = -local_58;
|
|
if (param_6 == 0) {
|
|
uVar6 = local_58;
|
|
}
|
|
*param_4 = uVar6;
|
|
uVar6 = local_68;
|
|
if (iVar2 != iVar8) {
|
|
uVar6 = std::priv::__valid_grouping
|
|
(acStack_54,pcVar10,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10))
|
|
;
|
|
}
|
|
}
|
|
}
|
|
return uVar6;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00047a54 @ 00047a54
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_00047a54(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,float *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
undefined1 *local_134 [4];
|
|
undefined1 **local_124;
|
|
undefined1 local_120;
|
|
undefined1 auStack_11f [256];
|
|
undefined1 auStack_1f [3];
|
|
undefined1 **local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
__aeabi_memclr(auStack_11f,0x100);
|
|
local_120 = 0;
|
|
local_134[0] = auStack_1f;
|
|
local_124 = (undefined1 **)&local_120;
|
|
local_1c = (undefined1 **)&local_120;
|
|
iVar3 = FUN_00047bcc(local_134,param_2,param_3,uVar1,uVar2);
|
|
uVar6 = 4;
|
|
if (iVar3 == 1) {
|
|
uVar6 = 0;
|
|
std::priv::__string_to_float((__basic_iostring *)local_134,param_6);
|
|
}
|
|
*param_5 = uVar6;
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar3;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar3 == -1;
|
|
}
|
|
piVar4 = (int *)*param_3;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_3[1] = iVar3;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar3 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar3 = param_2[1];
|
|
iVar5 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar3;
|
|
param_1[2] = iVar5;
|
|
if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_120 != local_1c)) {
|
|
if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00047bcc @ 00047bcc
|
|
|
|
undefined4 FUN_00047bcc(undefined4 param_1,int *param_2,int *param_3,ctype *param_4,int *param_5)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
wchar_t wVar6;
|
|
undefined4 uVar7;
|
|
int local_74;
|
|
int local_70;
|
|
undefined2 local_6c;
|
|
wchar_t local_68;
|
|
wchar_t local_64;
|
|
wchar_t local_60;
|
|
wchar_t local_5c;
|
|
wchar_t awStack_58 [10];
|
|
undefined1 local_30;
|
|
int local_2c [4];
|
|
int *local_1c;
|
|
int *local_18;
|
|
|
|
(**(code **)(*param_5 + 0x10))(local_2c,param_5);
|
|
local_30 = 1;
|
|
iVar1 = (**(code **)(*param_5 + 8))(param_5);
|
|
(**(code **)(*param_5 + 0xc))(param_5);
|
|
std::priv::_Initialize_get_float(param_4,&local_5c,&local_60,&local_64,&local_68,awStack_58);
|
|
FUN_00047f10(&local_74,*param_2,param_2[1],param_2[2],*param_3,param_3[1],param_3[2],param_1,
|
|
local_5c,local_60);
|
|
*(undefined2 *)(param_2 + 2) = local_6c;
|
|
*param_2 = local_74;
|
|
param_2[1] = local_70;
|
|
if (local_18 == local_1c) {
|
|
uVar2 = FUN_000481d4(param_2,*param_3,param_3[1],param_3[2],param_1,awStack_58);
|
|
}
|
|
else {
|
|
uVar2 = FUN_00048060(param_2);
|
|
}
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
uVar5 = 0;
|
|
if ((char)param_2[2] != (char)param_3[2]) {
|
|
if (*(char *)((int)param_2 + 9) == '\0') {
|
|
piVar3 = (int *)*param_2;
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
else {
|
|
iVar4 = param_2[1];
|
|
}
|
|
uVar5 = 0;
|
|
if (iVar4 == iVar1) {
|
|
FUN_00040cb0(param_1,0x2e);
|
|
piVar3 = (int *)*param_2;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_2 + 9) = 0;
|
|
uVar5 = FUN_000481d4(param_2,*param_3,param_3[1],param_3[2],param_1,awStack_58);
|
|
}
|
|
}
|
|
uVar7 = 0;
|
|
if ((uVar2 | uVar5) == 1) {
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar1 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar1 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar1;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar1 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar1 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar1 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar1;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar1 == -1;
|
|
}
|
|
uVar7 = 1;
|
|
if ((char)param_2[2] != (char)param_3[2]) {
|
|
if (*(char *)((int)param_2 + 9) == '\0') {
|
|
piVar3 = (int *)*param_2;
|
|
if ((wchar_t *)piVar3[2] < (wchar_t *)piVar3[3]) {
|
|
wVar6 = *(wchar_t *)piVar3[2];
|
|
}
|
|
else {
|
|
wVar6 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = wVar6;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = wVar6 == L'\xffffffff';
|
|
}
|
|
else {
|
|
wVar6 = param_2[1];
|
|
}
|
|
uVar7 = 1;
|
|
if ((wVar6 == local_64) || (wVar6 == local_68)) {
|
|
FUN_00040cb0(param_1,0x65);
|
|
piVar3 = (int *)*param_2;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_2 + 9) = 0;
|
|
FUN_00047f10(&local_74,*param_2,param_2[1],param_2[2],*param_3,param_3[1],param_3[2],param_1
|
|
,local_5c,local_60);
|
|
*(undefined2 *)(param_2 + 2) = local_6c;
|
|
*param_2 = local_74;
|
|
param_2[1] = local_70;
|
|
uVar7 = FUN_000481d4(param_2,*param_3,param_3[1],param_3[2],param_1,awStack_58);
|
|
}
|
|
}
|
|
}
|
|
if ((local_18 != local_2c) && (local_18 != (int *)0x0)) {
|
|
if ((uint)(local_2c[0] - (int)local_18) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_18,local_2c[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
return uVar7;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00047f10 @ 00047f10
|
|
|
|
void FUN_00047f10(undefined4 *param_1,int *param_2,int param_3,uint param_4,int *param_5,
|
|
undefined4 param_6,uint param_7,undefined4 param_8,int param_9,int param_10)
|
|
|
|
{
|
|
int iVar1;
|
|
code *pcVar2;
|
|
int local_20;
|
|
|
|
local_20 = param_3;
|
|
if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
local_20 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
local_20 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_4 = param_4 & 0xffff0000 | (uint)(local_20 == -1) | 0x100;
|
|
}
|
|
if ((param_5 != (int *)0x0) && ((param_7 & 0xff00) == 0)) {
|
|
if ((int *)param_5[2] < (int *)param_5[3]) {
|
|
iVar1 = *(int *)param_5[2];
|
|
}
|
|
else {
|
|
iVar1 = (**(code **)(*param_5 + 0x20))();
|
|
}
|
|
param_7 = (uint)(iVar1 == -1);
|
|
}
|
|
if ((param_4 & 0xff) == (param_7 & 0xff)) goto LAB_00048052;
|
|
if ((param_4 & 0xff00) == 0) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
local_20 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
local_20 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_4 = param_4 & 0xffff0000 | (uint)(local_20 == -1) | 0x100;
|
|
if (local_20 != param_9) goto LAB_0004801c;
|
|
LAB_00047fce:
|
|
if ((uint)param_2[2] < (uint)param_2[3]) {
|
|
param_2[2] = param_2[2] + 4;
|
|
local_20 = param_9;
|
|
}
|
|
else {
|
|
pcVar2 = *(code **)(*param_2 + 0x24);
|
|
LAB_00048046:
|
|
(*pcVar2)(param_2);
|
|
local_20 = param_9;
|
|
}
|
|
}
|
|
else {
|
|
if (local_20 == param_9) goto LAB_00047fce;
|
|
LAB_0004801c:
|
|
if (local_20 != param_10) goto LAB_00048052;
|
|
FUN_00040cb0(param_8,0x2d);
|
|
if ((uint)param_2[3] <= (uint)param_2[2]) {
|
|
pcVar2 = *(code **)(*param_2 + 0x24);
|
|
param_9 = param_10;
|
|
goto LAB_00048046;
|
|
}
|
|
param_2[2] = param_2[2] + 4;
|
|
local_20 = param_10;
|
|
}
|
|
param_4 = param_4 & 0xffff00ff;
|
|
LAB_00048052:
|
|
*param_1 = param_2;
|
|
param_1[1] = local_20;
|
|
param_1[2] = param_4;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048060 @ 00048060
|
|
|
|
undefined4
|
|
FUN_00048060(int *param_1,int *param_2,undefined4 param_3,uint param_4,undefined4 param_5,
|
|
wchar_t *param_6,wchar_t param_7,int param_8,undefined1 *param_9)
|
|
|
|
{
|
|
char cVar1;
|
|
undefined1 uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
char *pcVar5;
|
|
bool bVar6;
|
|
undefined4 local_74;
|
|
int local_5c;
|
|
wchar_t local_58;
|
|
char local_54 [64];
|
|
|
|
local_5c = 0;
|
|
bVar6 = *(char *)((int)param_1 + 9) == '\0';
|
|
cVar1 = '\0';
|
|
local_74 = 0;
|
|
while( true ) {
|
|
pcVar5 = local_54 + local_5c;
|
|
piVar3 = (int *)*param_1;
|
|
if ((piVar3 != (int *)0x0) && (bVar6)) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_1[1] = iVar4;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar4 == -1;
|
|
}
|
|
if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
iVar4 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_4 = iVar4 == -1 | 0x100;
|
|
}
|
|
if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((wchar_t *)piVar3[2] < (wchar_t *)piVar3[3]) {
|
|
local_58 = *(wchar_t *)piVar3[2];
|
|
}
|
|
else {
|
|
local_58 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_1[1] = local_58;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = local_58 == L'\xffffffff';
|
|
}
|
|
else {
|
|
local_58 = param_1[1];
|
|
}
|
|
iVar4 = std::priv::__get_fdigit_or_sep(&local_58,param_7,param_6);
|
|
if (iVar4 != 1) break;
|
|
if (local_58 == L',') {
|
|
*pcVar5 = cVar1;
|
|
local_5c = local_5c + 1;
|
|
cVar1 = '\0';
|
|
}
|
|
else {
|
|
FUN_00040cb0(param_5,local_58 & 0xff);
|
|
cVar1 = cVar1 + '\x01';
|
|
local_74 = 1;
|
|
}
|
|
piVar3 = (int *)*param_1;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
bVar6 = true;
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
}
|
|
if (local_5c != 0) {
|
|
*pcVar5 = cVar1;
|
|
pcVar5 = local_54 + local_5c + 1;
|
|
}
|
|
uVar2 = std::priv::__valid_grouping
|
|
(local_54,pcVar5,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
*param_9 = uVar2;
|
|
return local_74;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000481d4 @ 000481d4
|
|
|
|
undefined4
|
|
FUN_000481d4(int *param_1,int *param_2,undefined4 param_3,uint param_4,undefined4 param_5,
|
|
wchar_t *param_6)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
bool bVar3;
|
|
undefined4 local_20;
|
|
wchar_t local_18;
|
|
|
|
local_20 = 0;
|
|
bVar3 = *(char *)((int)param_1 + 9) == '\0';
|
|
while( true ) {
|
|
piVar1 = (int *)*param_1;
|
|
if ((piVar1 != (int *)0x0) && (bVar3)) {
|
|
if ((int *)piVar1[2] < (int *)piVar1[3]) {
|
|
iVar2 = *(int *)piVar1[2];
|
|
}
|
|
else {
|
|
iVar2 = (**(code **)(*piVar1 + 0x20))();
|
|
}
|
|
param_1[1] = iVar2;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar2 == -1;
|
|
}
|
|
if ((param_2 != (int *)0x0) && ((param_4 & 0xff00) == 0)) {
|
|
if ((int *)param_2[2] < (int *)param_2[3]) {
|
|
iVar2 = *(int *)param_2[2];
|
|
}
|
|
else {
|
|
iVar2 = (**(code **)(*param_2 + 0x20))(param_2);
|
|
}
|
|
param_4 = iVar2 == -1 | 0x100;
|
|
}
|
|
if ((uint)*(byte *)(param_1 + 2) == (param_4 & 0xff)) {
|
|
return local_20;
|
|
}
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar1 = (int *)*param_1;
|
|
if ((wchar_t *)piVar1[2] < (wchar_t *)piVar1[3]) {
|
|
local_18 = *(wchar_t *)piVar1[2];
|
|
}
|
|
else {
|
|
local_18 = (**(code **)(*piVar1 + 0x20))();
|
|
}
|
|
param_1[1] = local_18;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = local_18 == L'\xffffffff';
|
|
}
|
|
else {
|
|
local_18 = param_1[1];
|
|
}
|
|
iVar2 = std::priv::__get_fdigit(&local_18,param_6);
|
|
if (iVar2 == 0) break;
|
|
FUN_00040cb0(param_5,local_18 & 0xff);
|
|
piVar1 = (int *)*param_1;
|
|
if ((uint)piVar1[2] < (uint)piVar1[3]) {
|
|
piVar1[2] = piVar1[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
bVar3 = true;
|
|
local_20 = 1;
|
|
}
|
|
return local_20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000482e4 @ 000482e4
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_000482e4(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,double *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
undefined1 *local_134 [4];
|
|
undefined1 **local_124;
|
|
undefined1 local_120;
|
|
undefined1 auStack_11f [256];
|
|
undefined1 auStack_1f [3];
|
|
undefined1 **local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
__aeabi_memclr(auStack_11f,0x100);
|
|
local_120 = 0;
|
|
local_134[0] = auStack_1f;
|
|
local_124 = (undefined1 **)&local_120;
|
|
local_1c = (undefined1 **)&local_120;
|
|
iVar3 = FUN_00047bcc(local_134,param_2,param_3,uVar1,uVar2);
|
|
uVar6 = 4;
|
|
if (iVar3 == 1) {
|
|
uVar6 = 0;
|
|
std::priv::__string_to_float((__basic_iostring *)local_134,param_6);
|
|
}
|
|
*param_5 = uVar6;
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar3;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar3 == -1;
|
|
}
|
|
piVar4 = (int *)*param_3;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_3[1] = iVar3;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar3 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar3 = param_2[1];
|
|
iVar5 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar3;
|
|
param_1[2] = iVar5;
|
|
if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_120 != local_1c)) {
|
|
if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004845c @ 0004845c
|
|
|
|
void FUN_0004845c(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
uVar5 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar5 = 0;
|
|
*param_6 = 0;
|
|
param_6[1] = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar4 = FUN_00048660(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar5 = 0;
|
|
if (iVar4 == 0) {
|
|
uVar5 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar5;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar4 = param_2[1];
|
|
iVar6 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar4;
|
|
param_1[2] = iVar6;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048660 @ 00048660
|
|
|
|
uint FUN_00048660(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
bool bVar1;
|
|
longlong lVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
char cVar7;
|
|
bool bVar8;
|
|
int iVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
char cVar12;
|
|
undefined8 uVar13;
|
|
longlong lVar14;
|
|
int local_7c;
|
|
uint local_70;
|
|
char *local_68;
|
|
int local_60;
|
|
uint local_5c;
|
|
uint local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar9 = *(int *)(param_8 + 0x10);
|
|
iVar3 = *(int *)(param_8 + 0x14);
|
|
local_70 = 1;
|
|
uVar13 = __aeabi_uldivmod(0xffffffff,0xffffffff,param_3);
|
|
uVar10 = (uint)((ulonglong)uVar13 >> 0x20);
|
|
local_7c = param_5;
|
|
cVar7 = '\0';
|
|
local_60 = 0;
|
|
bVar8 = false;
|
|
uVar6 = (uint)(*(char *)((int)param_1 + 9) == '\0');
|
|
lVar2 = 0;
|
|
while( true ) {
|
|
local_5c = (uint)((ulonglong)lVar2 >> 0x20);
|
|
local_58 = (uint)lVar2;
|
|
local_68 = acStack_54 + local_60;
|
|
piVar4 = (int *)*param_1;
|
|
if ((piVar4 != (int *)0x0) && (uVar6 != 0)) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = iVar5;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar5 == -1;
|
|
}
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) {
|
|
cVar12 = (char)param_2[2];
|
|
}
|
|
else {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar5 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar5;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
cVar12 = iVar5 == -1;
|
|
*(char *)(param_2 + 2) = cVar12;
|
|
}
|
|
if ((char)param_1[2] == cVar12) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint *)piVar4[2] < (uint *)piVar4[3]) {
|
|
uVar6 = *(uint *)piVar4[2];
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_1[1] = uVar6;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = uVar6 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = param_1[1];
|
|
}
|
|
lVar14 = lVar2;
|
|
if (uVar6 == param_7 && iVar3 != iVar9) {
|
|
*local_68 = cVar7;
|
|
local_60 = local_60 + 1;
|
|
cVar7 = '\0';
|
|
}
|
|
else {
|
|
uVar11 = 0xff;
|
|
if (uVar6 < 0x80) {
|
|
uVar11 = std::priv::__digit_val_table(uVar6);
|
|
}
|
|
if (param_3 <= (int)uVar11) break;
|
|
bVar1 = (uint)uVar13 < local_58;
|
|
if (local_5c != uVar10) {
|
|
bVar1 = uVar10 < local_5c;
|
|
}
|
|
cVar7 = cVar7 + '\x01';
|
|
local_7c = local_7c + 1;
|
|
if (bVar1) {
|
|
bVar8 = true;
|
|
}
|
|
else {
|
|
lVar14 = __muldi3(local_58,local_5c,param_3,param_3 >> 0x1f);
|
|
lVar14 = lVar14 + (ulonglong)uVar11;
|
|
uVar6 = (uint)((ulonglong)lVar14 >> 0x20);
|
|
bVar1 = local_58 < (uint)lVar14;
|
|
if (uVar6 != local_5c) {
|
|
bVar1 = local_5c < uVar6;
|
|
}
|
|
bVar8 = (bool)(bVar8 | (lVar2 != 0 && !bVar1));
|
|
}
|
|
}
|
|
piVar4 = (int *)*param_1;
|
|
if ((uint)piVar4[2] < (uint)piVar4[3]) {
|
|
piVar4[2] = piVar4[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar4 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
uVar6 = local_70;
|
|
lVar2 = lVar14;
|
|
}
|
|
if ((iVar3 != iVar9) && (local_60 != 0)) {
|
|
*local_68 = cVar7;
|
|
local_68 = acStack_54 + local_60 + 1;
|
|
}
|
|
if (0 < local_7c) {
|
|
if (bVar8) {
|
|
*param_4 = 0xffffffff;
|
|
param_4[1] = 0xffffffff;
|
|
return 0;
|
|
}
|
|
uVar6 = -local_58;
|
|
if (param_6 == 0) {
|
|
uVar6 = local_58;
|
|
}
|
|
*param_4 = uVar6;
|
|
uVar6 = -(uint)(local_58 != 0) - local_5c;
|
|
if (param_6 == 0) {
|
|
uVar6 = local_5c;
|
|
}
|
|
param_4[1] = uVar6;
|
|
if (iVar3 != iVar9) {
|
|
local_70 = std::priv::__valid_grouping
|
|
(acStack_54,local_68,*(char **)(param_8 + 0x14),
|
|
*(char **)(param_8 + 0x10));
|
|
}
|
|
return local_70;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000488bc @ 000488bc
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_000488bc(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
longdouble *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
undefined1 *local_134 [4];
|
|
undefined1 **local_124;
|
|
undefined1 local_120;
|
|
undefined1 auStack_11f [256];
|
|
undefined1 auStack_1f [3];
|
|
undefined1 **local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
__aeabi_memclr(auStack_11f,0x100);
|
|
local_120 = 0;
|
|
local_134[0] = auStack_1f;
|
|
local_124 = (undefined1 **)&local_120;
|
|
local_1c = (undefined1 **)&local_120;
|
|
iVar3 = FUN_00047bcc(local_134,param_2,param_3,uVar1,uVar2);
|
|
uVar6 = 4;
|
|
if (iVar3 == 1) {
|
|
uVar6 = 0;
|
|
std::priv::__string_to_float((__basic_iostring *)local_134,param_6);
|
|
}
|
|
*param_5 = uVar6;
|
|
piVar4 = (int *)*param_2;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_2[1] = iVar3;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar3 == -1;
|
|
}
|
|
piVar4 = (int *)*param_3;
|
|
if ((piVar4 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar4[2] < (int *)piVar4[3]) {
|
|
iVar3 = *(int *)piVar4[2];
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*piVar4 + 0x20))();
|
|
}
|
|
param_3[1] = iVar3;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar3 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar3 = param_2[1];
|
|
iVar5 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar3;
|
|
param_1[2] = iVar5;
|
|
if (((local_1c != local_134) && (local_1c != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_120 != local_1c)) {
|
|
if ((uint)((int)local_134[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,(int)local_134[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048a34 @ 00048a34
|
|
|
|
void FUN_00048a34(int *param_1,int *param_2,int *param_3,int param_4,uint *param_5,
|
|
undefined4 *param_6)
|
|
|
|
{
|
|
locale *this;
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
undefined1 auStack_34 [4];
|
|
int local_30 [5];
|
|
int *local_1c;
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_4 + 0x20));
|
|
uVar1 = std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = FUN_00046858(param_2,param_3,*(undefined4 *)(param_4 + 4),uVar1);
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
uVar5 = 4;
|
|
if ((uVar2 & 1) != 0) {
|
|
uVar5 = 0;
|
|
*param_6 = 0;
|
|
param_6[1] = 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar3 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
uVar1 = (**(code **)(*piVar3 + 0xc))(piVar3);
|
|
(**(code **)(*piVar3 + 0x10))(local_30,piVar3);
|
|
iVar4 = FUN_00048c38(param_2,param_3,(int)uVar2 >> 2,param_6,uVar2 & 1,(uVar2 & 2) != 0,uVar1,
|
|
local_30,auStack_34);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if ((uint)(local_30[0] - (int)local_1c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
}
|
|
else {
|
|
operator_delete(local_1c);
|
|
}
|
|
}
|
|
uVar5 = 0;
|
|
if (iVar4 == 0) {
|
|
uVar5 = 4;
|
|
}
|
|
}
|
|
*param_5 = uVar5;
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_2 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
*(bool *)(param_2 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_3;
|
|
if ((piVar3 != (int *)0x0) && (*(char *)((int)param_3 + 9) == '\0')) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_3[1] = iVar4;
|
|
*(undefined1 *)((int)param_3 + 9) = 1;
|
|
*(bool *)(param_3 + 2) = iVar4 == -1;
|
|
}
|
|
if ((char)param_2[2] == (char)param_3[2]) {
|
|
*param_5 = *param_5 | 2;
|
|
}
|
|
iVar4 = param_2[1];
|
|
iVar6 = param_2[2];
|
|
*param_1 = *param_2;
|
|
param_1[1] = iVar4;
|
|
param_1[2] = iVar6;
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048c38 @ 00048c38
|
|
|
|
uint FUN_00048c38(int *param_1,int *param_2,int param_3,uint *param_4,int param_5,int param_6,
|
|
uint param_7,int param_8)
|
|
|
|
{
|
|
bool bVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
char cVar6;
|
|
bool bVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
char *pcVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
char cVar14;
|
|
undefined8 uVar15;
|
|
undefined8 uVar16;
|
|
uint local_a0;
|
|
int local_70;
|
|
uint local_68;
|
|
int local_60;
|
|
uint local_5c;
|
|
uint local_58;
|
|
char acStack_54 [64];
|
|
|
|
iVar8 = *(int *)(param_8 + 0x10);
|
|
iVar2 = *(int *)(param_8 + 0x14);
|
|
local_68 = 1;
|
|
local_a0 = 0x80000000;
|
|
uVar15 = __aeabi_ldivmod();
|
|
uVar9 = (uint)((ulonglong)uVar15 >> 0x20);
|
|
local_70 = param_5;
|
|
cVar6 = '\0';
|
|
local_58 = 0;
|
|
local_5c = 0;
|
|
local_60 = 0;
|
|
bVar7 = false;
|
|
uVar5 = (uint)(*(char *)((int)param_1 + 9) == '\0');
|
|
while( true ) {
|
|
pcVar11 = acStack_54 + local_60;
|
|
piVar3 = (int *)*param_1;
|
|
if ((piVar3 != (int *)0x0) && (uVar5 != 0)) {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_1[1] = iVar4;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = iVar4 == -1;
|
|
}
|
|
piVar3 = (int *)*param_2;
|
|
if ((piVar3 == (int *)0x0) || (*(char *)((int)param_2 + 9) != '\0')) {
|
|
cVar14 = (char)param_2[2];
|
|
}
|
|
else {
|
|
if ((int *)piVar3[2] < (int *)piVar3[3]) {
|
|
iVar4 = *(int *)piVar3[2];
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_2[1] = iVar4;
|
|
*(undefined1 *)((int)param_2 + 9) = 1;
|
|
cVar14 = iVar4 == -1;
|
|
*(char *)(param_2 + 2) = cVar14;
|
|
}
|
|
if ((char)param_1[2] == cVar14) break;
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
piVar3 = (int *)*param_1;
|
|
if ((uint *)piVar3[2] < (uint *)piVar3[3]) {
|
|
uVar5 = *(uint *)piVar3[2];
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(*piVar3 + 0x20))();
|
|
}
|
|
param_1[1] = uVar5;
|
|
*(undefined1 *)((int)param_1 + 9) = 1;
|
|
*(bool *)(param_1 + 2) = uVar5 == 0xffffffff;
|
|
}
|
|
else {
|
|
uVar5 = param_1[1];
|
|
}
|
|
uVar10 = local_5c;
|
|
uVar13 = local_58;
|
|
if (uVar5 == param_7 && iVar2 != iVar8) {
|
|
*pcVar11 = cVar6;
|
|
local_60 = local_60 + 1;
|
|
cVar6 = '\0';
|
|
}
|
|
else {
|
|
uVar12 = 0xff;
|
|
if (uVar5 < 0x80) {
|
|
uVar12 = std::priv::__digit_val_table(uVar5);
|
|
}
|
|
if (param_3 <= (int)uVar12) break;
|
|
bVar1 = local_58 < (uint)uVar15;
|
|
if (local_5c != uVar9) {
|
|
bVar1 = (int)local_5c < (int)uVar9;
|
|
}
|
|
cVar6 = cVar6 + '\x01';
|
|
local_70 = local_70 + 1;
|
|
if (bVar1) {
|
|
bVar7 = true;
|
|
}
|
|
else {
|
|
uVar16 = __muldi3(local_58,local_5c,param_3,param_3 >> 0x1f);
|
|
uVar13 = (uint)uVar16 - uVar12;
|
|
uVar10 = (int)((ulonglong)uVar16 >> 0x20) - (uint)((uint)uVar16 < uVar12);
|
|
bVar1 = uVar13 < local_58;
|
|
if (uVar10 != local_5c) {
|
|
bVar1 = (int)uVar10 < (int)local_5c;
|
|
}
|
|
bVar7 = (bool)(bVar7 | ((local_58 != 0 || local_5c != 0) && !bVar1));
|
|
}
|
|
}
|
|
piVar3 = (int *)*param_1;
|
|
if ((uint)piVar3[2] < (uint)piVar3[3]) {
|
|
piVar3[2] = piVar3[2] + 4;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar3 + 0x24))();
|
|
}
|
|
*(undefined1 *)((int)param_1 + 9) = 0;
|
|
uVar5 = local_68;
|
|
local_5c = uVar10;
|
|
local_58 = uVar13;
|
|
}
|
|
if ((iVar2 != iVar8) && (local_60 != 0)) {
|
|
*pcVar11 = cVar6;
|
|
pcVar11 = acStack_54 + local_60 + 1;
|
|
}
|
|
uVar5 = 0;
|
|
if (0 < local_70) {
|
|
if (bVar7) {
|
|
uVar5 = 0;
|
|
if (param_6 == 0) {
|
|
uVar5 = 0xffffffff;
|
|
}
|
|
*param_4 = uVar5;
|
|
if (param_6 == 0) {
|
|
local_a0 = 0x7fffffff;
|
|
}
|
|
param_4[1] = local_a0;
|
|
return 0;
|
|
}
|
|
uVar5 = local_58;
|
|
if (param_6 == 0) {
|
|
uVar5 = -local_58;
|
|
}
|
|
*param_4 = uVar5;
|
|
if (param_6 == 0) {
|
|
local_5c = -(uint)(local_58 != 0) - local_5c;
|
|
}
|
|
param_4[1] = local_5c;
|
|
uVar5 = local_68;
|
|
if (iVar2 != iVar8) {
|
|
uVar5 = std::priv::__valid_grouping
|
|
(acStack_54,pcVar11,*(char **)(param_8 + 0x14),*(char **)(param_8 + 0x10));
|
|
}
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048ea6 @ 00048ea6
|
|
|
|
void FUN_00048ea6(facet *param_1)
|
|
|
|
{
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048f08 @ 00048f08
|
|
|
|
void FUN_00048f08(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
int param_5,undefined4 param_6,undefined4 param_7)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_16 [2];
|
|
|
|
uVar2 = *(undefined4 *)(param_5 + 4);
|
|
uVar1 = FUN_00041ecc(auStack_16,uVar2,param_7);
|
|
FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048f42 @ 00048f42
|
|
|
|
void FUN_00048f42(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
int param_5,undefined4 param_6,undefined4 param_7)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_16 [2];
|
|
|
|
uVar2 = *(undefined4 *)(param_5 + 4);
|
|
uVar1 = FUN_000424fc(auStack_16,uVar2,param_7);
|
|
FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048f7c @ 00048f7c
|
|
|
|
void FUN_00048f7c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6)
|
|
|
|
{
|
|
FUN_0004992c(param_1,param_3,param_4,param_5,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048fa0 @ 00048fa0
|
|
|
|
void FUN_00048fa0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6)
|
|
|
|
{
|
|
FUN_00049ee0(param_1,param_3,param_4,param_5,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00048fc4 @ 00048fc4
|
|
|
|
void FUN_00048fc4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_16 [2];
|
|
|
|
uVar2 = *(undefined4 *)(param_5 + 4);
|
|
uVar1 = FUN_00042c10(auStack_16,uVar2,param_7,param_8);
|
|
FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00049000 @ 00049000
|
|
|
|
void FUN_00049000(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_16 [2];
|
|
|
|
uVar2 = *(undefined4 *)(param_5 + 4);
|
|
uVar1 = FUN_00042d68(auStack_16,uVar2,param_7,param_8);
|
|
FUN_000493e4(param_1,uVar1,auStack_16,param_3,param_4,param_5,uVar2,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004903c @ 0004903c
|
|
|
|
void FUN_0004903c(undefined4 param_1,undefined4 param_2,int *param_3,uint param_4,int param_5,
|
|
undefined4 param_6,int param_7)
|
|
|
|
{
|
|
bool bVar1;
|
|
locale *this;
|
|
int *piVar2;
|
|
undefined4 uVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
int *piVar6;
|
|
undefined4 uVar7;
|
|
uint uVar8;
|
|
undefined4 uVar9;
|
|
uint local_28;
|
|
locale alStack_24 [14];
|
|
undefined1 auStack_16 [2];
|
|
|
|
this = (locale *)std::locale::locale(alStack_24,(locale *)(param_5 + 0x20));
|
|
piVar2 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
std::locale::~locale(alStack_24);
|
|
uVar3 = 10;
|
|
*(undefined4 *)(param_5 + 0x1c) = 10;
|
|
uVar8 = *(uint *)(param_5 + 4);
|
|
*(uint *)(param_5 + 4) = uVar8 & 0xfffffdc0 | 0x214;
|
|
local_28 = param_4;
|
|
if (param_7 == 0) {
|
|
if ((int)(uVar8 << 0x11) < 0) {
|
|
iVar4 = std::priv::__hex_char_table_hi();
|
|
}
|
|
else {
|
|
iVar4 = std::priv::__hex_char_table_lo();
|
|
}
|
|
iVar5 = (**(code **)(*piVar2 + 0x28))(piVar2,0x30);
|
|
bVar1 = true;
|
|
if ((param_4 & 0xff) != 0) {
|
|
piVar6 = (int *)param_3[5];
|
|
if (piVar6 < (int *)param_3[6]) {
|
|
param_3[5] = (int)(piVar6 + 1);
|
|
*piVar6 = iVar5;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_3 + 0x34))(param_3);
|
|
}
|
|
bVar1 = true;
|
|
if (iVar5 != -1) {
|
|
bVar1 = false;
|
|
}
|
|
}
|
|
iVar4 = (**(code **)(*piVar2 + 0x28))(piVar2,*(undefined1 *)(iVar4 + 0x10));
|
|
local_28 = 0;
|
|
if (!bVar1) {
|
|
piVar6 = (int *)param_3[5];
|
|
if (piVar6 < (int *)param_3[6]) {
|
|
param_3[5] = (int)(piVar6 + 1);
|
|
*piVar6 = iVar4;
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*param_3 + 0x34))(param_3);
|
|
}
|
|
local_28 = 1;
|
|
if (iVar4 == -1) {
|
|
local_28 = 0;
|
|
}
|
|
}
|
|
local_28 = param_4 & 0xffffff00 | local_28;
|
|
uVar3 = 8;
|
|
}
|
|
*(undefined4 *)(param_5 + 0x1c) = uVar3;
|
|
uVar3 = (**(code **)(*piVar2 + 0x28))(piVar2,0x30);
|
|
uVar9 = *(undefined4 *)(param_5 + 4);
|
|
uVar7 = FUN_000424fc(auStack_16,uVar9,param_7);
|
|
FUN_000493e4(param_1,uVar7,auStack_16,param_3,local_28,param_5,uVar9,uVar3);
|
|
*(uint *)(param_5 + 4) = uVar8;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00049168 @ 00049168
|
|
|
|
void FUN_00049168(undefined4 *param_1,int *param_2,uint param_3,int param_4,int param_5,int param_6)
|
|
|
|
{
|
|
locale *this;
|
|
int *piVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
code *pcVar6;
|
|
uint uVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
uint local_60;
|
|
int local_5c [16];
|
|
int local_1c;
|
|
int *local_18;
|
|
|
|
this = (locale *)std::locale::locale((locale *)local_5c,(locale *)(param_4 + 0x20));
|
|
piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct<wchar_t>::id);
|
|
std::locale::~locale((locale *)local_5c);
|
|
if (param_6 == 1) {
|
|
pcVar6 = *(code **)(*piVar1 + 0x14);
|
|
}
|
|
else {
|
|
pcVar6 = *(code **)(*piVar1 + 0x18);
|
|
}
|
|
(*pcVar6)(local_5c,piVar1);
|
|
uVar9 = *(uint *)(param_4 + 0x1c);
|
|
local_60 = 0;
|
|
*(undefined4 *)(param_4 + 0x1c) = 0;
|
|
uVar4 = local_1c - (int)local_18;
|
|
uVar7 = (int)uVar4 >> 2;
|
|
if (uVar7 < uVar9) {
|
|
if ((*(uint *)(param_4 + 4) & 7) == 1) {
|
|
uVar2 = param_3;
|
|
if (0 < (int)uVar4) {
|
|
iVar8 = (uVar4 >> 2) + 1;
|
|
piVar1 = local_18;
|
|
uVar4 = param_3;
|
|
do {
|
|
uVar2 = 0;
|
|
if ((uVar4 & 0xff) != 0) {
|
|
iVar5 = *piVar1;
|
|
piVar3 = (int *)param_2[5];
|
|
if (piVar3 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar3 + 1);
|
|
*piVar3 = iVar5;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar2 = (uint)(iVar5 != -1);
|
|
}
|
|
iVar8 = iVar8 + -1;
|
|
piVar1 = piVar1 + 1;
|
|
uVar4 = uVar2;
|
|
} while (1 < iVar8);
|
|
}
|
|
param_3 = uVar2 & 0xff | param_3 & 0xffffff00;
|
|
if (0 < (int)(uVar9 - uVar7)) {
|
|
iVar8 = (uVar9 + 1) - uVar7;
|
|
do {
|
|
uVar4 = 0;
|
|
if ((param_3 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = param_5;
|
|
iVar5 = param_5;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_2 + 0x34))(param_2,param_5);
|
|
}
|
|
uVar4 = 1;
|
|
if (iVar5 == -1) {
|
|
uVar4 = 0;
|
|
}
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | uVar4;
|
|
iVar8 = iVar8 + -1;
|
|
} while (1 < iVar8);
|
|
}
|
|
}
|
|
else {
|
|
uVar4 = param_3;
|
|
if (0 < (int)(uVar9 - uVar7)) {
|
|
iVar8 = (uVar9 + 1) - uVar7;
|
|
uVar7 = param_3;
|
|
do {
|
|
uVar4 = 0;
|
|
if ((uVar7 & 0xff) != 0) {
|
|
piVar1 = (int *)param_2[5];
|
|
if (piVar1 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar1 + 1);
|
|
*piVar1 = param_5;
|
|
iVar5 = param_5;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_2 + 0x34))(param_2,param_5);
|
|
}
|
|
uVar4 = 1;
|
|
if (iVar5 == -1) {
|
|
uVar4 = 0;
|
|
}
|
|
}
|
|
iVar8 = iVar8 + -1;
|
|
uVar7 = uVar4;
|
|
} while (1 < iVar8);
|
|
}
|
|
param_3 = uVar4 & 0xff | param_3 & 0xffffff00;
|
|
if (0 < local_1c - (int)local_18) {
|
|
iVar8 = ((uint)(local_1c - (int)local_18) >> 2) + 1;
|
|
piVar1 = local_18;
|
|
do {
|
|
uVar4 = 0;
|
|
if ((param_3 & 0xff) != 0) {
|
|
iVar5 = *piVar1;
|
|
piVar3 = (int *)param_2[5];
|
|
if (piVar3 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar3 + 1);
|
|
*piVar3 = iVar5;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar4 = 1;
|
|
if (iVar5 == -1) {
|
|
uVar4 = 0;
|
|
}
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | uVar4;
|
|
iVar8 = iVar8 + -1;
|
|
piVar1 = piVar1 + 1;
|
|
} while (1 < iVar8);
|
|
}
|
|
}
|
|
}
|
|
else if (0 < (int)uVar4) {
|
|
iVar8 = (uVar4 >> 2) + 1;
|
|
piVar1 = local_18;
|
|
do {
|
|
uVar4 = local_60;
|
|
if ((param_3 & 0xff) != 0) {
|
|
iVar5 = *piVar1;
|
|
piVar3 = (int *)param_2[5];
|
|
if (piVar3 < (int *)param_2[6]) {
|
|
param_2[5] = (int)(piVar3 + 1);
|
|
*piVar3 = iVar5;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_2 + 0x34))(param_2);
|
|
}
|
|
uVar4 = 1;
|
|
if (iVar5 == -1) {
|
|
uVar4 = 0;
|
|
}
|
|
}
|
|
param_3 = param_3 & 0xffffff00 | uVar4;
|
|
iVar8 = iVar8 + -1;
|
|
piVar1 = piVar1 + 1;
|
|
} while (1 < iVar8);
|
|
}
|
|
*param_1 = param_2;
|
|
param_1[1] = param_3;
|
|
if ((local_18 != local_5c) && (local_18 != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_5c[0] - (int)local_18)) {
|
|
operator_delete(local_18);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_18,local_5c[0] - (int)local_18);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000493e4 @ 000493e4
|
|
|
|
void FUN_000493e4(undefined4 param_1,int param_2,int param_3,undefined4 param_4,undefined4 param_5,
|
|
int param_6,uint param_7,undefined4 param_8)
|
|
|
|
{
|
|
locale *this;
|
|
int *piVar1;
|
|
undefined4 uVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
undefined1 uVar5;
|
|
int local_130 [4];
|
|
int *local_120;
|
|
int *local_11c;
|
|
undefined1 auStack_118 [256];
|
|
locale alStack_18 [4];
|
|
|
|
this = (locale *)std::locale::locale(alStack_18,(locale *)(param_6 + 0x20));
|
|
piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
uVar2 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2b);
|
|
uVar3 = (**(code **)(*piVar1 + 0x28))(piVar1,0x2d);
|
|
(**(code **)(*piVar1 + 0x2c))(piVar1,param_2,param_3,auStack_118);
|
|
param_3 = param_3 - param_2;
|
|
piVar1 = (int *)std::locale::_M_use_facet(alStack_18,(id *)&std::numpunct<wchar_t>::id);
|
|
(**(code **)(*piVar1 + 0x10))(local_130,piVar1);
|
|
if (local_11c != local_120) {
|
|
uVar5 = 0;
|
|
if ((int)(param_7 << 0x16) < 0) {
|
|
uVar5 = 2;
|
|
if ((param_7 & 0x38) != 0x10) {
|
|
uVar5 = (param_7 & 0x38) == 0x20;
|
|
}
|
|
}
|
|
uVar4 = (**(code **)(*piVar1 + 0xc))(piVar1);
|
|
param_3 = FUN_00050274(auStack_118,auStack_118 + param_3 * 4,local_130,uVar4,uVar2,uVar3,uVar5);
|
|
}
|
|
uVar4 = *(undefined4 *)(param_6 + 0x1c);
|
|
*(undefined4 *)(param_6 + 0x1c) = 0;
|
|
FUN_0004953c(param_1,auStack_118,param_3,param_4,param_5,param_7,uVar4,param_8,uVar2,uVar3);
|
|
if ((local_11c != local_130) && (local_11c != (int *)0x0)) {
|
|
if ((uint)(local_130[0] - (int)local_11c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_11c,local_130[0] - (int)local_11c);
|
|
}
|
|
else {
|
|
operator_delete(local_11c);
|
|
}
|
|
}
|
|
std::locale::~locale(alStack_18);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004953c @ 0004953c
|
|
|
|
void FUN_0004953c(undefined4 *param_1,int *param_2,int param_3,int *param_4,uint param_5,
|
|
uint param_6,int param_7,int param_8,int param_9,int param_10)
|
|
|
|
{
|
|
uint uVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
bool bVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
bool bVar8;
|
|
|
|
if (param_3 < param_7) {
|
|
iVar5 = param_7 - param_3;
|
|
if ((param_6 & 7) == 1) {
|
|
uVar1 = param_5;
|
|
if (0 < param_3 * 4) {
|
|
iVar7 = param_3 + 1;
|
|
uVar6 = param_5;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((uVar6 & 0xff) != 0) {
|
|
iVar3 = *param_2;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar3;
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar1 = (uint)(iVar3 != -1);
|
|
}
|
|
iVar7 = iVar7 + -1;
|
|
param_2 = param_2 + 1;
|
|
uVar6 = uVar1;
|
|
} while (1 < iVar7);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1 & 0xff;
|
|
if (0 < iVar5) {
|
|
param_3 = (param_7 + 1) - param_3;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = param_8;
|
|
iVar5 = param_8;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar1 = (uint)(iVar5 != -1);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
param_3 = param_3 + -1;
|
|
} while (1 < param_3);
|
|
}
|
|
}
|
|
else if (((param_3 == 0) || ((param_6 & 7) != 4)) ||
|
|
((iVar7 = *param_2, iVar7 != param_9 && (iVar7 != param_10)))) {
|
|
if ((param_3 < 2) || ((param_6 & 0x23f) != 0x214)) {
|
|
uVar1 = param_5;
|
|
if (0 < iVar5) {
|
|
iVar5 = (param_7 + 1) - param_3;
|
|
uVar6 = param_5;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((uVar6 & 0xff) != 0) {
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = param_8;
|
|
iVar7 = param_8;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar1 = (uint)(iVar7 != -1);
|
|
}
|
|
iVar5 = iVar5 + -1;
|
|
uVar6 = uVar1;
|
|
} while (1 < iVar5);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1 & 0xff;
|
|
if (0 < param_3 * 4) {
|
|
param_3 = param_3 + 1;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
iVar5 = *param_2;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar5;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar1 = (uint)(iVar5 != -1);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
param_3 = param_3 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < param_3);
|
|
}
|
|
}
|
|
else {
|
|
bVar8 = false;
|
|
if ((param_5 & 0xff) != 0) {
|
|
iVar7 = *param_2;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar7;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
if (iVar7 != -1) {
|
|
iVar7 = param_2[1];
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar7;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
bVar8 = iVar7 != -1;
|
|
}
|
|
}
|
|
if (0 < iVar5) {
|
|
iVar5 = (param_7 + 1) - param_3;
|
|
bVar4 = bVar8;
|
|
do {
|
|
bVar8 = false;
|
|
if (bVar4 != false) {
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = param_8;
|
|
iVar7 = param_8;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
bVar8 = iVar7 != -1;
|
|
}
|
|
iVar5 = iVar5 + -1;
|
|
bVar4 = bVar8;
|
|
} while (1 < iVar5);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | (uint)bVar8;
|
|
uVar1 = param_3 * 4 - 8;
|
|
if (0 < (int)uVar1) {
|
|
param_2 = param_2 + 2;
|
|
iVar5 = (uVar1 >> 2) + 1;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
iVar7 = *param_2;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar7;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar1 = (uint)(iVar7 != -1);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
iVar5 = iVar5 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < iVar5);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
bVar8 = false;
|
|
if ((param_5 & 0xff) != 0) {
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar7;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
bVar8 = true;
|
|
if (iVar7 == -1) {
|
|
bVar8 = false;
|
|
}
|
|
}
|
|
if (0 < iVar5) {
|
|
iVar5 = (param_7 + 1) - param_3;
|
|
bVar4 = bVar8;
|
|
do {
|
|
bVar8 = false;
|
|
if (bVar4 != false) {
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = param_8;
|
|
iVar7 = param_8;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
bVar8 = iVar7 != -1;
|
|
}
|
|
iVar5 = iVar5 + -1;
|
|
bVar4 = bVar8;
|
|
} while (1 < iVar5);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | (uint)bVar8;
|
|
uVar1 = param_3 * 4 - 4;
|
|
if (0 < (int)uVar1) {
|
|
iVar5 = (uVar1 >> 2) + 1;
|
|
do {
|
|
param_2 = param_2 + 1;
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
iVar7 = *param_2;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar7;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar1 = (uint)(iVar7 != -1);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
iVar5 = iVar5 + -1;
|
|
} while (1 < iVar5);
|
|
}
|
|
}
|
|
}
|
|
else if (0 < param_3 * 4) {
|
|
param_3 = param_3 + 1;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
iVar5 = *param_2;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar5;
|
|
}
|
|
else {
|
|
iVar5 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar1 = (uint)(iVar5 != -1);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
param_3 = param_3 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < param_3);
|
|
}
|
|
*param_1 = param_4;
|
|
param_1[1] = param_5;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004992c @ 0004992c
|
|
|
|
void FUN_0004992c(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4)
|
|
|
|
{
|
|
locale *this;
|
|
int *piVar1;
|
|
undefined1 **ppuVar2;
|
|
undefined4 **local_14c;
|
|
int local_148 [5];
|
|
int *local_134;
|
|
undefined1 *local_130 [4];
|
|
undefined1 **local_120;
|
|
undefined1 local_11c;
|
|
undefined1 auStack_11b [256];
|
|
undefined1 auStack_1b [3];
|
|
undefined1 **local_18;
|
|
|
|
__aeabi_memclr(auStack_11b,0x100,param_3,&local_14c);
|
|
local_11c = 0;
|
|
local_130[0] = auStack_1b;
|
|
local_14c = &local_18;
|
|
local_120 = (undefined1 **)&local_11c;
|
|
local_18 = (undefined1 **)&local_11c;
|
|
FUN_00051490(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18));
|
|
this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20));
|
|
piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct<wchar_t>::id);
|
|
std::locale::~locale((locale *)local_148);
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
(**(code **)(*piVar1 + 0xc))(piVar1);
|
|
(**(code **)(*piVar1 + 0x10))(local_148,piVar1);
|
|
FUN_00049a8c(param_1,local_130,param_2,param_3);
|
|
if ((local_134 != local_148) && (local_134 != (int *)0x0)) {
|
|
if ((uint)(local_148[0] - (int)local_134) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134);
|
|
}
|
|
else {
|
|
operator_delete(local_134);
|
|
}
|
|
}
|
|
ppuVar2 = (undefined1 **)*local_14c;
|
|
if (((ppuVar2 != local_130) && (ppuVar2 != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_11c != ppuVar2)) {
|
|
if (0x80 < (uint)((int)local_130[0] - (int)ppuVar2)) {
|
|
operator_delete(ppuVar2);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(ppuVar2,(int)local_130[0] - (int)ppuVar2);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00049a8c @ 00049a8c
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
void FUN_00049a8c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
int param_5,undefined4 param_6,undefined4 param_7,undefined4 param_8,
|
|
undefined4 param_9,int param_10)
|
|
|
|
{
|
|
undefined4 **ppuVar1;
|
|
undefined4 **ppuVar2;
|
|
locale *this;
|
|
int *piVar3;
|
|
undefined4 uVar4;
|
|
undefined4 uVar5;
|
|
undefined4 uVar6;
|
|
undefined4 uVar7;
|
|
undefined4 **local_460 [16];
|
|
undefined4 **local_420;
|
|
undefined4 *local_41c;
|
|
undefined1 auStack_418 [1024];
|
|
undefined4 **local_18;
|
|
|
|
this = (locale *)std::locale::locale((locale *)local_460,(locale *)(param_5 + 0x20));
|
|
piVar3 = (int *)std::locale::_M_use_facet(this,(id *)&std::ctype<wchar_t>::id);
|
|
std::locale::~locale((locale *)local_460);
|
|
__aeabi_memclr4(auStack_418,0x400);
|
|
local_41c = (undefined4 **)0x0;
|
|
local_460[0] = &local_18;
|
|
local_420 = &local_41c;
|
|
local_18 = &local_41c;
|
|
FUN_00051848(param_2,local_460,piVar3,param_7,1);
|
|
if (*(int *)(param_10 + 0x14) != *(int *)(param_10 + 0x10)) {
|
|
uVar4 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2b);
|
|
uVar5 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2d);
|
|
FUN_0005031c(local_460,param_9,param_10,param_8,uVar4,uVar5,0);
|
|
}
|
|
ppuVar2 = local_18;
|
|
ppuVar1 = local_420;
|
|
uVar4 = *(undefined4 *)(param_5 + 0x1c);
|
|
*(undefined4 *)(param_5 + 0x1c) = 0;
|
|
uVar7 = *(undefined4 *)(param_5 + 4);
|
|
uVar5 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2b);
|
|
uVar6 = (**(code **)(*piVar3 + 0x28))(piVar3,0x2d);
|
|
FUN_00049c20(param_1,ppuVar2,ppuVar1,param_3,param_4,uVar7,uVar4,param_6,uVar5,uVar6);
|
|
if ((((undefined4 ***)local_18 != local_460) && ((undefined4 ***)local_18 != (undefined4 ***)0x0))
|
|
&& (&local_41c != local_18)) {
|
|
if ((uint)((int)local_460[0] - (int)local_18) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_18,(int)local_460[0] - (int)local_18);
|
|
}
|
|
else {
|
|
operator_delete(local_18);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00049c20 @ 00049c20
|
|
|
|
undefined4 *
|
|
FUN_00049c20(undefined4 *param_1,int *param_2,int *param_3,int *param_4,uint param_5,uint param_6,
|
|
int param_7,int param_8,int param_9,int param_10)
|
|
|
|
{
|
|
uint uVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
int *local_18;
|
|
|
|
uVar1 = (int)param_3 - (int)param_2;
|
|
iVar6 = (int)uVar1 >> 2;
|
|
if (iVar6 < param_7) {
|
|
iVar3 = param_7 - iVar6;
|
|
if ((param_6 & 7) == 4) {
|
|
if ((param_2 != param_3) && ((iVar7 = *param_2, iVar7 == param_9 || (iVar7 == param_10)))) {
|
|
param_2 = param_2 + 1;
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar7;
|
|
}
|
|
else {
|
|
iVar7 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar1 = 1;
|
|
if (iVar7 == -1) {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
if (0 < iVar3) {
|
|
iVar6 = (param_7 + 1) - iVar6;
|
|
uVar5 = uVar1;
|
|
do {
|
|
uVar1 = 0;
|
|
if (uVar5 != 0) {
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = param_8;
|
|
iVar3 = param_8;
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar1 = 1;
|
|
if (iVar3 == -1) {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
iVar6 = iVar6 + -1;
|
|
uVar5 = uVar1;
|
|
} while (1 < iVar6);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
if (0 < (int)param_3 - (int)param_2) {
|
|
iVar6 = ((uint)((int)param_3 - (int)param_2) >> 2) + 1;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
iVar3 = *param_2;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar3;
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar1 = 1;
|
|
if (iVar3 == -1) {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
iVar6 = iVar6 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < iVar6);
|
|
}
|
|
goto LAB_00049e02;
|
|
}
|
|
}
|
|
else if ((param_6 & 7) == 1) {
|
|
uVar5 = param_5;
|
|
if (0 < (int)uVar1) {
|
|
iVar7 = (uVar1 >> 2) + 1;
|
|
uVar1 = param_5;
|
|
local_18 = param_2;
|
|
do {
|
|
uVar5 = 0;
|
|
if ((uVar1 & 0xff) != 0) {
|
|
iVar4 = *local_18;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar4;
|
|
}
|
|
else {
|
|
iVar4 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar5 = 1;
|
|
if (iVar4 == -1) {
|
|
uVar5 = 0;
|
|
}
|
|
}
|
|
iVar7 = iVar7 + -1;
|
|
local_18 = local_18 + 1;
|
|
uVar1 = uVar5;
|
|
} while (1 < iVar7);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar5 & 0xff;
|
|
if (0 < iVar3) {
|
|
iVar6 = (param_7 + 1) - iVar6;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = param_8;
|
|
iVar3 = param_8;
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar1 = 1;
|
|
if (iVar3 == -1) {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
iVar6 = iVar6 + -1;
|
|
} while (1 < iVar6);
|
|
}
|
|
goto LAB_00049e02;
|
|
}
|
|
uVar5 = param_5;
|
|
if (0 < iVar3) {
|
|
iVar6 = (param_7 + 1) - iVar6;
|
|
uVar8 = param_5;
|
|
do {
|
|
uVar5 = 0;
|
|
if ((uVar8 & 0xff) != 0) {
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = param_8;
|
|
iVar3 = param_8;
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_4 + 0x34))(param_4,param_8);
|
|
}
|
|
uVar5 = 1;
|
|
if (iVar3 == -1) {
|
|
uVar5 = 0;
|
|
}
|
|
}
|
|
iVar6 = iVar6 + -1;
|
|
uVar8 = uVar5;
|
|
} while (1 < iVar6);
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar5 & 0xff;
|
|
if (0 < (int)uVar1) {
|
|
iVar6 = (uVar1 >> 2) + 1;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
iVar3 = *param_2;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar3;
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar1 = 1;
|
|
if (iVar3 == -1) {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
iVar6 = iVar6 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < iVar6);
|
|
}
|
|
}
|
|
else if (0 < (int)uVar1) {
|
|
iVar6 = (uVar1 >> 2) + 1;
|
|
do {
|
|
uVar1 = 0;
|
|
if ((param_5 & 0xff) != 0) {
|
|
iVar3 = *param_2;
|
|
piVar2 = (int *)param_4[5];
|
|
if (piVar2 < (int *)param_4[6]) {
|
|
param_4[5] = (int)(piVar2 + 1);
|
|
*piVar2 = iVar3;
|
|
}
|
|
else {
|
|
iVar3 = (**(code **)(*param_4 + 0x34))(param_4);
|
|
}
|
|
uVar1 = 1;
|
|
if (iVar3 == -1) {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
param_5 = param_5 & 0xffffff00 | uVar1;
|
|
iVar6 = iVar6 + -1;
|
|
param_2 = param_2 + 1;
|
|
} while (1 < iVar6);
|
|
}
|
|
LAB_00049e02:
|
|
*param_1 = param_4;
|
|
param_1[1] = param_5;
|
|
return param_1 + 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00049ee0 @ 00049ee0
|
|
|
|
void FUN_00049ee0(undefined4 param_1,undefined4 param_2,undefined4 param_3,int param_4)
|
|
|
|
{
|
|
locale *this;
|
|
int *piVar1;
|
|
undefined1 **ppuVar2;
|
|
undefined4 **local_14c;
|
|
int local_148 [5];
|
|
int *local_134;
|
|
undefined1 *local_130 [4];
|
|
undefined1 **local_120;
|
|
undefined1 local_11c;
|
|
undefined1 auStack_11b [256];
|
|
undefined1 auStack_1b [3];
|
|
undefined1 **local_18;
|
|
|
|
__aeabi_memclr(auStack_11b,0x100,param_3,&local_14c);
|
|
local_11c = 0;
|
|
local_130[0] = auStack_1b;
|
|
local_14c = &local_18;
|
|
local_120 = (undefined1 **)&local_11c;
|
|
local_18 = (undefined1 **)&local_11c;
|
|
FUN_00051642(local_130,*(undefined4 *)(param_4 + 4),*(undefined4 *)(param_4 + 0x18));
|
|
this = (locale *)std::locale::locale((locale *)local_148,(locale *)(param_4 + 0x20));
|
|
piVar1 = (int *)std::locale::_M_use_facet(this,(id *)&std::numpunct<wchar_t>::id);
|
|
std::locale::~locale((locale *)local_148);
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
(**(code **)(*piVar1 + 0xc))(piVar1);
|
|
(**(code **)(*piVar1 + 0x10))(local_148,piVar1);
|
|
FUN_00049a8c(param_1,local_130,param_2,param_3);
|
|
if ((local_134 != local_148) && (local_134 != (int *)0x0)) {
|
|
if ((uint)(local_148[0] - (int)local_134) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_134,local_148[0] - (int)local_134);
|
|
}
|
|
else {
|
|
operator_delete(local_134);
|
|
}
|
|
}
|
|
ppuVar2 = (undefined1 **)*local_14c;
|
|
if (((ppuVar2 != local_130) && (ppuVar2 != (undefined1 **)0x0)) &&
|
|
((undefined1 **)&local_11c != ppuVar2)) {
|
|
if (0x80 < (uint)((int)local_130[0] - (int)ppuVar2)) {
|
|
operator_delete(ppuVar2);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(ppuVar2,(int)local_130[0] - (int)ppuVar2);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a040 @ 0004a040
|
|
|
|
void FUN_0004a040(int *param_1,int param_2,int param_3)
|
|
|
|
{
|
|
void *pvVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
void *pvVar4;
|
|
undefined4 uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
int iVar8;
|
|
uint local_18;
|
|
|
|
uVar7 = param_3 - param_2;
|
|
uVar6 = (int)uVar7 >> 2;
|
|
iVar8 = *param_1;
|
|
if ((uint)(param_1[2] - iVar8 >> 2) < uVar6) {
|
|
if (uVar6 >> 0x1e != 0) {
|
|
FUN_00030824(4);
|
|
uVar5 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
local_18 = uVar7;
|
|
if (uVar7 < 0x81) {
|
|
pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar3 = local_18;
|
|
}
|
|
else {
|
|
pvVar1 = operator_new(uVar7);
|
|
uVar3 = uVar7;
|
|
}
|
|
if (param_3 != param_2) {
|
|
__aeabi_memcpy(pvVar1,param_2,uVar7);
|
|
}
|
|
pvVar4 = (void *)*param_1;
|
|
if (pvVar4 != (void *)0x0) {
|
|
if ((uint)(param_1[2] - (int)pvVar4) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar4,param_1[2] - (int)pvVar4);
|
|
}
|
|
else {
|
|
operator_delete(pvVar4);
|
|
}
|
|
}
|
|
*param_1 = (int)pvVar1;
|
|
param_1[1] = (int)((int)pvVar1 + uVar6 * 4);
|
|
param_1[2] = (int)pvVar1 + (uVar3 & 0xfffffffc);
|
|
return;
|
|
}
|
|
iVar2 = param_1[1];
|
|
uVar3 = iVar2 - iVar8 >> 2;
|
|
param_1 = param_1 + 1;
|
|
if (uVar6 <= uVar3) {
|
|
if (uVar7 != 0) {
|
|
__aeabi_memmove(iVar8,param_2,uVar7);
|
|
iVar8 = iVar8 + uVar7;
|
|
}
|
|
*param_1 = iVar8;
|
|
return;
|
|
}
|
|
param_2 = param_2 + uVar3 * 4;
|
|
if (iVar2 - iVar8 != 0) {
|
|
__aeabi_memmove(iVar8);
|
|
iVar2 = *param_1;
|
|
}
|
|
if (param_2 != param_3) {
|
|
__aeabi_memcpy(iVar2,param_2,param_3 - param_2);
|
|
iVar2 = iVar2 + (param_3 - param_2);
|
|
}
|
|
*param_1 = iVar2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a144 @ 0004a144
|
|
|
|
void FUN_0004a144(void)
|
|
|
|
{
|
|
FUN_0004a180();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a180 @ 0004a180
|
|
|
|
undefined4
|
|
FUN_0004a180(undefined4 *param_1,undefined4 param_2,undefined4 param_3,code *param_4,code *param_5,
|
|
code *param_6,undefined4 *param_7,undefined4 *param_8)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char *pcVar2;
|
|
int iVar3;
|
|
void *pvVar4;
|
|
undefined4 uVar5;
|
|
int local_54;
|
|
char local_50;
|
|
int *local_40;
|
|
int local_3c [5];
|
|
int *local_28;
|
|
undefined4 local_24;
|
|
undefined4 local_20;
|
|
undefined1 auStack_1c [4];
|
|
int local_18;
|
|
|
|
*param_8 = 0;
|
|
if (*(char *)*param_1 == '\0') {
|
|
pcVar2 = (char *)(*param_6)(param_2);
|
|
*param_1 = pcVar2;
|
|
pcVar1 = "C";
|
|
if ((pcVar2 == (char *)0x0) || (*pcVar2 == '\0')) goto LAB_0004a1c0;
|
|
}
|
|
else {
|
|
pcVar1 = (char *)(*param_4)((char *)*param_1,param_2,param_3);
|
|
if (pcVar1 == (char *)0x0) {
|
|
return 0;
|
|
}
|
|
LAB_0004a1c0:
|
|
*param_1 = pcVar1;
|
|
pcVar2 = pcVar1;
|
|
}
|
|
FUN_00031c38(&local_54,pcVar2,auStack_1c);
|
|
FUN_00036f1c(local_3c,&local_54);
|
|
local_20 = 0;
|
|
local_24 = 0;
|
|
if ((local_40 != &local_54) && (local_40 != (int *)0x0)) {
|
|
if ((uint)(local_54 - (int)local_40) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_40,local_54 - (int)local_40);
|
|
}
|
|
else {
|
|
operator_delete(local_40);
|
|
}
|
|
}
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0);
|
|
pvVar4 = (void *)*param_7;
|
|
if (pvVar4 == (void *)0x0) {
|
|
pvVar4 = operator_new(0x1c);
|
|
FUN_0004a8a8(pvVar4,0,&local_54,&local_18,auStack_1c);
|
|
*param_7 = pvVar4;
|
|
}
|
|
FUN_0004aba0(&local_54,pvVar4,local_3c);
|
|
if (local_50 != '\0') {
|
|
iVar3 = (*param_5)(*param_1,param_3,param_8);
|
|
*(int *)(local_54 + 0x1c) = iVar3;
|
|
if (iVar3 == 0) {
|
|
local_18 = local_54;
|
|
FUN_0004ad36(*param_7,&local_18);
|
|
uVar5 = 0;
|
|
goto LAB_0004a26e;
|
|
}
|
|
}
|
|
*(int *)(local_54 + 0x20) = *(int *)(local_54 + 0x20) + 1;
|
|
uVar5 = *(undefined4 *)(local_54 + 0x1c);
|
|
LAB_0004a26e:
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0);
|
|
if ((local_28 != local_3c) && (local_28 != (int *)0x0)) {
|
|
if ((uint)(local_3c[0] - (int)local_28) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_28,local_3c[0] - (int)local_28);
|
|
}
|
|
else {
|
|
operator_delete(local_28);
|
|
}
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a320 @ 0004a320
|
|
|
|
void FUN_0004a320(void)
|
|
|
|
{
|
|
FUN_0004d8c4();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a32a @ 0004a32a
|
|
|
|
void FUN_0004a32a(void)
|
|
|
|
{
|
|
FUN_0004d960();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a334 @ 0004a334
|
|
|
|
void FUN_0004a334(void)
|
|
|
|
{
|
|
FUN_0004a180();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a370 @ 0004a370
|
|
|
|
void FUN_0004a370(void)
|
|
|
|
{
|
|
FUN_0004d8da();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a37c @ 0004a37c
|
|
|
|
void FUN_0004a37c(void)
|
|
|
|
{
|
|
FUN_0004a180();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a3b8 @ 0004a3b8
|
|
|
|
void FUN_0004a3b8(void)
|
|
|
|
{
|
|
FUN_0004d8f0();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a3c2 @ 0004a3c2
|
|
|
|
void FUN_0004a3c2(void)
|
|
|
|
{
|
|
FUN_0004d968();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a3cc @ 0004a3cc
|
|
|
|
void FUN_0004a3cc(void)
|
|
|
|
{
|
|
FUN_0004a180();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a408 @ 0004a408
|
|
|
|
void FUN_0004a408(void)
|
|
|
|
{
|
|
FUN_0004d906();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a412 @ 0004a412
|
|
|
|
void FUN_0004a412(void)
|
|
|
|
{
|
|
FUN_0004d970();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a41c @ 0004a41c
|
|
|
|
void FUN_0004a41c(void)
|
|
|
|
{
|
|
FUN_0004a180();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a458 @ 0004a458
|
|
|
|
void FUN_0004a458(void)
|
|
|
|
{
|
|
FUN_0004d91c();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a462 @ 0004a462
|
|
|
|
void FUN_0004a462(void)
|
|
|
|
{
|
|
FUN_0004d978();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a46c @ 0004a46c
|
|
|
|
void FUN_0004a46c(void)
|
|
|
|
{
|
|
FUN_0004a180();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a4a8 @ 0004a4a8
|
|
|
|
void FUN_0004a4a8(void)
|
|
|
|
{
|
|
FUN_0004d932();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a4b2 @ 0004a4b2
|
|
|
|
void FUN_0004a4b2(void)
|
|
|
|
{
|
|
FUN_0004d980();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a4bc @ 0004a4bc
|
|
|
|
void FUN_0004a4bc(void)
|
|
|
|
{
|
|
FUN_0004a180();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a4f8 @ 0004a4f8
|
|
|
|
void FUN_0004a4f8(void)
|
|
|
|
{
|
|
FUN_0004d948();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a502 @ 0004a502
|
|
|
|
void FUN_0004a502(void)
|
|
|
|
{
|
|
FUN_0004d988();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a50c @ 0004a50c
|
|
|
|
void FUN_0004a50c(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int local_120;
|
|
undefined1 auStack_11c [260];
|
|
int local_18;
|
|
int local_14;
|
|
|
|
iVar1 = DAT_00070dc4;
|
|
if ((param_1 != 0) && (DAT_00070dc4 != 0)) {
|
|
local_120 = FUN_0004d990(param_1,auStack_11c);
|
|
if (local_120 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0);
|
|
FUN_0004b1b0(&local_18,iVar1,&local_120);
|
|
if ((local_18 != 0) &&
|
|
(iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) {
|
|
FUN_0004d9c8(*(undefined4 *)(local_18 + 0x1c));
|
|
local_14 = local_18;
|
|
FUN_0004ad36(iVar1,&local_14);
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a590 @ 0004a590
|
|
|
|
void FUN_0004a590(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int local_120;
|
|
undefined1 auStack_11c [260];
|
|
int local_18;
|
|
int local_14;
|
|
|
|
iVar1 = DAT_00070dc8;
|
|
if ((param_1 != 0) && (DAT_00070dc8 != 0)) {
|
|
local_120 = FUN_0004d998(param_1,auStack_11c);
|
|
if (local_120 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0);
|
|
FUN_0004b1b0(&local_18,iVar1,&local_120);
|
|
if ((local_18 != 0) &&
|
|
(iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) {
|
|
FUN_0004d9ca(*(undefined4 *)(local_18 + 0x1c));
|
|
local_14 = local_18;
|
|
FUN_0004ad36(iVar1,&local_14);
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a614 @ 0004a614
|
|
|
|
void FUN_0004a614(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int local_120;
|
|
undefined1 auStack_11c [260];
|
|
int local_18;
|
|
int local_14;
|
|
|
|
iVar1 = DAT_00070dcc;
|
|
if ((param_1 != 0) && (DAT_00070dcc != 0)) {
|
|
local_120 = FUN_0004d9a0(param_1,auStack_11c);
|
|
if (local_120 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0);
|
|
FUN_0004b1b0(&local_18,iVar1,&local_120);
|
|
if ((local_18 != 0) &&
|
|
(iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) {
|
|
FUN_0004d9cc(*(undefined4 *)(local_18 + 0x1c));
|
|
local_14 = local_18;
|
|
FUN_0004ad36(iVar1,&local_14);
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a698 @ 0004a698
|
|
|
|
void FUN_0004a698(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int local_120;
|
|
undefined1 auStack_11c [260];
|
|
int local_18;
|
|
int local_14;
|
|
|
|
iVar1 = DAT_00070dd0;
|
|
if ((param_1 != 0) && (DAT_00070dd0 != 0)) {
|
|
local_120 = FUN_0004d9a8(param_1,auStack_11c);
|
|
if (local_120 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0);
|
|
FUN_0004b1b0(&local_18,iVar1,&local_120);
|
|
if ((local_18 != 0) &&
|
|
(iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) {
|
|
FUN_0004d9ce(*(undefined4 *)(local_18 + 0x1c));
|
|
local_14 = local_18;
|
|
FUN_0004ad36(iVar1,&local_14);
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a71c @ 0004a71c
|
|
|
|
void FUN_0004a71c(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int local_120;
|
|
undefined1 auStack_11c [260];
|
|
int local_18;
|
|
int local_14;
|
|
|
|
iVar1 = DAT_00070dd4;
|
|
if ((param_1 != 0) && (DAT_00070dd4 != 0)) {
|
|
local_120 = FUN_0004d9b0(param_1,auStack_11c);
|
|
if (local_120 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0);
|
|
FUN_0004b1b0(&local_18,iVar1,&local_120);
|
|
if ((local_18 != 0) &&
|
|
(iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) {
|
|
FUN_0004d9d0(*(undefined4 *)(local_18 + 0x1c));
|
|
local_14 = local_18;
|
|
FUN_0004ad36(iVar1,&local_14);
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a7a0 @ 0004a7a0
|
|
|
|
void FUN_0004a7a0(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int local_120;
|
|
undefined1 auStack_11c [260];
|
|
int local_18;
|
|
int local_14;
|
|
|
|
iVar1 = DAT_00070dd8;
|
|
if ((param_1 != 0) && (DAT_00070dd8 != 0)) {
|
|
local_120 = FUN_0004d9b8(param_1,auStack_11c);
|
|
if (local_120 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0);
|
|
FUN_0004b1b0(&local_18,iVar1,&local_120);
|
|
if ((local_18 != 0) &&
|
|
(iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) {
|
|
FUN_0004d9d2(*(undefined4 *)(local_18 + 0x1c));
|
|
local_14 = local_18;
|
|
FUN_0004ad36(iVar1,&local_14);
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a824 @ 0004a824
|
|
|
|
void FUN_0004a824(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int local_120;
|
|
undefined1 auStack_11c [260];
|
|
int local_18;
|
|
int local_14;
|
|
|
|
iVar1 = DAT_00070ddc;
|
|
if ((param_1 != 0) && (DAT_00070ddc != 0)) {
|
|
local_120 = FUN_0004d9c0(param_1,auStack_11c);
|
|
if (local_120 != 0) {
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070dc0);
|
|
FUN_0004b1b0(&local_18,iVar1,&local_120);
|
|
if ((local_18 != 0) &&
|
|
(iVar2 = *(int *)(local_18 + 0x20) + -1, *(int *)(local_18 + 0x20) = iVar2, iVar2 == 0)) {
|
|
FUN_0004d9d4(*(undefined4 *)(local_18 + 0x1c));
|
|
local_14 = local_18;
|
|
FUN_0004ad36(iVar1,&local_14);
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070dc0);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a8a8 @ 0004a8a8
|
|
|
|
int FUN_0004a8a8(int param_1,uint param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
undefined4 local_18;
|
|
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
*(undefined4 *)(param_1 + 0x18) = 0x3f800000;
|
|
piVar1 = &DAT_0006537c;
|
|
uVar5 = 0x1e;
|
|
while (uVar4 = uVar5, 0 < (int)uVar4) {
|
|
uVar5 = uVar4 >> 1;
|
|
if ((uint)piVar1[uVar5] < param_2) {
|
|
piVar1 = piVar1 + uVar5 + 1;
|
|
uVar5 = (uVar4 - 1) - uVar5;
|
|
}
|
|
}
|
|
piVar3 = &DAT_000653f0;
|
|
if (piVar1 != (int *)&DAT_000653f4) {
|
|
piVar3 = piVar1;
|
|
}
|
|
iVar2 = *piVar3;
|
|
FUN_0004a990(param_1 + 8,iVar2 + 1);
|
|
local_18 = 0;
|
|
FUN_0004aa50(param_1 + 8,iVar2 + 1,&local_18);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004a990 @ 0004a990
|
|
|
|
void FUN_0004a990(int *param_1,uint param_2)
|
|
|
|
{
|
|
void *pvVar1;
|
|
void *pvVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
uint local_1c;
|
|
uint local_18;
|
|
|
|
iVar5 = *param_1;
|
|
if ((uint)(param_1[2] - iVar5 >> 2) < param_2) {
|
|
if (param_2 >> 0x1e != 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("vector");
|
|
}
|
|
iVar4 = param_1[1];
|
|
iVar3 = iVar4 - iVar5;
|
|
if (iVar5 == 0) {
|
|
param_2 = param_2 << 2;
|
|
local_1c = param_2;
|
|
if (param_2 < 0x81) {
|
|
pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_1c);
|
|
}
|
|
else {
|
|
pvVar1 = operator_new(param_2);
|
|
local_1c = param_2;
|
|
}
|
|
param_2 = local_1c >> 2;
|
|
}
|
|
else {
|
|
param_2 = param_2 << 2;
|
|
local_18 = param_2;
|
|
if (param_2 < 0x81) {
|
|
pvVar1 = (void *)std::__node_alloc::_M_allocate(&local_18);
|
|
param_2 = local_18;
|
|
}
|
|
else {
|
|
pvVar1 = operator_new(param_2);
|
|
}
|
|
param_2 = param_2 >> 2;
|
|
if (iVar4 != iVar5) {
|
|
__aeabi_memcpy(pvVar1,iVar5,iVar3);
|
|
}
|
|
pvVar2 = (void *)*param_1;
|
|
if (pvVar2 != (void *)0x0) {
|
|
if ((uint)(param_1[2] - (int)pvVar2) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar2,param_1[2] - (int)pvVar2);
|
|
}
|
|
else {
|
|
operator_delete(pvVar2);
|
|
}
|
|
}
|
|
}
|
|
*param_1 = (int)pvVar1;
|
|
param_1[1] = (int)((int)pvVar1 + (iVar3 >> 2) * 4);
|
|
param_1[2] = (int)((int)pvVar1 + param_2 * 4);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004aa50 @ 0004aa50
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x0004aaf6) */
|
|
|
|
void FUN_0004aa50(undefined4 *param_1,uint param_2,undefined4 *param_3)
|
|
|
|
{
|
|
void *pvVar1;
|
|
uint uVar2;
|
|
undefined4 *puVar3;
|
|
undefined4 uVar4;
|
|
int iVar5;
|
|
undefined4 *puVar6;
|
|
undefined4 *puVar7;
|
|
int iVar8;
|
|
undefined1 auStack_24 [4];
|
|
void *local_20;
|
|
undefined4 local_1c;
|
|
int local_18;
|
|
|
|
puVar7 = (undefined4 *)*param_1;
|
|
if ((uint)(param_1[2] - (int)puVar7 >> 2) < param_2) {
|
|
FUN_0004ab14(&local_20,param_2,param_3,auStack_24);
|
|
pvVar1 = (void *)*param_1;
|
|
*param_1 = local_20;
|
|
uVar4 = param_1[1];
|
|
param_1[1] = local_1c;
|
|
iVar5 = param_1[2];
|
|
param_1[2] = local_18;
|
|
if (pvVar1 != (void *)0x0) {
|
|
local_20 = pvVar1;
|
|
local_1c = uVar4;
|
|
local_18 = iVar5;
|
|
if (0x80 < (uint)(iVar5 - (int)pvVar1)) {
|
|
operator_delete(pvVar1);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(pvVar1,iVar5 - (int)pvVar1);
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
puVar6 = (undefined4 *)param_1[1];
|
|
uVar2 = (int)puVar6 - (int)puVar7;
|
|
if ((uint)((int)uVar2 >> 2) < param_2) {
|
|
if (0 < (int)uVar2) {
|
|
iVar5 = (uVar2 >> 2) + 1;
|
|
do {
|
|
*puVar7 = *param_3;
|
|
puVar7 = puVar7 + 1;
|
|
iVar5 = iVar5 + -1;
|
|
} while (1 < iVar5);
|
|
puVar7 = (undefined4 *)*param_1;
|
|
puVar6 = (undefined4 *)param_1[1];
|
|
}
|
|
iVar8 = (int)puVar6 - (int)puVar7 >> 2;
|
|
iVar5 = param_2 - iVar8;
|
|
puVar7 = puVar6 + iVar5;
|
|
if (0 < iVar5 * 4) {
|
|
iVar8 = (param_2 + 1) - iVar8;
|
|
do {
|
|
*puVar6 = *param_3;
|
|
puVar6 = puVar6 + 1;
|
|
iVar8 = iVar8 + -1;
|
|
} while (1 < iVar8);
|
|
}
|
|
param_1[1] = puVar7;
|
|
return;
|
|
}
|
|
puVar3 = puVar7;
|
|
uVar2 = param_2;
|
|
if (param_2 != 0) {
|
|
do {
|
|
*puVar3 = *param_3;
|
|
uVar2 = uVar2 - 1;
|
|
puVar3 = puVar3 + 1;
|
|
} while (uVar2 != 0);
|
|
puVar7 = puVar7 + param_2;
|
|
puVar6 = (undefined4 *)param_1[1];
|
|
}
|
|
if (puVar7 != puVar6) {
|
|
param_1[1] = puVar7;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ab14 @ 0004ab14
|
|
|
|
undefined4 * FUN_0004ab14(undefined4 *param_1,uint param_2,undefined4 *param_3)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
undefined4 uVar2;
|
|
undefined4 *puVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint local_18;
|
|
|
|
*param_1 = 0;
|
|
param_1[1] = 0;
|
|
param_1[2] = 0;
|
|
if (param_2 >> 0x1e == 0) {
|
|
if (param_2 == 0) {
|
|
*param_1 = 0;
|
|
param_1[1] = 0;
|
|
param_1[2] = 0;
|
|
puVar3 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
uVar5 = param_2 * 4;
|
|
local_18 = uVar5;
|
|
if (uVar5 < 0x81) {
|
|
puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18);
|
|
}
|
|
else {
|
|
puVar1 = (undefined4 *)operator_new(uVar5);
|
|
local_18 = uVar5;
|
|
}
|
|
*param_1 = puVar1;
|
|
param_1[1] = puVar1;
|
|
param_1[2] = (int)puVar1 + (local_18 & 0xfffffffc);
|
|
puVar3 = puVar1 + param_2;
|
|
if (0 < (int)uVar5) {
|
|
iVar4 = param_2 + 1;
|
|
do {
|
|
*puVar1 = *param_3;
|
|
puVar1 = puVar1 + 1;
|
|
iVar4 = iVar4 + -1;
|
|
} while (1 < iVar4);
|
|
}
|
|
}
|
|
param_1[1] = puVar3;
|
|
return param_1;
|
|
}
|
|
FUN_00030824(4);
|
|
uVar2 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar2,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004aba0 @ 0004aba0
|
|
|
|
void FUN_0004aba0(undefined4 *param_1,int param_2,int param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined1 uVar2;
|
|
int extraout_r1;
|
|
int iVar3;
|
|
undefined4 *puVar4;
|
|
byte *__s2;
|
|
byte *pbVar5;
|
|
uint uVar6;
|
|
size_t sVar7;
|
|
int iVar8;
|
|
int *piVar9;
|
|
int iVar10;
|
|
int *piVar11;
|
|
int *piVar12;
|
|
size_t __n;
|
|
int *piVar13;
|
|
int local_18;
|
|
|
|
__s2 = *(byte **)(param_3 + 0x14);
|
|
__n = *(int *)(param_3 + 0x10) - (int)__s2;
|
|
iVar10 = *(int *)(param_2 + 8);
|
|
iVar1 = 0;
|
|
if (__n != 0) {
|
|
iVar1 = 0;
|
|
pbVar5 = __s2;
|
|
sVar7 = __n;
|
|
do {
|
|
iVar1 = iVar1 * 5 + (uint)*pbVar5;
|
|
pbVar5 = pbVar5 + 1;
|
|
sVar7 = sVar7 - 1;
|
|
} while (sVar7 != 0);
|
|
}
|
|
__aeabi_uidivmod(iVar1,(*(int *)(param_2 + 0xc) - iVar10 >> 2) + -1);
|
|
iVar1 = extraout_r1 * 4;
|
|
piVar11 = *(int **)(iVar10 + iVar1);
|
|
iVar8 = iVar10 + iVar1;
|
|
piVar9 = *(int **)(iVar8 + 4);
|
|
piVar12 = piVar11;
|
|
if (piVar11 == piVar9) {
|
|
iVar3 = iVar8;
|
|
if (piVar11 == *(int **)(param_2 + 4)) {
|
|
local_18 = 0;
|
|
piVar12 = (int *)(param_2 + 4);
|
|
}
|
|
else {
|
|
do {
|
|
piVar12 = *(int **)(iVar3 + -4);
|
|
iVar3 = iVar3 + -4;
|
|
} while (piVar11 == piVar12);
|
|
local_18 = (iVar3 - iVar10 >> 2) + 1;
|
|
piVar9 = (int *)*piVar12;
|
|
if ((((piVar11 != piVar9) && (piVar13 = (int *)*piVar9, piVar12 = piVar9, piVar11 != piVar13))
|
|
&& (piVar9 = (int *)*piVar13, piVar12 = piVar13, piVar11 != piVar9)) &&
|
|
(piVar13 = (int *)*piVar9, piVar12 = piVar9, piVar11 != piVar13)) {
|
|
for (piVar9 = (int *)*piVar13; piVar12 = piVar13, piVar11 != piVar9; piVar9 = (int *)*piVar9
|
|
) {
|
|
piVar13 = (int *)*piVar13;
|
|
}
|
|
}
|
|
}
|
|
piVar9 = (int *)FUN_0004ace4((int *)(param_2 + 4),param_3);
|
|
*piVar9 = *piVar12;
|
|
*piVar12 = (int)piVar9;
|
|
puVar4 = (undefined4 *)(iVar10 + local_18 * 4);
|
|
uVar6 = (iVar8 + 4) - (int)puVar4;
|
|
if (0 < (int)uVar6) {
|
|
iVar10 = (uVar6 >> 2) + 1;
|
|
do {
|
|
*puVar4 = piVar9;
|
|
puVar4 = puVar4 + 1;
|
|
iVar10 = iVar10 + -1;
|
|
} while (1 < iVar10);
|
|
}
|
|
*(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1;
|
|
piVar12 = *(int **)(*(int *)(param_2 + 8) + iVar1);
|
|
uVar2 = 1;
|
|
}
|
|
else {
|
|
do {
|
|
if (piVar12[5] - piVar12[6] == __n) {
|
|
iVar1 = memcmp((void *)piVar12[6],__s2,__n);
|
|
uVar2 = 0;
|
|
if (iVar1 == 0) goto LAB_0004acdc;
|
|
}
|
|
piVar12 = (int *)*piVar12;
|
|
} while (piVar9 != piVar12);
|
|
piVar12 = (int *)FUN_0004ace4(param_2 + 4,param_3);
|
|
*piVar12 = *piVar11;
|
|
*piVar11 = (int)piVar12;
|
|
*(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1;
|
|
uVar2 = 1;
|
|
}
|
|
LAB_0004acdc:
|
|
*(undefined1 *)(param_1 + 1) = uVar2;
|
|
*param_1 = piVar12;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ace4 @ 0004ace4
|
|
|
|
undefined4 * FUN_0004ace4(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
undefined4 uVar2;
|
|
uint local_14;
|
|
|
|
local_14 = 0x24;
|
|
puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_14);
|
|
FUN_00036f1c(puVar1 + 1,param_2);
|
|
puVar1[7] = *(undefined4 *)(param_2 + 0x18);
|
|
uVar2 = *(undefined4 *)(param_2 + 0x1c);
|
|
*puVar1 = 0;
|
|
puVar1[8] = uVar2;
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ad36 @ 0004ad36
|
|
|
|
void FUN_0004ad36(int param_1,undefined4 *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int extraout_r1;
|
|
int *piVar2;
|
|
uint uVar3;
|
|
byte *pbVar4;
|
|
int *piVar5;
|
|
int iVar6;
|
|
int *piVar7;
|
|
int iVar8;
|
|
int *piVar9;
|
|
int iVar10;
|
|
|
|
piVar9 = (int *)*param_2;
|
|
pbVar4 = (byte *)piVar9[6];
|
|
iVar6 = piVar9[5] - (int)pbVar4;
|
|
iVar10 = *(int *)(param_1 + 8);
|
|
iVar1 = 0;
|
|
if (iVar6 != 0) {
|
|
iVar1 = 0;
|
|
do {
|
|
iVar1 = iVar1 * 5 + (uint)*pbVar4;
|
|
pbVar4 = pbVar4 + 1;
|
|
iVar6 = iVar6 + -1;
|
|
} while (iVar6 != 0);
|
|
}
|
|
__aeabi_uidivmod(iVar1,(*(int *)(param_1 + 0xc) - iVar10 >> 2) + -1);
|
|
iVar1 = extraout_r1 * 4;
|
|
piVar2 = *(int **)(iVar10 + iVar1);
|
|
if (piVar2 != piVar9) {
|
|
iVar6 = 0;
|
|
for (piVar7 = (int *)*piVar2; *(int **)(iVar10 + iVar1 + 4) != piVar7; piVar7 = (int *)*piVar7)
|
|
{
|
|
if (piVar9 == piVar7) {
|
|
piVar7 = (int *)*piVar2;
|
|
*piVar2 = *piVar7;
|
|
piVar9 = (int *)piVar7[6];
|
|
if ((piVar9 == piVar7 + 1) || (piVar9 == (int *)0x0)) {
|
|
iVar6 = 1;
|
|
if (piVar7 == (int *)0x0) break;
|
|
}
|
|
else {
|
|
uVar3 = piVar7[1] - (int)piVar9;
|
|
if (uVar3 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar9,uVar3);
|
|
}
|
|
else {
|
|
operator_delete(piVar9);
|
|
}
|
|
}
|
|
std::__node_alloc::_M_deallocate(piVar7,0x24);
|
|
iVar6 = 1;
|
|
break;
|
|
}
|
|
piVar2 = (int *)*piVar2;
|
|
}
|
|
goto LAB_0004ae5e;
|
|
}
|
|
iVar6 = iVar10 + iVar1;
|
|
if (piVar9 == *(int **)(param_1 + 4)) {
|
|
iVar6 = 0;
|
|
piVar2 = (int *)(param_1 + 4);
|
|
}
|
|
else {
|
|
do {
|
|
piVar2 = *(int **)(iVar6 + -4);
|
|
iVar6 = iVar6 + -4;
|
|
} while (piVar9 == piVar2);
|
|
iVar6 = (iVar6 - iVar10 >> 2) + 1;
|
|
piVar7 = (int *)*piVar2;
|
|
if (((piVar9 != piVar7) && (piVar5 = (int *)*piVar7, piVar2 = piVar7, piVar9 != piVar5)) &&
|
|
(piVar7 = (int *)*piVar5, piVar2 = piVar5, piVar9 != piVar7)) {
|
|
piVar2 = piVar7;
|
|
for (piVar5 = (int *)*piVar7; piVar9 != piVar5; piVar5 = (int *)*piVar5) {
|
|
piVar2 = (int *)*piVar2;
|
|
}
|
|
}
|
|
}
|
|
piVar7 = (int *)*piVar2;
|
|
iVar8 = *piVar7;
|
|
*piVar2 = iVar8;
|
|
piVar2 = (int *)(iVar10 + iVar6 * 4);
|
|
piVar9 = (int *)piVar7[6];
|
|
if ((piVar9 == piVar7 + 1) || (piVar9 == (int *)0x0)) {
|
|
if (piVar7 != (int *)0x0) goto LAB_0004ae2e;
|
|
}
|
|
else {
|
|
uVar3 = piVar7[1] - (int)piVar9;
|
|
if (uVar3 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar9,uVar3);
|
|
}
|
|
else {
|
|
operator_delete(piVar9);
|
|
}
|
|
LAB_0004ae2e:
|
|
std::__node_alloc::_M_deallocate(piVar7,0x24);
|
|
}
|
|
uVar3 = (iVar10 + iVar1 + 4) - (int)piVar2;
|
|
if (0 < (int)uVar3) {
|
|
iVar1 = (uVar3 >> 2) + 1;
|
|
do {
|
|
*piVar2 = iVar8;
|
|
piVar2 = piVar2 + 1;
|
|
iVar1 = iVar1 + -1;
|
|
} while (1 < iVar1);
|
|
}
|
|
iVar6 = 1;
|
|
LAB_0004ae5e:
|
|
*(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) - iVar6;
|
|
FUN_0004ae70();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ae70 @ 0004ae70
|
|
|
|
void FUN_0004ae70(int param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
char *pcVar8;
|
|
uint uVar9;
|
|
char *pcVar10;
|
|
|
|
uVar9 = (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2) - 1;
|
|
uVar1 = __floatunsisf(*(undefined4 *)(param_1 + 0x14));
|
|
uVar2 = __floatunsisf(uVar9);
|
|
uVar2 = __divsf3(uVar1,uVar2);
|
|
uVar3 = *(undefined4 *)(param_1 + 0x18);
|
|
uVar4 = __mulsf3(uVar3,0x3e800000);
|
|
iVar5 = __aeabi_fcmpgt(uVar2,uVar4);
|
|
if (iVar5 == 0) {
|
|
iVar5 = 0;
|
|
uVar7 = 0x1e;
|
|
while (uVar6 = uVar7, 0 < (int)uVar6) {
|
|
uVar7 = uVar6 >> 1;
|
|
if ((uint)(&DAT_0006537c)[uVar7 + iVar5] < uVar9) {
|
|
iVar5 = uVar7 + iVar5 + 1;
|
|
uVar7 = (uVar6 - 1) - uVar7;
|
|
}
|
|
}
|
|
pcVar8 = (char *)(&DAT_0006537c + iVar5);
|
|
if ((iVar5 * 4 == 0x78) || ((iVar5 != 0 && ((&DAT_0006537c)[iVar5] == uVar9)))) {
|
|
pcVar8 = "St7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE" + iVar5 * 4 + 0x38;
|
|
}
|
|
if (pcVar8 == "\a") {
|
|
if (uVar9 < 8) {
|
|
return;
|
|
}
|
|
pcVar8 = "\a";
|
|
}
|
|
else {
|
|
uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -4));
|
|
uVar2 = __divsf3(uVar1,uVar2);
|
|
iVar5 = __aeabi_fcmpgt(uVar2,uVar3);
|
|
if (iVar5 != 0) {
|
|
return;
|
|
}
|
|
if (pcVar8 != "\x17") {
|
|
do {
|
|
pcVar10 = pcVar8 + -4;
|
|
uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -8));
|
|
uVar2 = __divsf3(uVar1,uVar2);
|
|
iVar5 = __aeabi_fcmpgt(uVar2,uVar3);
|
|
if (iVar5 != 0) break;
|
|
pcVar8 = pcVar10;
|
|
} while (pcVar10 != "\x17");
|
|
}
|
|
}
|
|
FUN_0004af88(param_1,*(undefined4 *)pcVar8);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004af88 @ 0004af88
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
void FUN_0004af88(int param_1,int param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
void *pvVar4;
|
|
undefined4 uVar5;
|
|
int ******ppppppiVar6;
|
|
int ******ppppppiVar7;
|
|
int extraout_r1;
|
|
int *******pppppppiVar8;
|
|
int *******pppppppiVar9;
|
|
undefined4 *puVar10;
|
|
size_t sVar11;
|
|
void *pvVar12;
|
|
int *******pppppppiVar13;
|
|
int *******pppppppiVar14;
|
|
int *******pppppppiVar15;
|
|
size_t __n;
|
|
int *******pppppppiVar16;
|
|
int *******pppppppiVar17;
|
|
void *local_44;
|
|
int local_40;
|
|
void *local_28;
|
|
int *******local_1c;
|
|
uint local_18;
|
|
|
|
local_28 = (void *)0x0;
|
|
local_1c = (int *******)0x0;
|
|
pppppppiVar15 = (int *******)(param_1 + 4);
|
|
uVar1 = param_2 + 1;
|
|
if (uVar1 >> 0x1e == 0) {
|
|
if (uVar1 == 0) {
|
|
local_40 = 0;
|
|
local_44 = (void *)0x0;
|
|
}
|
|
else {
|
|
uVar1 = uVar1 * 4;
|
|
local_18 = uVar1;
|
|
if (uVar1 < 0x81) {
|
|
local_28 = (void *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar2 = local_18;
|
|
}
|
|
else {
|
|
local_28 = operator_new(uVar1);
|
|
uVar2 = uVar1;
|
|
}
|
|
local_44 = (void *)((int)local_28 + uVar1);
|
|
local_40 = (int)local_28 + (uVar2 & 0xfffffffc);
|
|
if (0 < (int)uVar1) {
|
|
iVar3 = -2 - param_2;
|
|
if (-2 - param_2 < -1) {
|
|
iVar3 = -2;
|
|
}
|
|
__aeabi_memclr4(local_28,(iVar3 + param_2) * 4 + 0xc);
|
|
}
|
|
}
|
|
pppppppiVar16 = (int *******)*pppppppiVar15;
|
|
while (pppppppiVar16 != (int *******)0x0) {
|
|
ppppppiVar6 = pppppppiVar16[6];
|
|
__n = (int)pppppppiVar16[5] - (int)ppppppiVar6;
|
|
iVar3 = 0;
|
|
if (__n != 0) {
|
|
iVar3 = 0;
|
|
ppppppiVar7 = ppppppiVar6;
|
|
sVar11 = __n;
|
|
do {
|
|
iVar3 = iVar3 * 5 + (uint)*(byte *)ppppppiVar7;
|
|
ppppppiVar7 = (int ******)((int)ppppppiVar7 + 1);
|
|
sVar11 = sVar11 - 1;
|
|
} while (sVar11 != 0);
|
|
}
|
|
__aeabi_uidivmod(iVar3,param_2);
|
|
ppppppiVar7 = *pppppppiVar16;
|
|
pppppppiVar17 = pppppppiVar16;
|
|
while (((ppppppiVar7 != (int ******)0x0 && (__n == (int)ppppppiVar7[5] - (int)ppppppiVar7[6]))
|
|
&& (iVar3 = memcmp(ppppppiVar6,ppppppiVar7[6],__n), iVar3 == 0))) {
|
|
ppppppiVar7 = (int ******)*ppppppiVar7;
|
|
pppppppiVar17 = (int *******)*pppppppiVar17;
|
|
}
|
|
pppppppiVar13 = *(int ********)((int)local_28 + extraout_r1 * 4);
|
|
pvVar4 = (void *)((int)local_28 + extraout_r1 * 4);
|
|
iVar3 = 0;
|
|
pvVar12 = pvVar4;
|
|
pppppppiVar8 = (int *******)&local_1c;
|
|
if (pppppppiVar13 != local_1c) {
|
|
do {
|
|
pppppppiVar8 = *(int ********)((int)pvVar12 + -4);
|
|
pvVar12 = (void *)((int)pvVar12 + -4);
|
|
} while (pppppppiVar13 == pppppppiVar8);
|
|
iVar3 = ((int)pvVar12 - (int)local_28 >> 2) + 1;
|
|
pppppppiVar14 = (int *******)*pppppppiVar8;
|
|
if ((pppppppiVar13 != pppppppiVar14) &&
|
|
(pppppppiVar9 = (int *******)*pppppppiVar14, pppppppiVar8 = pppppppiVar14,
|
|
pppppppiVar13 != pppppppiVar9)) {
|
|
for (pppppppiVar14 = (int *******)*pppppppiVar9; pppppppiVar8 = pppppppiVar9,
|
|
pppppppiVar13 != pppppppiVar14; pppppppiVar14 = (int *******)*pppppppiVar14) {
|
|
pppppppiVar9 = (int *******)*pppppppiVar9;
|
|
}
|
|
}
|
|
}
|
|
if (((pppppppiVar15 != pppppppiVar17) && (pppppppiVar15 != pppppppiVar8)) &&
|
|
(pppppppiVar8 != pppppppiVar17)) {
|
|
ppppppiVar6 = *pppppppiVar8;
|
|
*pppppppiVar15 = *pppppppiVar17;
|
|
*pppppppiVar8 = (int ******)pppppppiVar16;
|
|
*pppppppiVar17 = ppppppiVar6;
|
|
}
|
|
puVar10 = (undefined4 *)((int)local_28 + iVar3 * 4);
|
|
uVar1 = (int)pvVar4 + (4 - (int)puVar10);
|
|
if (0 < (int)uVar1) {
|
|
iVar3 = (uVar1 >> 2) + 1;
|
|
do {
|
|
*puVar10 = pppppppiVar16;
|
|
puVar10 = puVar10 + 1;
|
|
iVar3 = iVar3 + -1;
|
|
} while (1 < iVar3);
|
|
}
|
|
pppppppiVar16 = (int *******)*pppppppiVar15;
|
|
}
|
|
*(int ********)(param_1 + 4) = local_1c;
|
|
*(void **)(param_1 + 0xc) = local_44;
|
|
pvVar12 = *(void **)(param_1 + 8);
|
|
*(void **)(param_1 + 8) = local_28;
|
|
iVar3 = *(int *)(param_1 + 0x10);
|
|
*(int *)(param_1 + 0x10) = local_40;
|
|
local_1c = pppppppiVar16;
|
|
if (pvVar12 != (void *)0x0) {
|
|
uVar1 = iVar3 - (int)pvVar12;
|
|
if (uVar1 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar12,uVar1);
|
|
pppppppiVar16 = local_1c;
|
|
}
|
|
else {
|
|
operator_delete(pvVar12);
|
|
pppppppiVar16 = local_1c;
|
|
}
|
|
}
|
|
while (pppppppiVar16 != (int *******)0x0) {
|
|
pppppppiVar15 = (int *******)pppppppiVar16[6];
|
|
pppppppiVar17 = (int *******)*pppppppiVar16;
|
|
if ((pppppppiVar15 != pppppppiVar16 + 1) && (pppppppiVar15 != (int *******)0x0)) {
|
|
uVar1 = (int)pppppppiVar16[1] - (int)pppppppiVar15;
|
|
if (uVar1 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pppppppiVar15,uVar1);
|
|
}
|
|
else {
|
|
operator_delete(pppppppiVar15);
|
|
}
|
|
}
|
|
std::__node_alloc::_M_deallocate(pppppppiVar16,0x24);
|
|
pppppppiVar16 = pppppppiVar17;
|
|
}
|
|
return;
|
|
}
|
|
FUN_00030824(4);
|
|
uVar5 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004b1b0 @ 0004b1b0
|
|
|
|
void FUN_0004b1b0(int *param_1,int param_2,undefined4 *param_3)
|
|
|
|
{
|
|
bool bVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
size_t __n;
|
|
int *piVar5;
|
|
undefined1 auStack_30 [4];
|
|
int local_2c [4];
|
|
int local_1c;
|
|
int *local_18;
|
|
|
|
iVar3 = FUN_0004b24a(param_2,param_3);
|
|
piVar5 = *(int **)(*(int *)(param_2 + 8) + iVar3 * 4);
|
|
iVar3 = *(int *)(*(int *)(param_2 + 8) + iVar3 * 4 + 4);
|
|
while( true ) {
|
|
if ((int *)iVar3 == piVar5) {
|
|
*param_1 = 0;
|
|
return;
|
|
}
|
|
FUN_00031c38(local_2c,*param_3,auStack_30);
|
|
piVar2 = local_18;
|
|
__n = piVar5[5] - piVar5[6];
|
|
bVar1 = false;
|
|
if (__n == local_1c - (int)local_18) {
|
|
iVar4 = memcmp((void *)piVar5[6],local_18,__n);
|
|
bVar1 = true;
|
|
if (iVar4 != 0) {
|
|
bVar1 = false;
|
|
}
|
|
}
|
|
if ((piVar2 != local_2c) && (piVar2 != (int *)0x0)) {
|
|
if ((uint)(local_2c[0] - (int)piVar2) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar2,local_2c[0] - (int)piVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar2);
|
|
}
|
|
}
|
|
if (bVar1) break;
|
|
piVar5 = (int *)*piVar5;
|
|
}
|
|
*param_1 = (int)piVar5;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004b24a @ 0004b24a
|
|
|
|
undefined4 FUN_0004b24a(int param_1,undefined4 *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 extraout_r1;
|
|
int iVar2;
|
|
byte *pbVar3;
|
|
int iVar4;
|
|
undefined1 auStack_2c [4];
|
|
int local_28 [4];
|
|
int local_18;
|
|
byte *local_14;
|
|
|
|
iVar2 = *(int *)(param_1 + 8);
|
|
iVar1 = *(int *)(param_1 + 0xc);
|
|
FUN_00031c38(local_28,*param_2,auStack_2c);
|
|
local_18 = local_18 - (int)local_14;
|
|
iVar4 = 0;
|
|
if (local_18 != 0) {
|
|
iVar4 = 0;
|
|
pbVar3 = local_14;
|
|
do {
|
|
iVar4 = iVar4 * 5 + (uint)*pbVar3;
|
|
pbVar3 = pbVar3 + 1;
|
|
local_18 = local_18 + -1;
|
|
} while (local_18 != 0);
|
|
}
|
|
if ((local_14 != (byte *)0x0) && (local_14 != (byte *)local_28)) {
|
|
if ((uint)(local_28[0] - (int)local_14) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_14,local_28[0] - (int)local_14);
|
|
}
|
|
else {
|
|
operator_delete(local_14);
|
|
}
|
|
}
|
|
__aeabi_uidivmod(iVar4,(iVar1 - iVar2 >> 2) + -1);
|
|
return extraout_r1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ctype_byname @ 0004b2b0
|
|
|
|
/* std::ctype_byname<char>::ctype_byname(char const*, unsigned int) */
|
|
|
|
ctype_byname<char> * __thiscall
|
|
std::ctype_byname<char>::ctype_byname(ctype_byname<char> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
local_14 = param_1;
|
|
ctype<char>::ctype((ctype<char> *)this,(mask *)0x0,false,param_2);
|
|
*(undefined ***)this = &PTR__ctype_byname_000695f8;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar3 = 0;
|
|
iVar1 = FUN_0004a144(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0x414) = iVar1;
|
|
if (iVar1 != 0) {
|
|
*(ctype_byname<char> **)(this + 0xc) = this + 0x14;
|
|
iVar1 = FUN_0004dab0();
|
|
do {
|
|
*(uint *)(this + iVar3 * -2 + 0x14) = (uint)*(ushort *)(iVar1 - iVar3);
|
|
iVar3 = iVar3 + -2;
|
|
} while (iVar3 != -0x200);
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"ctype");
|
|
ctype<char>::~ctype((ctype<char> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_init @ 0004b348
|
|
|
|
/* std::ctype_byname<char>::_M_init() */
|
|
|
|
void __thiscall std::ctype_byname<char>::_M_init(ctype_byname<char> *this)
|
|
|
|
{
|
|
ushort *puVar1;
|
|
int iVar2;
|
|
ctype_byname<char> *pcVar3;
|
|
|
|
pcVar3 = this + 0x14;
|
|
*(ctype_byname<char> **)(this + 0xc) = pcVar3;
|
|
puVar1 = (ushort *)FUN_0004dab0(*(undefined4 *)(this + 0x414));
|
|
iVar2 = 0x100;
|
|
do {
|
|
*(uint *)pcVar3 = (uint)*puVar1;
|
|
pcVar3 = pcVar3 + 4;
|
|
iVar2 = iVar2 + -1;
|
|
puVar1 = puVar1 + 1;
|
|
} while (iVar2 != 0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ctype_byname @ 0004b370
|
|
|
|
/* std::ctype_byname<char>::~ctype_byname() */
|
|
|
|
void __thiscall std::ctype_byname<char>::~ctype_byname(ctype_byname<char> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__ctype_byname_000695f8;
|
|
FUN_0004a50c(*(undefined4 *)(this + 0x414));
|
|
ctype<char>::~ctype((ctype<char> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ctype_byname @ 0004b3ac
|
|
|
|
/* std::ctype_byname<char>::~ctype_byname() */
|
|
|
|
void __thiscall std::ctype_byname<char>::~ctype_byname(ctype_byname<char> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__ctype_byname_000695f8;
|
|
FUN_0004a50c(*(undefined4 *)(this + 0x414));
|
|
ctype<char>::~ctype((ctype<char> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_toupper @ 0004b3f8
|
|
|
|
/* std::ctype_byname<char>::do_toupper(char) const */
|
|
|
|
undefined1 std::ctype_byname<char>::do_toupper(char param_1)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
|
|
uVar1 = FUN_0004dabc(*(undefined4 *)(param_1 + 0x414));
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_tolower @ 0004b410
|
|
|
|
/* std::ctype_byname<char>::do_tolower(char) const */
|
|
|
|
undefined1 std::ctype_byname<char>::do_tolower(char param_1)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
|
|
uVar1 = FUN_0004dac8(*(undefined4 *)(param_1 + 0x414));
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_toupper @ 0004b428
|
|
|
|
/* std::ctype_byname<char>::do_toupper(char*, char const*) const */
|
|
|
|
char * __thiscall
|
|
std::ctype_byname<char>::do_toupper(ctype_byname<char> *this,char *param_1,char *param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
|
|
if (param_1 != param_2) {
|
|
do {
|
|
cVar1 = FUN_0004dabc(*(undefined4 *)(this + 0x414),*param_1);
|
|
*param_1 = cVar1;
|
|
param_1 = param_1 + 1;
|
|
} while (param_2 != param_1);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_tolower @ 0004b454
|
|
|
|
/* std::ctype_byname<char>::do_tolower(char*, char const*) const */
|
|
|
|
char * __thiscall
|
|
std::ctype_byname<char>::do_tolower(ctype_byname<char> *this,char *param_1,char *param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
|
|
if (param_1 != param_2) {
|
|
do {
|
|
cVar1 = FUN_0004dac8(*(undefined4 *)(this + 0x414),*param_1);
|
|
*param_1 = cVar1;
|
|
param_1 = param_1 + 1;
|
|
} while (param_2 != param_1);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ctype_byname @ 0004b480
|
|
|
|
/* std::ctype_byname<wchar_t>::ctype_byname(char const*, unsigned int) */
|
|
|
|
ctype_byname<wchar_t> * __thiscall
|
|
std::ctype_byname<wchar_t>::ctype_byname(ctype_byname<wchar_t> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_2 != 0);
|
|
local_14 = param_1;
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__ctype_byname_00069628;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a144(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0xc) = iVar1;
|
|
if (iVar1 != 0) {
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"ctype");
|
|
ctype<wchar_t>::~ctype((ctype<wchar_t> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ctype_byname @ 0004b4f4
|
|
|
|
/* std::ctype_byname<wchar_t>::~ctype_byname() */
|
|
|
|
void __thiscall std::ctype_byname<wchar_t>::~ctype_byname(ctype_byname<wchar_t> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__ctype_byname_00069628;
|
|
FUN_0004a50c(*(undefined4 *)(this + 0xc));
|
|
ctype<wchar_t>::~ctype((ctype<wchar_t> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ctype_byname @ 0004b528
|
|
|
|
/* std::ctype_byname<wchar_t>::~ctype_byname() */
|
|
|
|
void __thiscall std::ctype_byname<wchar_t>::~ctype_byname(ctype_byname<wchar_t> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__ctype_byname_00069628;
|
|
FUN_0004a50c(*(undefined4 *)(this + 0xc));
|
|
ctype<wchar_t>::~ctype((ctype<wchar_t> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_is @ 0004b56c
|
|
|
|
/* std::ctype_byname<wchar_t>::do_is(std::ctype_base::mask, wchar_t) const */
|
|
|
|
bool __thiscall
|
|
std::ctype_byname<wchar_t>::do_is(ctype_byname<wchar_t> *this,undefined2 param_2,undefined4 param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = FUN_0004dad4(*(undefined4 *)(this + 0xc),param_3,param_2);
|
|
return iVar1 != 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_is @ 0004b590
|
|
|
|
/* std::ctype_byname<wchar_t>::do_is(wchar_t const*, wchar_t const*, std::ctype_base::mask*) const
|
|
*/
|
|
|
|
wchar_t * __thiscall
|
|
std::ctype_byname<wchar_t>::do_is
|
|
(ctype_byname<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,mask *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
wchar_t wVar2;
|
|
|
|
if (param_1 < param_2) {
|
|
do {
|
|
wVar2 = *param_1;
|
|
param_1 = param_1 + 1;
|
|
uVar1 = FUN_0004dad4(*(undefined4 *)(this + 0xc),wVar2,0x1ff);
|
|
*(undefined4 *)param_3 = uVar1;
|
|
param_3 = (mask *)((int)param_3 + 4);
|
|
} while (param_1 < param_2);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_scan_is @ 0004b5c0
|
|
|
|
/* std::ctype_byname<wchar_t>::do_scan_is(std::ctype_base::mask, wchar_t const*, wchar_t const*)
|
|
const */
|
|
|
|
void __thiscall
|
|
std::ctype_byname<wchar_t>::do_scan_is
|
|
(ctype_byname<wchar_t> *this,uint param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined1 auStack_1c [4];
|
|
uint local_18;
|
|
undefined4 local_14;
|
|
|
|
local_14 = *(undefined4 *)(this + 0xc);
|
|
local_18 = param_2 & 0xffff;
|
|
FUN_0004cc5c(param_3,param_4,&local_18,auStack_1c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_scan_not @ 0004b5ec
|
|
|
|
/* std::ctype_byname<wchar_t>::do_scan_not(std::ctype_base::mask, wchar_t const*, wchar_t const*)
|
|
const */
|
|
|
|
void __thiscall
|
|
std::ctype_byname<wchar_t>::do_scan_not
|
|
(ctype_byname<wchar_t> *this,uint param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined1 auStack_20 [4];
|
|
undefined1 auStack_1c [4];
|
|
uint local_18;
|
|
undefined4 local_14;
|
|
|
|
local_14 = *(undefined4 *)(this + 0xc);
|
|
local_18 = param_2 & 0xffff;
|
|
FUN_0004cd16(param_3,param_4,auStack_1c,auStack_20);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_toupper @ 0004b618
|
|
|
|
/* std::ctype_byname<wchar_t>::do_toupper(wchar_t) const */
|
|
|
|
void std::ctype_byname<wchar_t>::do_toupper(wchar_t param_1)
|
|
|
|
{
|
|
FUN_0004dbb8(*(undefined4 *)(param_1 + L'\f'));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_toupper @ 0004b624
|
|
|
|
/* std::ctype_byname<wchar_t>::do_toupper(wchar_t*, wchar_t const*) const */
|
|
|
|
wchar_t * __thiscall
|
|
std::ctype_byname<wchar_t>::do_toupper
|
|
(ctype_byname<wchar_t> *this,wchar_t *param_1,wchar_t *param_2)
|
|
|
|
{
|
|
wchar_t wVar1;
|
|
|
|
if (param_1 < param_2) {
|
|
do {
|
|
wVar1 = FUN_0004dbb8(*(undefined4 *)(this + 0xc),*param_1);
|
|
*param_1 = wVar1;
|
|
param_1 = param_1 + 1;
|
|
} while (param_1 < param_2);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_tolower @ 0004b64e
|
|
|
|
/* std::ctype_byname<wchar_t>::do_tolower(wchar_t) const */
|
|
|
|
void std::ctype_byname<wchar_t>::do_tolower(wchar_t param_1)
|
|
|
|
{
|
|
FUN_0004dbac(*(undefined4 *)(param_1 + L'\f'));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_tolower @ 0004b65a
|
|
|
|
/* std::ctype_byname<wchar_t>::do_tolower(wchar_t*, wchar_t const*) const */
|
|
|
|
wchar_t * __thiscall
|
|
std::ctype_byname<wchar_t>::do_tolower
|
|
(ctype_byname<wchar_t> *this,wchar_t *param_1,wchar_t *param_2)
|
|
|
|
{
|
|
wchar_t wVar1;
|
|
|
|
if (param_1 < param_2) {
|
|
do {
|
|
wVar1 = FUN_0004dbac(*(undefined4 *)(this + 0xc),*param_1);
|
|
*param_1 = wVar1;
|
|
param_1 = param_1 + 1;
|
|
} while (param_1 < param_2);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC collate_byname @ 0004b684
|
|
|
|
/* std::collate_byname<char>::collate_byname(char const*, unsigned int) */
|
|
|
|
collate_byname<char> * __thiscall
|
|
std::collate_byname<char>::collate_byname(collate_byname<char> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_2 != 0);
|
|
local_14 = param_1;
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__collate_byname_00069668;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a41c(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0xc) = iVar1;
|
|
if (iVar1 != 0) {
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"collate");
|
|
collate<char>::~collate((collate<char> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~collate_byname @ 0004b6f8
|
|
|
|
/* std::collate_byname<char>::~collate_byname() */
|
|
|
|
void __thiscall std::collate_byname<char>::~collate_byname(collate_byname<char> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__collate_byname_00069668;
|
|
FUN_0004a71c(*(undefined4 *)(this + 0xc));
|
|
collate<char>::~collate((collate<char> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~collate_byname @ 0004b72c
|
|
|
|
/* std::collate_byname<char>::~collate_byname() */
|
|
|
|
void __thiscall std::collate_byname<char>::~collate_byname(collate_byname<char> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__collate_byname_00069668;
|
|
FUN_0004a71c(*(undefined4 *)(this + 0xc));
|
|
collate<char>::~collate((collate<char> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_compare @ 0004b770
|
|
|
|
/* std::collate_byname<char>::do_compare(char const*, char const*, char const*, char const*) const
|
|
*/
|
|
|
|
void __thiscall
|
|
std::collate_byname<char>::do_compare
|
|
(collate_byname<char> *this,char *param_1,char *param_2,char *param_3,char *param_4)
|
|
|
|
{
|
|
FUN_0004dbe6(*(undefined4 *)(this + 0xc),param_1,(int)param_2 - (int)param_1,param_3,
|
|
(int)param_4 - (int)param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_transform @ 0004b78c
|
|
|
|
/* std::collate_byname<char>::do_transform(char const*, char const*) const */
|
|
|
|
void std::collate_byname<char>::do_transform(char *param_1,char *param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int in_r2;
|
|
int in_r3;
|
|
undefined1 *puVar4;
|
|
int local_30 [4];
|
|
int *local_20;
|
|
int *local_1c;
|
|
uint local_18;
|
|
|
|
if (in_r2 == in_r3) {
|
|
*param_1 = '\0';
|
|
*(char **)(param_1 + 0x10) = param_1;
|
|
*(char **)(param_1 + 0x14) = param_1;
|
|
}
|
|
else {
|
|
uVar1 = FUN_0004dd0a(*(undefined4 *)(param_2 + 0xc),0,0);
|
|
local_20 = local_30;
|
|
uVar2 = uVar1 + 1;
|
|
local_1c = local_20;
|
|
if (uVar2 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stl_throw_length_error("basic_string");
|
|
}
|
|
if (0x10 < uVar2) {
|
|
local_18 = uVar2;
|
|
if (uVar2 < 0x81) {
|
|
local_1c = (int *)__node_alloc::_M_allocate(&local_18);
|
|
uVar3 = local_18;
|
|
}
|
|
else {
|
|
local_1c = (int *)operator_new(uVar2);
|
|
uVar3 = uVar2;
|
|
}
|
|
local_30[0] = (int)local_1c + uVar3;
|
|
}
|
|
puVar4 = (undefined1 *)((int)local_1c + uVar1);
|
|
if (0 < (int)uVar1) {
|
|
uVar3 = uVar1 ^ 0xffffffff;
|
|
if ((int)(uVar1 ^ 0xffffffff) < -1) {
|
|
uVar3 = 0xfffffffe;
|
|
}
|
|
local_20 = local_1c;
|
|
__aeabi_memclr(local_1c,uVar1 + uVar3 + 2);
|
|
}
|
|
local_20 = (int *)puVar4;
|
|
*puVar4 = 0;
|
|
FUN_0004dd0a(*(undefined4 *)(param_2 + 0xc),local_1c,uVar2);
|
|
FUN_00036f1c(param_1,local_30);
|
|
if ((local_1c != local_30) && (local_1c != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_30[0] - (int)local_1c)) {
|
|
operator_delete(local_1c);
|
|
return;
|
|
}
|
|
__node_alloc::_M_deallocate(local_1c,local_30[0] - (int)local_1c);
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC collate_byname @ 0004b898
|
|
|
|
/* std::collate_byname<wchar_t>::collate_byname(char const*, unsigned int) */
|
|
|
|
collate_byname<wchar_t> * __thiscall
|
|
std::collate_byname<wchar_t>::collate_byname
|
|
(collate_byname<wchar_t> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_2 != 0);
|
|
local_14 = param_1;
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__collate_byname_00069684;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a41c(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0xc) = iVar1;
|
|
if (iVar1 != 0) {
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"collate");
|
|
collate<wchar_t>::~collate((collate<wchar_t> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~collate_byname @ 0004b90c
|
|
|
|
/* std::collate_byname<wchar_t>::~collate_byname() */
|
|
|
|
void __thiscall std::collate_byname<wchar_t>::~collate_byname(collate_byname<wchar_t> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__collate_byname_00069684;
|
|
FUN_0004a71c(*(undefined4 *)(this + 0xc));
|
|
collate<wchar_t>::~collate((collate<wchar_t> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~collate_byname @ 0004b940
|
|
|
|
/* std::collate_byname<wchar_t>::~collate_byname() */
|
|
|
|
void __thiscall std::collate_byname<wchar_t>::~collate_byname(collate_byname<wchar_t> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__collate_byname_00069684;
|
|
FUN_0004a71c(*(undefined4 *)(this + 0xc));
|
|
collate<wchar_t>::~collate((collate<wchar_t> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_compare @ 0004b984
|
|
|
|
/* std::collate_byname<wchar_t>::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t
|
|
const*) const */
|
|
|
|
void __thiscall
|
|
std::collate_byname<wchar_t>::do_compare
|
|
(collate_byname<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,
|
|
wchar_t *param_4)
|
|
|
|
{
|
|
FUN_0004dc70(*(undefined4 *)(this + 0xc),param_1,(int)param_2 - (int)param_1 >> 2,param_3,
|
|
(int)param_4 - (int)param_3 >> 2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_transform @ 0004b9a4
|
|
|
|
/* std::collate_byname<wchar_t>::do_transform(wchar_t const*, wchar_t const*) const */
|
|
|
|
void std::collate_byname<wchar_t>::do_transform(wchar_t *param_1,wchar_t *param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int in_r2;
|
|
int in_r3;
|
|
uint uVar4;
|
|
int *piVar5;
|
|
int local_60 [16];
|
|
int *local_20;
|
|
int *local_1c;
|
|
uint local_18;
|
|
|
|
if (in_r2 == in_r3) {
|
|
*param_1 = L'\0';
|
|
param_1[0x10] = (wchar_t)param_1;
|
|
param_1[0x11] = (wchar_t)param_1;
|
|
}
|
|
else {
|
|
uVar2 = FUN_0004dd2e(param_2[3],0,0);
|
|
local_20 = local_60;
|
|
uVar3 = uVar2 + 1;
|
|
local_1c = local_20;
|
|
if (0x3ffffffe < uVar2) {
|
|
/* WARNING: Subroutine does not return */
|
|
__stl_throw_length_error("basic_string");
|
|
}
|
|
if (0x10 < uVar3) {
|
|
uVar4 = uVar3 * 4;
|
|
local_18 = uVar4;
|
|
if (uVar4 < 0x81) {
|
|
local_1c = (int *)__node_alloc::_M_allocate(&local_18);
|
|
uVar4 = local_18;
|
|
}
|
|
else {
|
|
local_1c = (int *)operator_new(uVar4);
|
|
}
|
|
local_60[0] = (int)local_1c + (uVar4 & 0xfffffffc);
|
|
}
|
|
piVar5 = local_1c + uVar2;
|
|
if (0 < (int)(uVar2 * 4)) {
|
|
uVar4 = uVar2 ^ 0xffffffff;
|
|
if ((int)(uVar2 ^ 0xffffffff) < -1) {
|
|
uVar4 = 0xfffffffe;
|
|
}
|
|
local_20 = local_1c;
|
|
__aeabi_memclr4(local_1c,(uVar2 + uVar4) * 4 + 8);
|
|
}
|
|
piVar1 = local_1c;
|
|
local_20 = piVar5;
|
|
*piVar5 = 0;
|
|
FUN_0004dd2e(param_2[3],piVar1,uVar3);
|
|
FUN_0004bac8(param_1,local_60);
|
|
if ((local_1c != local_60) && (local_1c != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_60[0] - (int)local_1c)) {
|
|
operator_delete(local_1c);
|
|
return;
|
|
}
|
|
__node_alloc::_M_deallocate(local_1c,local_60[0] - (int)local_1c);
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004bac8 @ 0004bac8
|
|
|
|
int * FUN_0004bac8(int *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
uint local_18;
|
|
|
|
param_1[0x10] = (int)param_1;
|
|
param_1[0x11] = (int)param_1;
|
|
iVar1 = *(int *)(param_2 + 0x40);
|
|
iVar4 = *(int *)(param_2 + 0x44);
|
|
iVar5 = iVar1 - iVar4;
|
|
uVar2 = (iVar5 >> 2) + 1;
|
|
if ((uint)(iVar5 >> 2) < 0x3fffffff) {
|
|
piVar3 = param_1;
|
|
if (0x10 < uVar2) {
|
|
uVar2 = uVar2 * 4;
|
|
local_18 = uVar2;
|
|
if (uVar2 < 0x81) {
|
|
piVar3 = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar2 = local_18;
|
|
}
|
|
else {
|
|
piVar3 = (int *)operator_new(uVar2);
|
|
}
|
|
param_1[0x10] = (int)piVar3;
|
|
param_1[0x11] = (int)piVar3;
|
|
*param_1 = (int)piVar3 + (uVar2 & 0xfffffffc);
|
|
}
|
|
if (iVar1 != iVar4) {
|
|
__aeabi_memcpy(piVar3,iVar4,iVar5);
|
|
piVar3 = (int *)((int)piVar3 + iVar5);
|
|
}
|
|
param_1[0x10] = (int)piVar3;
|
|
*piVar3 = 0;
|
|
return param_1;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
|
|
|
|
|
|
### FUNC codecvt_byname @ 0004bb78
|
|
|
|
/* std::codecvt_byname<char, char, mbstate_t>::codecvt_byname(char const*, unsigned int) */
|
|
|
|
codecvt_byname<char,char,mbstate_t> * __thiscall
|
|
std::codecvt_byname<char,char,mbstate_t>::codecvt_byname
|
|
(codecvt_byname<char,char,mbstate_t> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_2 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__codecvt_byname_000696a0;
|
|
if (param_1 != (char *)0x0) {
|
|
return this;
|
|
}
|
|
uVar1 = locale::_M_throw_on_null_name();
|
|
codecvt<char,char,mbstate_t>::~codecvt((codecvt<char,char,mbstate_t> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~codecvt_byname @ 0004bbc0
|
|
|
|
/* std::codecvt_byname<char, char, mbstate_t>::~codecvt_byname() */
|
|
|
|
void __thiscall
|
|
std::codecvt_byname<char,char,mbstate_t>::~codecvt_byname(codecvt_byname<char,char,mbstate_t> *this)
|
|
|
|
{
|
|
codecvt<char,char,mbstate_t>::~codecvt((codecvt<char,char,mbstate_t> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~codecvt_byname @ 0004bbca
|
|
|
|
/* std::codecvt_byname<char, char, mbstate_t>::~codecvt_byname() */
|
|
|
|
void __thiscall
|
|
std::codecvt_byname<char,char,mbstate_t>::~codecvt_byname(codecvt_byname<char,char,mbstate_t> *this)
|
|
|
|
{
|
|
codecvt<char,char,mbstate_t>::~codecvt((codecvt<char,char,mbstate_t> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC codecvt_byname @ 0004bbec
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::codecvt_byname(char const*, unsigned int) */
|
|
|
|
codecvt_byname<wchar_t,char,mbstate_t> * __thiscall
|
|
std::codecvt_byname<wchar_t,char,mbstate_t>::codecvt_byname
|
|
(codecvt_byname<wchar_t,char,mbstate_t> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_2 != 0);
|
|
local_14 = param_1;
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__codecvt_byname_000696cc;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a334(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0xc) = iVar1;
|
|
if (iVar1 != 0) {
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"ctype");
|
|
codecvt<wchar_t,char,mbstate_t>::~codecvt((codecvt<wchar_t,char,mbstate_t> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~codecvt_byname @ 0004bc60
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::~codecvt_byname() */
|
|
|
|
void __thiscall
|
|
std::codecvt_byname<wchar_t,char,mbstate_t>::~codecvt_byname
|
|
(codecvt_byname<wchar_t,char,mbstate_t> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__codecvt_byname_000696cc;
|
|
FUN_0004a590(*(undefined4 *)(this + 0xc));
|
|
codecvt<wchar_t,char,mbstate_t>::~codecvt((codecvt<wchar_t,char,mbstate_t> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~codecvt_byname @ 0004bc94
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::~codecvt_byname() */
|
|
|
|
void __thiscall
|
|
std::codecvt_byname<wchar_t,char,mbstate_t>::~codecvt_byname
|
|
(codecvt_byname<wchar_t,char,mbstate_t> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__codecvt_byname_000696cc;
|
|
FUN_0004a590(*(undefined4 *)(this + 0xc));
|
|
codecvt<wchar_t,char,mbstate_t>::~codecvt((codecvt<wchar_t,char,mbstate_t> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_out @ 0004bcd8
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::do_out(mbstate_t&, wchar_t const*, wchar_t const*,
|
|
wchar_t const*&, char*, char*, char*&) const */
|
|
|
|
undefined4 __thiscall
|
|
std::codecvt_byname<wchar_t,char,mbstate_t>::do_out
|
|
(codecvt_byname<wchar_t,char,mbstate_t> *this,mbstate_t *param_1,wchar_t *param_2,
|
|
wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7)
|
|
|
|
{
|
|
int iVar1;
|
|
wchar_t *pwVar2;
|
|
bool bVar3;
|
|
undefined4 local_2c;
|
|
|
|
local_2c = 0;
|
|
if ((param_5 != param_6) && (param_2 != param_3)) {
|
|
local_2c = 0;
|
|
pwVar2 = param_2;
|
|
while( true ) {
|
|
iVar1 = FUN_0004dbd8(*(undefined4 *)(this + 0xc),param_5,(int)param_6 - (int)param_5,*pwVar2,
|
|
param_1);
|
|
param_2 = pwVar2;
|
|
if (iVar1 == -2) {
|
|
local_2c = 1;
|
|
goto LAB_0004bd3e;
|
|
}
|
|
if (iVar1 == -1) break;
|
|
param_5 = param_5 + iVar1;
|
|
param_2 = pwVar2 + 1;
|
|
if ((param_5 == param_6) || (bVar3 = param_3 + -1 == pwVar2, pwVar2 = param_2, bVar3))
|
|
goto LAB_0004bd3e;
|
|
}
|
|
local_2c = 2;
|
|
}
|
|
LAB_0004bd3e:
|
|
*param_4 = param_2;
|
|
*param_7 = param_5;
|
|
return local_2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_in @ 0004bd48
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::do_in(mbstate_t&, char const*, char const*, char
|
|
const*&, wchar_t*, wchar_t*, wchar_t*&) const */
|
|
|
|
undefined4 __thiscall
|
|
std::codecvt_byname<wchar_t,char,mbstate_t>::do_in
|
|
(codecvt_byname<wchar_t,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,
|
|
char *param_3,char **param_4,wchar_t *param_5,wchar_t *param_6,wchar_t **param_7)
|
|
|
|
{
|
|
int iVar1;
|
|
wchar_t *pwVar2;
|
|
undefined4 local_2c;
|
|
|
|
local_2c = 0;
|
|
if ((param_5 != param_6) && (param_2 != param_3)) {
|
|
local_2c = 0;
|
|
pwVar2 = param_5;
|
|
while( true ) {
|
|
iVar1 = FUN_0004dbd0(*(undefined4 *)(this + 0xc),pwVar2,param_2,(int)param_3 - (int)param_2,
|
|
param_1);
|
|
param_5 = pwVar2;
|
|
if (iVar1 == -2) {
|
|
local_2c = 1;
|
|
goto LAB_0004bdb0;
|
|
}
|
|
if (iVar1 == -1) break;
|
|
param_2 = param_2 + iVar1;
|
|
param_5 = pwVar2 + 1;
|
|
if ((param_6 + -1 == pwVar2) || (pwVar2 = param_5, param_2 == param_3)) goto LAB_0004bdb0;
|
|
}
|
|
local_2c = 2;
|
|
}
|
|
LAB_0004bdb0:
|
|
*param_4 = param_2;
|
|
*param_7 = param_5;
|
|
return local_2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_unshift @ 0004bdbc
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::do_unshift(mbstate_t&, char*, char*, char*&) const
|
|
*/
|
|
|
|
undefined4 __thiscall
|
|
std::codecvt_byname<wchar_t,char,mbstate_t>::do_unshift
|
|
(codecvt_byname<wchar_t,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,
|
|
char *param_3,char **param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
*param_4 = param_2;
|
|
iVar1 = FUN_0004dbde(*(undefined4 *)(this + 0xc),param_1,param_2,(int)param_3 - (int)param_2,
|
|
param_4);
|
|
uVar2 = 2;
|
|
if (iVar1 != -1) {
|
|
if (iVar1 == -2) {
|
|
return 1;
|
|
}
|
|
uVar2 = 3;
|
|
if (*param_4 != param_2) {
|
|
uVar2 = 0;
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_encoding @ 0004bdf8
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::do_encoding() const */
|
|
|
|
int __thiscall
|
|
std::codecvt_byname<wchar_t,char,mbstate_t>::do_encoding
|
|
(codecvt_byname<wchar_t,char,mbstate_t> *this)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = FUN_0004dbcc(*(undefined4 *)(this + 0xc));
|
|
iVar2 = -1;
|
|
if (iVar1 != 0) {
|
|
iVar1 = FUN_0004dbc4(*(undefined4 *)(this + 0xc));
|
|
iVar2 = FUN_0004dbc8(*(undefined4 *)(this + 0xc));
|
|
if (iVar2 != iVar1) {
|
|
iVar2 = 0;
|
|
}
|
|
}
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_always_noconv @ 0004be32
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::do_always_noconv() const */
|
|
|
|
undefined4 std::codecvt_byname<wchar_t,char,mbstate_t>::do_always_noconv(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_length @ 0004be36
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::do_length(mbstate_t&, char const*, char const*,
|
|
unsigned int) const */
|
|
|
|
int __thiscall
|
|
std::codecvt_byname<wchar_t,char,mbstate_t>::do_length
|
|
(codecvt_byname<wchar_t,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,
|
|
char *param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
int local_1c;
|
|
undefined1 auStack_18 [4];
|
|
|
|
local_1c = 0;
|
|
while( true ) {
|
|
if (param_4 == 0) {
|
|
return local_1c;
|
|
}
|
|
if (param_2 == param_3) break;
|
|
uVar1 = FUN_0004dbd0(*(undefined4 *)(this + 0xc),auStack_18,param_2,(int)param_3 - (int)param_2,
|
|
param_1);
|
|
if (uVar1 < 0xfffffffe) {
|
|
local_1c = local_1c + uVar1;
|
|
}
|
|
param_2 = param_2 + uVar1;
|
|
param_4 = param_4 - 1;
|
|
if (0xfffffffd < uVar1) {
|
|
return local_1c;
|
|
}
|
|
}
|
|
return local_1c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_max_length @ 0004be86
|
|
|
|
/* std::codecvt_byname<wchar_t, char, mbstate_t>::do_max_length() const */
|
|
|
|
void __thiscall
|
|
std::codecvt_byname<wchar_t,char,mbstate_t>::do_max_length
|
|
(codecvt_byname<wchar_t,char,mbstate_t> *this)
|
|
|
|
{
|
|
FUN_0004dbc4(*(undefined4 *)(this + 0xc));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC numpunct_byname @ 0004be98
|
|
|
|
/* std::numpunct_byname<char>::numpunct_byname(char const*, unsigned int) */
|
|
|
|
numpunct_byname<char> * __thiscall
|
|
std::numpunct_byname<char>::numpunct_byname(numpunct_byname<char> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_2 != 0);
|
|
local_14 = param_1;
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__numpunct_byname_000696f8;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a37c(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0xc) = iVar1;
|
|
if (iVar1 != 0) {
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"numpunct");
|
|
numpunct<char>::~numpunct((numpunct<char> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~numpunct_byname @ 0004bf0c
|
|
|
|
/* std::numpunct_byname<char>::~numpunct_byname() */
|
|
|
|
void __thiscall std::numpunct_byname<char>::~numpunct_byname(numpunct_byname<char> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__numpunct_byname_000696f8;
|
|
FUN_0004a614(*(undefined4 *)(this + 0xc));
|
|
numpunct<char>::~numpunct((numpunct<char> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~numpunct_byname @ 0004bf40
|
|
|
|
/* std::numpunct_byname<char>::~numpunct_byname() */
|
|
|
|
void __thiscall std::numpunct_byname<char>::~numpunct_byname(numpunct_byname<char> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__numpunct_byname_000696f8;
|
|
FUN_0004a614(*(undefined4 *)(this + 0xc));
|
|
numpunct<char>::~numpunct((numpunct<char> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004bf84
|
|
|
|
/* std::numpunct_byname<char>::do_decimal_point() const */
|
|
|
|
void __thiscall std::numpunct_byname<char>::do_decimal_point(numpunct_byname<char> *this)
|
|
|
|
{
|
|
FUN_0004dd54(*(undefined4 *)(this + 0xc));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004bf90
|
|
|
|
/* std::numpunct_byname<char>::do_thousands_sep() const */
|
|
|
|
void __thiscall std::numpunct_byname<char>::do_thousands_sep(numpunct_byname<char> *this)
|
|
|
|
{
|
|
FUN_0004dd58(*(undefined4 *)(this + 0xc));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004bf9c
|
|
|
|
/* std::numpunct_byname<char>::do_grouping() const */
|
|
|
|
void std::numpunct_byname<char>::do_grouping(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dd5c(*(undefined4 *)(in_r1 + 0xc));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_truename @ 0004bfd4
|
|
|
|
/* std::numpunct_byname<char>::do_truename() const */
|
|
|
|
void std::numpunct_byname<char>::do_truename(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dd68(*(undefined4 *)(in_r1 + 0xc));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_falsename @ 0004bff4
|
|
|
|
/* std::numpunct_byname<char>::do_falsename() const */
|
|
|
|
void std::numpunct_byname<char>::do_falsename(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dd74(*(undefined4 *)(in_r1 + 0xc));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC numpunct_byname @ 0004c014
|
|
|
|
/* std::numpunct_byname<wchar_t>::numpunct_byname(char const*, unsigned int) */
|
|
|
|
numpunct_byname<wchar_t> * __thiscall
|
|
std::numpunct_byname<wchar_t>::numpunct_byname
|
|
(numpunct_byname<wchar_t> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_2 != 0);
|
|
local_14 = param_1;
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__numpunct_byname_0006971c;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a37c(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0xc) = iVar1;
|
|
if (iVar1 != 0) {
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"numpunct");
|
|
numpunct<wchar_t>::~numpunct((numpunct<wchar_t> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~numpunct_byname @ 0004c088
|
|
|
|
/* std::numpunct_byname<wchar_t>::~numpunct_byname() */
|
|
|
|
void __thiscall std::numpunct_byname<wchar_t>::~numpunct_byname(numpunct_byname<wchar_t> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__numpunct_byname_0006971c;
|
|
FUN_0004a614(*(undefined4 *)(this + 0xc));
|
|
numpunct<wchar_t>::~numpunct((numpunct<wchar_t> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~numpunct_byname @ 0004c0bc
|
|
|
|
/* std::numpunct_byname<wchar_t>::~numpunct_byname() */
|
|
|
|
void __thiscall std::numpunct_byname<wchar_t>::~numpunct_byname(numpunct_byname<wchar_t> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__numpunct_byname_0006971c;
|
|
FUN_0004a614(*(undefined4 *)(this + 0xc));
|
|
numpunct<wchar_t>::~numpunct((numpunct<wchar_t> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004c100
|
|
|
|
/* std::numpunct_byname<wchar_t>::do_decimal_point() const */
|
|
|
|
void __thiscall std::numpunct_byname<wchar_t>::do_decimal_point(numpunct_byname<wchar_t> *this)
|
|
|
|
{
|
|
FUN_0004dd80(*(undefined4 *)(this + 0xc));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004c10c
|
|
|
|
/* std::numpunct_byname<wchar_t>::do_thousands_sep() const */
|
|
|
|
void __thiscall std::numpunct_byname<wchar_t>::do_thousands_sep(numpunct_byname<wchar_t> *this)
|
|
|
|
{
|
|
FUN_0004dd84(*(undefined4 *)(this + 0xc));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004c118
|
|
|
|
/* std::numpunct_byname<wchar_t>::do_grouping() const */
|
|
|
|
void std::numpunct_byname<wchar_t>::do_grouping(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dd5c(*(undefined4 *)(in_r1 + 0xc));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_truename @ 0004c150
|
|
|
|
/* std::numpunct_byname<wchar_t>::do_truename() const */
|
|
|
|
void std::numpunct_byname<wchar_t>::do_truename(void)
|
|
|
|
{
|
|
int in_r1;
|
|
undefined1 auStack_50 [64];
|
|
|
|
FUN_0004dd88(*(undefined4 *)(in_r1 + 0xc),auStack_50,0x10);
|
|
FUN_0004c174();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004c174 @ 0004c174
|
|
|
|
int * FUN_0004c174(int *param_1,wchar_t *param_2)
|
|
|
|
{
|
|
size_t sVar1;
|
|
undefined4 *puVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint local_18;
|
|
|
|
param_1[0x10] = (int)param_1;
|
|
param_1[0x11] = (int)param_1;
|
|
sVar1 = wcslen(param_2);
|
|
uVar3 = (int)(sVar1 * 4) >> 2;
|
|
uVar4 = uVar3 + 1;
|
|
if (uVar3 < 0x3fffffff) {
|
|
if (uVar4 < 0x11) {
|
|
puVar2 = (undefined4 *)param_1[0x11];
|
|
}
|
|
else {
|
|
uVar4 = uVar4 * 4;
|
|
local_18 = uVar4;
|
|
if (uVar4 < 0x81) {
|
|
puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar4 = local_18;
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)operator_new(uVar4);
|
|
}
|
|
param_1[0x10] = (int)puVar2;
|
|
param_1[0x11] = (int)puVar2;
|
|
*param_1 = (int)puVar2 + (uVar4 & 0xfffffffc);
|
|
}
|
|
if (sVar1 != 0) {
|
|
__aeabi_memcpy(puVar2,param_2,sVar1 * 4);
|
|
puVar2 = puVar2 + sVar1;
|
|
}
|
|
param_1[0x10] = (int)puVar2;
|
|
*puVar2 = 0;
|
|
return param_1;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_falsename @ 0004c22c
|
|
|
|
/* std::numpunct_byname<wchar_t>::do_falsename() const */
|
|
|
|
void std::numpunct_byname<wchar_t>::do_falsename(void)
|
|
|
|
{
|
|
int in_r1;
|
|
undefined1 auStack_50 [64];
|
|
|
|
FUN_0004dda0(*(undefined4 *)(in_r1 + 0xc),auStack_50,0x10);
|
|
FUN_0004c174();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct_byname @ 0004c250
|
|
|
|
/* std::moneypunct_byname<char, true>::moneypunct_byname(char const*, unsigned int) */
|
|
|
|
moneypunct_byname<char,true> * __thiscall
|
|
std::moneypunct_byname<char,true>::moneypunct_byname
|
|
(moneypunct_byname<char,true> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
local_14 = param_1;
|
|
moneypunct<char,true>::moneypunct((moneypunct<char,true> *)this,param_2);
|
|
*(undefined ***)this = &PTR__moneypunct_byname_00069740;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0x14) = iVar1;
|
|
if (iVar1 != 0) {
|
|
FUN_0004c2c4(this + 0xc,this + 0x10);
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct");
|
|
moneypunct<char,true>::~moneypunct((moneypunct<char,true> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004c2c4 @ 0004c2c4
|
|
|
|
void FUN_0004c2c4(undefined1 *param_1,undefined1 *param_2,undefined4 param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
undefined1 uVar3;
|
|
undefined1 uVar4;
|
|
|
|
uVar1 = FUN_0004de10(param_3);
|
|
if (uVar1 < 2) {
|
|
param_1[1] = 3;
|
|
*param_1 = 2;
|
|
uVar4 = 0;
|
|
uVar3 = 4;
|
|
}
|
|
else if (uVar1 - 3 < 2) {
|
|
*param_1 = 2;
|
|
iVar2 = FUN_0004de08(param_3);
|
|
uVar3 = 3;
|
|
uVar4 = 4;
|
|
if (iVar2 != 0) {
|
|
uVar4 = 3;
|
|
}
|
|
param_1[1] = uVar4;
|
|
if (iVar2 != 0) {
|
|
uVar3 = 4;
|
|
}
|
|
uVar4 = 0;
|
|
}
|
|
else if (uVar1 == 2) {
|
|
param_1[1] = 4;
|
|
*param_1 = 2;
|
|
uVar4 = 0;
|
|
uVar3 = 3;
|
|
}
|
|
else {
|
|
param_1[1] = 3;
|
|
*param_1 = 2;
|
|
uVar4 = 4;
|
|
uVar3 = 0;
|
|
}
|
|
param_1[3] = uVar4;
|
|
param_1[2] = uVar3;
|
|
uVar1 = FUN_0004de1c(param_3);
|
|
if (uVar1 < 2) {
|
|
param_2[1] = 3;
|
|
*param_2 = 2;
|
|
uVar4 = 0;
|
|
uVar3 = 4;
|
|
}
|
|
else if (uVar1 - 3 < 2) {
|
|
*param_2 = 2;
|
|
iVar2 = FUN_0004de14(param_3);
|
|
uVar3 = 3;
|
|
uVar4 = 4;
|
|
if (iVar2 != 0) {
|
|
uVar4 = 3;
|
|
}
|
|
param_2[1] = uVar4;
|
|
if (iVar2 != 0) {
|
|
uVar3 = 4;
|
|
}
|
|
uVar4 = 0;
|
|
}
|
|
else if (uVar1 == 2) {
|
|
param_2[1] = 4;
|
|
*param_2 = 2;
|
|
uVar4 = 0;
|
|
uVar3 = 3;
|
|
}
|
|
else {
|
|
param_2[1] = 3;
|
|
*param_2 = 2;
|
|
uVar4 = 4;
|
|
uVar3 = 0;
|
|
}
|
|
param_2[3] = uVar4;
|
|
param_2[2] = uVar3;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct_byname @ 0004c39c
|
|
|
|
/* std::moneypunct_byname<char, true>::moneypunct_byname(_Locale_monetary*) */
|
|
|
|
moneypunct_byname<char,true> * __thiscall
|
|
std::moneypunct_byname<char,true>::moneypunct_byname
|
|
(moneypunct_byname<char,true> *this,_Locale_monetary *param_1)
|
|
|
|
{
|
|
moneypunct<char,true>::moneypunct((moneypunct<char,true> *)this,0);
|
|
*(_Locale_monetary **)(this + 0x14) = param_1;
|
|
*(undefined ***)this = &PTR__moneypunct_byname_00069740;
|
|
FUN_0004c2c4(this + 0xc,this + 0x10,param_1);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct_byname @ 0004c3e0
|
|
|
|
/* std::moneypunct_byname<char, true>::~moneypunct_byname() */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,true>::~moneypunct_byname(moneypunct_byname<char,true> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__moneypunct_byname_00069740;
|
|
FUN_0004a7a0(*(undefined4 *)(this + 0x14));
|
|
moneypunct<char,true>::~moneypunct((moneypunct<char,true> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct_byname @ 0004c414
|
|
|
|
/* std::moneypunct_byname<char, true>::~moneypunct_byname() */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,true>::~moneypunct_byname(moneypunct_byname<char,true> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__moneypunct_byname_00069740;
|
|
FUN_0004a7a0(*(undefined4 *)(this + 0x14));
|
|
moneypunct<char,true>::~moneypunct((moneypunct<char,true> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004c458
|
|
|
|
/* std::moneypunct_byname<char, true>::do_decimal_point() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,true>::do_decimal_point(moneypunct_byname<char,true> *this)
|
|
|
|
{
|
|
FUN_0004ddd4(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004c464
|
|
|
|
/* std::moneypunct_byname<char, true>::do_thousands_sep() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,true>::do_thousands_sep(moneypunct_byname<char,true> *this)
|
|
|
|
{
|
|
FUN_0004ddd8(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004c470
|
|
|
|
/* std::moneypunct_byname<char, true>::do_grouping() const */
|
|
|
|
void std::moneypunct_byname<char,true>::do_grouping(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_curr_symbol @ 0004c490
|
|
|
|
/* std::moneypunct_byname<char, true>::do_curr_symbol() const */
|
|
|
|
void std::moneypunct_byname<char,true>::do_curr_symbol(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004ddbc(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_positive_sign @ 0004c4b0
|
|
|
|
/* std::moneypunct_byname<char, true>::do_positive_sign() const */
|
|
|
|
void std::moneypunct_byname<char,true>::do_positive_sign(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dde8(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_negative_sign @ 0004c4d0
|
|
|
|
/* std::moneypunct_byname<char, true>::do_negative_sign() const */
|
|
|
|
void std::moneypunct_byname<char,true>::do_negative_sign(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004ddf4(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_frac_digits @ 0004c4f0
|
|
|
|
/* std::moneypunct_byname<char, true>::do_frac_digits() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,true>::do_frac_digits(moneypunct_byname<char,true> *this)
|
|
|
|
{
|
|
FUN_0004de00(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct_byname @ 0004c4fc
|
|
|
|
/* std::moneypunct_byname<char, false>::moneypunct_byname(char const*, unsigned int) */
|
|
|
|
moneypunct_byname<char,false> * __thiscall
|
|
std::moneypunct_byname<char,false>::moneypunct_byname
|
|
(moneypunct_byname<char,false> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
local_14 = param_1;
|
|
moneypunct<char,false>::moneypunct((moneypunct<char,false> *)this,param_2);
|
|
*(undefined ***)this = &PTR__moneypunct_byname_00069774;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0x14) = iVar1;
|
|
if (iVar1 != 0) {
|
|
FUN_0004c570(this + 0xc,this + 0x10);
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct");
|
|
moneypunct<char,false>::~moneypunct((moneypunct<char,false> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004c570 @ 0004c570
|
|
|
|
void FUN_0004c570(undefined1 *param_1,undefined1 *param_2,undefined4 param_3)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
|
|
uVar2 = FUN_0004de10(param_3);
|
|
switch(uVar2) {
|
|
case 0:
|
|
case 1:
|
|
*param_1 = 3;
|
|
iVar3 = FUN_0004de08(param_3);
|
|
if (iVar3 != 0) {
|
|
param_1[1] = 2;
|
|
LAB_0004c5e6:
|
|
iVar3 = FUN_0004de0c(param_3);
|
|
if (iVar3 != 0) {
|
|
uVar1 = 1;
|
|
goto LAB_0004c5f2;
|
|
}
|
|
goto LAB_0004c60a;
|
|
}
|
|
param_1[1] = 4;
|
|
iVar3 = FUN_0004de0c(param_3);
|
|
if (iVar3 == 0) goto LAB_0004c646;
|
|
param_1[2] = 1;
|
|
uVar1 = 2;
|
|
break;
|
|
case 2:
|
|
iVar3 = FUN_0004de08(param_3);
|
|
if (iVar3 == 0) {
|
|
LAB_0004c624:
|
|
*param_1 = 4;
|
|
iVar3 = FUN_0004de0c(param_3);
|
|
if (iVar3 != 0) {
|
|
uVar1 = 2;
|
|
goto LAB_0004c634;
|
|
}
|
|
param_1[2] = 3;
|
|
uVar1 = 2;
|
|
}
|
|
else {
|
|
*param_1 = 2;
|
|
iVar3 = FUN_0004de0c(param_3);
|
|
if (iVar3 != 0) {
|
|
uVar1 = 4;
|
|
LAB_0004c634:
|
|
param_1[2] = uVar1;
|
|
param_1[1] = 1;
|
|
uVar1 = 3;
|
|
break;
|
|
}
|
|
param_1[2] = 3;
|
|
uVar1 = 4;
|
|
}
|
|
param_1[1] = uVar1;
|
|
goto LAB_0004c64a;
|
|
case 3:
|
|
iVar3 = FUN_0004de08(param_3);
|
|
if (iVar3 != 0) {
|
|
param_1[1] = 2;
|
|
*param_1 = 3;
|
|
goto LAB_0004c5e6;
|
|
}
|
|
param_1[1] = 3;
|
|
*param_1 = 4;
|
|
LAB_0004c646:
|
|
uVar1 = 2;
|
|
goto LAB_0004c648;
|
|
case 4:
|
|
iVar3 = FUN_0004de08(param_3);
|
|
if (iVar3 == 0) goto LAB_0004c624;
|
|
param_1[1] = 3;
|
|
*param_1 = 2;
|
|
LAB_0004c60a:
|
|
uVar1 = 4;
|
|
LAB_0004c648:
|
|
param_1[2] = uVar1;
|
|
LAB_0004c64a:
|
|
uVar1 = 0;
|
|
break;
|
|
default:
|
|
param_1[1] = 3;
|
|
*param_1 = 2;
|
|
uVar1 = 0;
|
|
LAB_0004c5f2:
|
|
param_1[2] = uVar1;
|
|
uVar1 = 4;
|
|
}
|
|
param_1[3] = uVar1;
|
|
uVar2 = FUN_0004de1c(param_3);
|
|
switch(uVar2) {
|
|
case 0:
|
|
case 1:
|
|
*param_2 = 3;
|
|
iVar3 = FUN_0004de14(param_3);
|
|
if (iVar3 == 0) {
|
|
param_2[1] = 4;
|
|
iVar3 = FUN_0004de18(param_3);
|
|
if (iVar3 != 0) {
|
|
param_2[2] = 1;
|
|
uVar1 = 2;
|
|
goto LAB_0004c736;
|
|
}
|
|
goto LAB_0004c70c;
|
|
}
|
|
param_2[1] = 2;
|
|
LAB_0004c6a8:
|
|
iVar3 = FUN_0004de18(param_3);
|
|
if (iVar3 == 0) {
|
|
uVar1 = 4;
|
|
goto LAB_0004c70e;
|
|
}
|
|
uVar1 = 1;
|
|
goto LAB_0004c6ca;
|
|
case 2:
|
|
iVar3 = FUN_0004de14(param_3);
|
|
if (iVar3 == 0) {
|
|
LAB_0004c6e6:
|
|
*param_2 = 4;
|
|
iVar3 = FUN_0004de18(param_3);
|
|
if (iVar3 == 0) {
|
|
param_2[2] = 3;
|
|
uVar1 = 2;
|
|
goto LAB_0004c732;
|
|
}
|
|
uVar1 = 2;
|
|
LAB_0004c6f6:
|
|
param_2[2] = uVar1;
|
|
param_2[1] = 1;
|
|
uVar1 = 3;
|
|
goto LAB_0004c736;
|
|
}
|
|
*param_2 = 2;
|
|
iVar3 = FUN_0004de18(param_3);
|
|
if (iVar3 != 0) {
|
|
uVar1 = 4;
|
|
goto LAB_0004c6f6;
|
|
}
|
|
param_2[2] = 3;
|
|
uVar1 = 4;
|
|
LAB_0004c732:
|
|
param_2[1] = uVar1;
|
|
break;
|
|
case 3:
|
|
iVar3 = FUN_0004de14(param_3);
|
|
if (iVar3 != 0) {
|
|
param_2[1] = 2;
|
|
*param_2 = 3;
|
|
goto LAB_0004c6a8;
|
|
}
|
|
param_2[1] = 3;
|
|
*param_2 = 4;
|
|
LAB_0004c70c:
|
|
uVar1 = 2;
|
|
LAB_0004c70e:
|
|
param_2[2] = uVar1;
|
|
break;
|
|
case 4:
|
|
iVar3 = FUN_0004de14(param_3);
|
|
if (iVar3 == 0) goto LAB_0004c6e6;
|
|
default:
|
|
param_2[1] = 3;
|
|
*param_2 = 2;
|
|
uVar1 = 0;
|
|
LAB_0004c6ca:
|
|
param_2[2] = uVar1;
|
|
uVar1 = 4;
|
|
goto LAB_0004c736;
|
|
}
|
|
uVar1 = 0;
|
|
LAB_0004c736:
|
|
param_2[3] = uVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct_byname @ 0004c73c
|
|
|
|
/* std::moneypunct_byname<char, false>::moneypunct_byname(_Locale_monetary*) */
|
|
|
|
moneypunct_byname<char,false> * __thiscall
|
|
std::moneypunct_byname<char,false>::moneypunct_byname
|
|
(moneypunct_byname<char,false> *this,_Locale_monetary *param_1)
|
|
|
|
{
|
|
moneypunct<char,false>::moneypunct((moneypunct<char,false> *)this,0);
|
|
*(_Locale_monetary **)(this + 0x14) = param_1;
|
|
*(undefined ***)this = &PTR__moneypunct_byname_00069774;
|
|
FUN_0004c570(this + 0xc,this + 0x10,param_1);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct_byname @ 0004c780
|
|
|
|
/* std::moneypunct_byname<char, false>::~moneypunct_byname() */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,false>::~moneypunct_byname(moneypunct_byname<char,false> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__moneypunct_byname_00069774;
|
|
FUN_0004a7a0(*(undefined4 *)(this + 0x14));
|
|
moneypunct<char,false>::~moneypunct((moneypunct<char,false> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct_byname @ 0004c7b4
|
|
|
|
/* std::moneypunct_byname<char, false>::~moneypunct_byname() */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,false>::~moneypunct_byname(moneypunct_byname<char,false> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__moneypunct_byname_00069774;
|
|
FUN_0004a7a0(*(undefined4 *)(this + 0x14));
|
|
moneypunct<char,false>::~moneypunct((moneypunct<char,false> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004c7f8
|
|
|
|
/* std::moneypunct_byname<char, false>::do_decimal_point() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,false>::do_decimal_point(moneypunct_byname<char,false> *this)
|
|
|
|
{
|
|
FUN_0004ddd4(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004c804
|
|
|
|
/* std::moneypunct_byname<char, false>::do_thousands_sep() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,false>::do_thousands_sep(moneypunct_byname<char,false> *this)
|
|
|
|
{
|
|
FUN_0004ddd8(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004c810
|
|
|
|
/* std::moneypunct_byname<char, false>::do_grouping() const */
|
|
|
|
void std::moneypunct_byname<char,false>::do_grouping(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_curr_symbol @ 0004c830
|
|
|
|
/* std::moneypunct_byname<char, false>::do_curr_symbol() const */
|
|
|
|
void std::moneypunct_byname<char,false>::do_curr_symbol(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004ddc8(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_positive_sign @ 0004c850
|
|
|
|
/* std::moneypunct_byname<char, false>::do_positive_sign() const */
|
|
|
|
void std::moneypunct_byname<char,false>::do_positive_sign(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dde8(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_negative_sign @ 0004c870
|
|
|
|
/* std::moneypunct_byname<char, false>::do_negative_sign() const */
|
|
|
|
void std::moneypunct_byname<char,false>::do_negative_sign(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004ddf4(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_frac_digits @ 0004c890
|
|
|
|
/* std::moneypunct_byname<char, false>::do_frac_digits() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<char,false>::do_frac_digits(moneypunct_byname<char,false> *this)
|
|
|
|
{
|
|
FUN_0004de04(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct_byname @ 0004c89c
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::moneypunct_byname(char const*, unsigned int) */
|
|
|
|
moneypunct_byname<wchar_t,true> * __thiscall
|
|
std::moneypunct_byname<wchar_t,true>::moneypunct_byname
|
|
(moneypunct_byname<wchar_t,true> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
local_14 = param_1;
|
|
moneypunct<wchar_t,true>::moneypunct((moneypunct<wchar_t,true> *)this,param_2);
|
|
*(undefined ***)this = &PTR__moneypunct_byname_000697a8;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0x14) = iVar1;
|
|
if (iVar1 != 0) {
|
|
FUN_0004c2c4(this + 0xc,this + 0x10);
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct");
|
|
moneypunct<wchar_t,true>::~moneypunct((moneypunct<wchar_t,true> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct_byname @ 0004c910
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::moneypunct_byname(_Locale_monetary*) */
|
|
|
|
moneypunct_byname<wchar_t,true> * __thiscall
|
|
std::moneypunct_byname<wchar_t,true>::moneypunct_byname
|
|
(moneypunct_byname<wchar_t,true> *this,_Locale_monetary *param_1)
|
|
|
|
{
|
|
moneypunct<wchar_t,true>::moneypunct((moneypunct<wchar_t,true> *)this,0);
|
|
*(_Locale_monetary **)(this + 0x14) = param_1;
|
|
*(undefined ***)this = &PTR__moneypunct_byname_000697a8;
|
|
FUN_0004c2c4(this + 0xc,this + 0x10,param_1);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct_byname @ 0004c954
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::~moneypunct_byname() */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,true>::~moneypunct_byname(moneypunct_byname<wchar_t,true> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__moneypunct_byname_000697a8;
|
|
FUN_0004a7a0(*(undefined4 *)(this + 0x14));
|
|
moneypunct<wchar_t,true>::~moneypunct((moneypunct<wchar_t,true> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct_byname @ 0004c988
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::~moneypunct_byname() */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,true>::~moneypunct_byname(moneypunct_byname<wchar_t,true> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__moneypunct_byname_000697a8;
|
|
FUN_0004a7a0(*(undefined4 *)(this + 0x14));
|
|
moneypunct<wchar_t,true>::~moneypunct((moneypunct<wchar_t,true> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004c9cc
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::do_decimal_point() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,true>::do_decimal_point(moneypunct_byname<wchar_t,true> *this)
|
|
|
|
{
|
|
FUN_0004ddd4(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004c9d8
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::do_thousands_sep() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,true>::do_thousands_sep(moneypunct_byname<wchar_t,true> *this)
|
|
|
|
{
|
|
FUN_0004ddd8(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004c9e4
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::do_grouping() const */
|
|
|
|
void std::moneypunct_byname<wchar_t,true>::do_grouping(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_curr_symbol @ 0004ca04
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::do_curr_symbol() const */
|
|
|
|
void std::moneypunct_byname<wchar_t,true>::do_curr_symbol(void)
|
|
|
|
{
|
|
int in_r1;
|
|
undefined1 auStack_50 [64];
|
|
|
|
FUN_0004de20(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10);
|
|
FUN_0004c174();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_positive_sign @ 0004ca28
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::do_positive_sign() const */
|
|
|
|
void std::moneypunct_byname<wchar_t,true>::do_positive_sign(void)
|
|
|
|
{
|
|
int in_r1;
|
|
undefined1 auStack_50 [64];
|
|
|
|
FUN_0004de38(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10);
|
|
FUN_0004c174();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_negative_sign @ 0004ca4c
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::do_negative_sign() const */
|
|
|
|
void std::moneypunct_byname<wchar_t,true>::do_negative_sign(void)
|
|
|
|
{
|
|
int in_r1;
|
|
undefined1 auStack_50 [64];
|
|
|
|
FUN_0004de40(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10);
|
|
FUN_0004c174();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_frac_digits @ 0004ca70
|
|
|
|
/* std::moneypunct_byname<wchar_t, true>::do_frac_digits() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,true>::do_frac_digits(moneypunct_byname<wchar_t,true> *this)
|
|
|
|
{
|
|
FUN_0004de00(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct_byname @ 0004ca7c
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::moneypunct_byname(char const*, unsigned int) */
|
|
|
|
moneypunct_byname<wchar_t,false> * __thiscall
|
|
std::moneypunct_byname<wchar_t,false>::moneypunct_byname
|
|
(moneypunct_byname<wchar_t,false> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
local_14 = param_1;
|
|
moneypunct<wchar_t,false>::moneypunct((moneypunct<wchar_t,false> *)this,param_2);
|
|
*(undefined ***)this = &PTR__moneypunct_byname_000697dc;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a46c(&local_14,auStack_118,0,&local_18);
|
|
*(int *)(this + 0x14) = iVar1;
|
|
if (iVar1 != 0) {
|
|
FUN_0004c570(this + 0xc,this + 0x10);
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"moneypunct");
|
|
moneypunct<wchar_t,false>::~moneypunct((moneypunct<wchar_t,false> *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct_byname @ 0004caf0
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::moneypunct_byname(_Locale_monetary*) */
|
|
|
|
moneypunct_byname<wchar_t,false> * __thiscall
|
|
std::moneypunct_byname<wchar_t,false>::moneypunct_byname
|
|
(moneypunct_byname<wchar_t,false> *this,_Locale_monetary *param_1)
|
|
|
|
{
|
|
moneypunct<wchar_t,false>::moneypunct((moneypunct<wchar_t,false> *)this,0);
|
|
*(_Locale_monetary **)(this + 0x14) = param_1;
|
|
*(undefined ***)this = &PTR__moneypunct_byname_000697dc;
|
|
FUN_0004c570(this + 0xc,this + 0x10,param_1);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct_byname @ 0004cb34
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::~moneypunct_byname() */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,false>::~moneypunct_byname(moneypunct_byname<wchar_t,false> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__moneypunct_byname_000697dc;
|
|
FUN_0004a7a0(*(undefined4 *)(this + 0x14));
|
|
moneypunct<wchar_t,false>::~moneypunct((moneypunct<wchar_t,false> *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct_byname @ 0004cb68
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::~moneypunct_byname() */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,false>::~moneypunct_byname(moneypunct_byname<wchar_t,false> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__moneypunct_byname_000697dc;
|
|
FUN_0004a7a0(*(undefined4 *)(this + 0x14));
|
|
moneypunct<wchar_t,false>::~moneypunct((moneypunct<wchar_t,false> *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004cbac
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::do_decimal_point() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,false>::do_decimal_point(moneypunct_byname<wchar_t,false> *this)
|
|
|
|
{
|
|
FUN_0004ddd4(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004cbb8
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::do_thousands_sep() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,false>::do_thousands_sep(moneypunct_byname<wchar_t,false> *this)
|
|
|
|
{
|
|
FUN_0004ddd8(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004cbc4
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::do_grouping() const */
|
|
|
|
void std::moneypunct_byname<wchar_t,false>::do_grouping(void)
|
|
|
|
{
|
|
int in_r1;
|
|
|
|
FUN_0004dddc(*(undefined4 *)(in_r1 + 0x14));
|
|
FUN_00031c38();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_curr_symbol @ 0004cbe4
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::do_curr_symbol() const */
|
|
|
|
void std::moneypunct_byname<wchar_t,false>::do_curr_symbol(void)
|
|
|
|
{
|
|
int in_r1;
|
|
undefined1 auStack_50 [64];
|
|
|
|
FUN_0004de28(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10);
|
|
FUN_0004c174();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_positive_sign @ 0004cc08
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::do_positive_sign() const */
|
|
|
|
void std::moneypunct_byname<wchar_t,false>::do_positive_sign(void)
|
|
|
|
{
|
|
int in_r1;
|
|
undefined1 auStack_50 [64];
|
|
|
|
FUN_0004de38(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10);
|
|
FUN_0004c174();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_negative_sign @ 0004cc2c
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::do_negative_sign() const */
|
|
|
|
void std::moneypunct_byname<wchar_t,false>::do_negative_sign(void)
|
|
|
|
{
|
|
int in_r1;
|
|
undefined1 auStack_50 [64];
|
|
|
|
FUN_0004de40(*(undefined4 *)(in_r1 + 0x14),auStack_50,0x10);
|
|
FUN_0004c174();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_frac_digits @ 0004cc50
|
|
|
|
/* std::moneypunct_byname<wchar_t, false>::do_frac_digits() const */
|
|
|
|
void __thiscall
|
|
std::moneypunct_byname<wchar_t,false>::do_frac_digits(moneypunct_byname<wchar_t,false> *this)
|
|
|
|
{
|
|
FUN_0004de04(*(undefined4 *)(this + 0x14));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004cc5c @ 0004cc5c
|
|
|
|
undefined4 * FUN_0004cc5c(undefined4 *param_1,undefined4 *param_2,undefined2 *param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = (int)param_2 - (int)param_1 >> 4;
|
|
if (0 < iVar1) {
|
|
iVar1 = iVar1 + 1;
|
|
do {
|
|
iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3);
|
|
if (iVar2 != 0) {
|
|
return param_1;
|
|
}
|
|
iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),param_1[1],*param_3);
|
|
if (iVar2 != 0) {
|
|
return param_1 + 1;
|
|
}
|
|
iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),param_1[2],*param_3);
|
|
if (iVar2 != 0) {
|
|
return param_1 + 2;
|
|
}
|
|
iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),param_1[3],*param_3);
|
|
if (iVar2 != 0) {
|
|
return param_1 + 3;
|
|
}
|
|
iVar1 = iVar1 + -1;
|
|
param_1 = param_1 + 4;
|
|
} while (1 < iVar1);
|
|
}
|
|
iVar1 = (int)param_2 - (int)param_1 >> 2;
|
|
if (iVar1 != 1) {
|
|
if (iVar1 == 3) {
|
|
iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3);
|
|
if (iVar1 != 0) {
|
|
return param_1;
|
|
}
|
|
param_1 = param_1 + 1;
|
|
}
|
|
else if (iVar1 != 2) {
|
|
return param_2;
|
|
}
|
|
iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3);
|
|
if (iVar1 != 0) {
|
|
return param_1;
|
|
}
|
|
param_1 = param_1 + 1;
|
|
}
|
|
iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 2),*param_1,*param_3);
|
|
if (iVar1 == 0) {
|
|
return param_2;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004cd16 @ 0004cd16
|
|
|
|
undefined4 * FUN_0004cd16(undefined4 *param_1,undefined4 *param_2,int param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = (int)param_2 - (int)param_1 >> 4;
|
|
if (0 < iVar1) {
|
|
iVar1 = iVar1 + 1;
|
|
do {
|
|
iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4));
|
|
if (iVar2 == 0) {
|
|
return param_1;
|
|
}
|
|
iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),param_1[1],*(undefined2 *)(param_3 + 4));
|
|
if (iVar2 == 0) {
|
|
return param_1 + 1;
|
|
}
|
|
iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),param_1[2],*(undefined2 *)(param_3 + 4));
|
|
if (iVar2 == 0) {
|
|
return param_1 + 2;
|
|
}
|
|
iVar2 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),param_1[3],*(undefined2 *)(param_3 + 4));
|
|
if (iVar2 == 0) {
|
|
return param_1 + 3;
|
|
}
|
|
iVar1 = iVar1 + -1;
|
|
param_1 = param_1 + 4;
|
|
} while (1 < iVar1);
|
|
}
|
|
iVar1 = (int)param_2 - (int)param_1 >> 2;
|
|
if (iVar1 != 1) {
|
|
if (iVar1 == 3) {
|
|
iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4));
|
|
if (iVar1 == 0) {
|
|
return param_1;
|
|
}
|
|
param_1 = param_1 + 1;
|
|
}
|
|
else if (iVar1 != 2) {
|
|
return param_2;
|
|
}
|
|
iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4));
|
|
if (iVar1 == 0) {
|
|
return param_1;
|
|
}
|
|
param_1 = param_1 + 1;
|
|
}
|
|
iVar1 = FUN_0004dad4(*(undefined4 *)(param_3 + 8),*param_1,*(undefined2 *)(param_3 + 4));
|
|
if (iVar1 != 0) {
|
|
return param_2;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004cde4 @ 0004cde4
|
|
|
|
pthread_mutex_t * FUN_0004cde4(pthread_mutex_t *param_1)
|
|
|
|
{
|
|
pthread_mutex_destroy(param_1);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC allocate @ 0004cdf4
|
|
|
|
/* std::__malloc_alloc::allocate(unsigned int) */
|
|
|
|
void std::__malloc_alloc::allocate(uint param_1)
|
|
|
|
{
|
|
code *pcVar1;
|
|
void *pvVar2;
|
|
undefined4 uVar3;
|
|
|
|
pvVar2 = malloc(param_1);
|
|
while( true ) {
|
|
if (pvVar2 != (void *)0x0) {
|
|
return;
|
|
}
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070de0);
|
|
pcVar1 = DAT_00070de4;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070de0);
|
|
if (pcVar1 == (code *)0x0) break;
|
|
(*pcVar1)();
|
|
pvVar2 = malloc(param_1);
|
|
}
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC set_malloc_handler @ 0004ce58
|
|
|
|
/* std::__malloc_alloc::set_malloc_handler(void (*)()) */
|
|
|
|
undefined4 std::__malloc_alloc::set_malloc_handler(_func_void *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070de0);
|
|
uVar1 = DAT_00070de4;
|
|
DAT_00070de4 = param_1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070de0);
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ce88 @ 0004ce88
|
|
|
|
undefined4 * FUN_0004ce88(uint *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
undefined4 *puVar5;
|
|
int local_18;
|
|
|
|
uVar4 = *param_1 + 7 & 0xfffffff8;
|
|
*param_1 = uVar4;
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e50);
|
|
iVar1 = (uVar4 - 1 >> 3) * 4;
|
|
puVar5 = *(undefined4 **)(&DAT_00070de8 + iVar1);
|
|
if (puVar5 == (undefined4 *)0x0) {
|
|
uVar4 = *param_1;
|
|
local_18 = 0x14;
|
|
puVar5 = (undefined4 *)FUN_0004cfe0(uVar4,&local_18);
|
|
if (local_18 != 1) {
|
|
puVar2 = (undefined4 *)((int)puVar5 + uVar4);
|
|
*(undefined4 **)(&DAT_00070de8 + (uVar4 - 1 >> 1 & 0x7ffffffc)) = puVar2;
|
|
iVar1 = local_18 + -2;
|
|
if (local_18 + -2 != 0) {
|
|
iVar3 = 2 - local_18;
|
|
iVar1 = local_18 + -1;
|
|
puVar2 = puVar5;
|
|
do {
|
|
*(uint *)((int)puVar2 + uVar4) = (int)puVar2 + uVar4 * 2;
|
|
puVar2 = (undefined4 *)((int)puVar2 + uVar4);
|
|
iVar3 = iVar3 + 1;
|
|
} while (iVar3 != 0);
|
|
local_18 = 0;
|
|
puVar2 = (undefined4 *)((int)puVar5 + uVar4 * iVar1);
|
|
iVar1 = local_18;
|
|
}
|
|
local_18 = iVar1;
|
|
*puVar2 = 0;
|
|
}
|
|
}
|
|
else {
|
|
*(undefined4 *)(&DAT_00070de8 + iVar1) = *puVar5;
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e50);
|
|
return puVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004cf48 @ 0004cf48
|
|
|
|
void FUN_0004cf48(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
int iVar3;
|
|
int local_18;
|
|
|
|
local_18 = 0x14;
|
|
iVar1 = FUN_0004cfe0(param_1,&local_18);
|
|
if (local_18 != 1) {
|
|
puVar2 = (undefined4 *)(iVar1 + param_1);
|
|
*(undefined4 **)(&DAT_00070de8 + (param_1 - 1U >> 1 & 0x7ffffffc)) = puVar2;
|
|
if (local_18 != 2) {
|
|
iVar3 = 2 - local_18;
|
|
puVar2 = (undefined4 *)(iVar1 + param_1 * (local_18 + -1));
|
|
do {
|
|
*(int *)(iVar1 + param_1) = iVar1 + param_1 * 2;
|
|
iVar1 = iVar1 + param_1;
|
|
iVar3 = iVar3 + 1;
|
|
} while (iVar3 != 0);
|
|
}
|
|
*puVar2 = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004cfa4 @ 0004cfa4
|
|
|
|
void FUN_0004cfa4(undefined4 *param_1,int param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e50);
|
|
uVar1 = param_2 - 1U >> 1 & 0x7ffffffc;
|
|
*param_1 = *(undefined4 *)(&DAT_00070de8 + uVar1);
|
|
*(undefined4 **)(&DAT_00070de8 + uVar1) = param_1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e50);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004cfe0 @ 0004cfe0
|
|
|
|
undefined4 * FUN_0004cfe0(uint param_1,int *param_2)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
|
|
do {
|
|
puVar1 = DAT_00070e2c;
|
|
uVar2 = DAT_00070e28 - (int)DAT_00070e2c;
|
|
uVar4 = param_1 * *param_2;
|
|
if (uVar2 != 0) {
|
|
if (uVar4 <= uVar2) goto LAB_0004d0ca;
|
|
if (param_1 <= uVar2) {
|
|
iVar3 = __udivsi3(uVar2,param_1);
|
|
*param_2 = iVar3;
|
|
uVar4 = iVar3 * param_1;
|
|
LAB_0004d0ca:
|
|
DAT_00070e2c = (undefined4 *)((int)puVar1 + uVar4);
|
|
return puVar1;
|
|
}
|
|
uVar2 = uVar2 - 1 >> 1 & 0x7ffffffc;
|
|
*DAT_00070e2c = *(undefined4 *)(&DAT_00070de8 + uVar2);
|
|
*(undefined4 **)(&DAT_00070de8 + uVar2) = DAT_00070e2c;
|
|
DAT_00070e2c = (undefined4 *)0x0;
|
|
DAT_00070e28 = 0;
|
|
}
|
|
uVar4 = (DAT_00070e30 + 7U & 0xfffffff8) + uVar4 * 2;
|
|
DAT_00070e2c = (undefined4 *)operator_new(uVar4);
|
|
DAT_00070e28 = (int)DAT_00070e2c + uVar4;
|
|
DAT_00070e30 = DAT_00070e30 + (uVar4 >> 4);
|
|
} while( true );
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_allocate @ 0004d150
|
|
|
|
/* std::__node_alloc::_M_allocate(unsigned int&) */
|
|
|
|
void std::__node_alloc::_M_allocate(uint *param_1)
|
|
|
|
{
|
|
FUN_0004ce88();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_deallocate @ 0004d15c
|
|
|
|
/* std::__node_alloc::_M_deallocate(void*, unsigned int) */
|
|
|
|
void std::__node_alloc::_M_deallocate(void *param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e50);
|
|
uVar1 = param_2 - 1 >> 1 & 0x7ffffffc;
|
|
*(undefined4 *)param_1 = *(undefined4 *)(&DAT_00070de8 + uVar1);
|
|
*(void **)(&DAT_00070de8 + uVar1) = param_1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e50);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d198 @ 0004d198
|
|
|
|
void FUN_0004d198(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
int local_18;
|
|
|
|
local_18 = 0x80;
|
|
iVar1 = FUN_0004d1f0(param_2,&local_18,param_1);
|
|
if (local_18 != 1) {
|
|
puVar2 = (undefined4 *)(iVar1 + param_2);
|
|
*(undefined4 **)(param_1 + (param_2 + 7U >> 1 & 0x7ffffffc) + -4) = puVar2;
|
|
if (local_18 != 2) {
|
|
puVar2 = (undefined4 *)(iVar1 + param_2 * (local_18 + -1));
|
|
local_18 = local_18 + -2;
|
|
do {
|
|
*(int *)(iVar1 + param_2) = iVar1 + param_2 * 2;
|
|
iVar1 = iVar1 + param_2;
|
|
local_18 = local_18 + -1;
|
|
} while (local_18 != 0);
|
|
}
|
|
*puVar2 = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d1f0 @ 0004d1f0
|
|
|
|
undefined4 * FUN_0004d1f0(uint param_1,int *param_2,int param_3)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c);
|
|
uVar2 = DAT_00070e40 - (int)DAT_00070e44;
|
|
iVar3 = *param_2;
|
|
do {
|
|
puVar1 = DAT_00070e44;
|
|
uVar4 = param_1 * iVar3;
|
|
if (uVar4 <= uVar2) {
|
|
LAB_0004d2a8:
|
|
DAT_00070e44 = (undefined4 *)((int)puVar1 + uVar4);
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c);
|
|
return puVar1;
|
|
}
|
|
if (param_1 <= uVar2) {
|
|
iVar3 = __udivsi3(uVar2,param_1);
|
|
*param_2 = iVar3;
|
|
uVar4 = iVar3 * param_1;
|
|
goto LAB_0004d2a8;
|
|
}
|
|
uVar4 = (DAT_00070e48 + 7U & 0xfffffff8) + uVar4 * 2;
|
|
if (uVar2 != 0) {
|
|
iVar3 = param_3 + (uVar2 + 7 >> 1 & 0x7ffffffc);
|
|
*DAT_00070e44 = *(undefined4 *)(iVar3 + -4);
|
|
*(undefined4 **)(iVar3 + -4) = DAT_00070e44;
|
|
}
|
|
DAT_00070e44 = (undefined4 *)std::__malloc_alloc::allocate(uVar4);
|
|
DAT_00070e40 = (int)DAT_00070e44 + uVar4;
|
|
DAT_00070e48 = DAT_00070e48 + (uVar4 >> 4);
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c);
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c);
|
|
uVar2 = DAT_00070e40 - (int)DAT_00070e44;
|
|
iVar3 = *param_2;
|
|
} while( true );
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d308 @ 0004d308
|
|
|
|
void FUN_0004d308(int param_1)
|
|
|
|
{
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c);
|
|
*(int *)(param_1 + 0x40) = DAT_00070e34;
|
|
DAT_00070e34 = param_1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d334 @ 0004d334
|
|
|
|
void * FUN_0004d334(void)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
pvVar1 = DAT_00070e34;
|
|
if (DAT_00070e34 != (void *)0x0) {
|
|
DAT_00070e34 = (void *)*(undefined4 *)((int)DAT_00070e34 + 0x40);
|
|
return pvVar1;
|
|
}
|
|
pvVar1 = operator_new(0x48);
|
|
*(undefined4 *)((int)pvVar1 + 0x40) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)((int)pvVar1 + 0x44),(pthread_mutexattr_t *)0x0);
|
|
__aeabi_memclr(pvVar1,0x40);
|
|
return pvVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d384 @ 0004d384
|
|
|
|
void * FUN_0004d384(void)
|
|
|
|
{
|
|
void *pvVar1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
|
|
if ((DAT_00070e38 != '\0') && (pvVar1 = pthread_getspecific(DAT_00070e3c), pvVar1 != (void *)0x0))
|
|
{
|
|
return pvVar1;
|
|
}
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_00070e4c);
|
|
if (DAT_00070e38 == '\0') {
|
|
iVar2 = pthread_key_create(&DAT_00070e3c,(__destr_function *)0x4d309);
|
|
if (iVar2 != 0) {
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
DAT_00070e38 = '\x01';
|
|
}
|
|
if (DAT_00070e34 == (void *)0x0) {
|
|
pvVar1 = operator_new(0x48);
|
|
*(undefined4 *)((int)pvVar1 + 0x40) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)((int)pvVar1 + 0x44),(pthread_mutexattr_t *)0x0);
|
|
__aeabi_memclr(pvVar1,0x40);
|
|
}
|
|
else {
|
|
pvVar1 = DAT_00070e34;
|
|
DAT_00070e34 = *(void **)((int)DAT_00070e34 + 0x40);
|
|
}
|
|
iVar2 = pthread_setspecific(DAT_00070e3c,pvVar1);
|
|
if (iVar2 == 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_00070e4c);
|
|
return pvVar1;
|
|
}
|
|
if (iVar2 == 0xc) {
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
abort();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d4b8 @ 0004d4b8
|
|
|
|
void FUN_0004d4b8(uint *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
undefined4 *puVar4;
|
|
int iVar5;
|
|
int local_18;
|
|
|
|
uVar1 = *param_1;
|
|
if (0x80 < uVar1) {
|
|
std::__malloc_alloc::allocate(uVar1);
|
|
return;
|
|
}
|
|
*param_1 = uVar1 + 7 & 0xfffffff8;
|
|
iVar2 = FUN_0004d384();
|
|
uVar1 = *param_1;
|
|
iVar5 = ((uVar1 + 7 >> 3) - 1) * 4;
|
|
if (*(undefined4 **)(iVar2 + iVar5) != (undefined4 *)0x0) {
|
|
*(undefined4 *)(iVar2 + iVar5) = **(undefined4 **)(iVar2 + iVar5);
|
|
return;
|
|
}
|
|
local_18 = 0x80;
|
|
iVar3 = FUN_0004d1f0(uVar1,&local_18,iVar2);
|
|
if (local_18 == 1) {
|
|
return;
|
|
}
|
|
puVar4 = (undefined4 *)(iVar3 + uVar1);
|
|
*(undefined4 **)(iVar2 + iVar5) = puVar4;
|
|
if (local_18 != 2) {
|
|
iVar5 = local_18 + -2;
|
|
iVar2 = iVar3;
|
|
do {
|
|
*(uint *)(iVar2 + uVar1) = iVar2 + uVar1 * 2;
|
|
iVar2 = iVar2 + uVar1;
|
|
iVar5 = iVar5 + -1;
|
|
} while (iVar5 != 0);
|
|
puVar4 = (undefined4 *)(iVar3 + uVar1 * (local_18 + -1));
|
|
}
|
|
*puVar4 = 0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d534 @ 0004d534
|
|
|
|
void FUN_0004d534(undefined4 *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (0x80 < param_2) {
|
|
free(param_1);
|
|
return;
|
|
}
|
|
iVar1 = FUN_0004d384();
|
|
iVar1 = iVar1 + (param_2 + 7 >> 1 & 0x7ffffffc);
|
|
*param_1 = *(undefined4 *)(iVar1 + -4);
|
|
*(undefined4 **)(iVar1 + -4) = param_1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d564 @ 0004d564
|
|
|
|
undefined4 * FUN_0004d564(uint *param_1,int param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 *puVar2;
|
|
undefined4 *puVar3;
|
|
int iVar4;
|
|
int local_18;
|
|
|
|
uVar1 = *param_1;
|
|
if (uVar1 < 0x81) {
|
|
*param_1 = uVar1 + 7 & 0xfffffff8;
|
|
pthread_mutex_lock((pthread_mutex_t *)(param_2 + 0x44));
|
|
uVar1 = *param_1;
|
|
iVar4 = ((uVar1 + 7 >> 3) - 1) * 4;
|
|
puVar2 = *(undefined4 **)(param_2 + iVar4);
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
local_18 = 0x80;
|
|
puVar2 = (undefined4 *)FUN_0004d1f0(uVar1,&local_18,param_2);
|
|
if (local_18 != 1) {
|
|
puVar3 = (undefined4 *)((int)puVar2 + uVar1);
|
|
*(undefined4 **)(param_2 + iVar4) = puVar3;
|
|
if (local_18 != 2) {
|
|
iVar4 = local_18 + -2;
|
|
puVar3 = puVar2;
|
|
do {
|
|
*(uint *)((int)puVar3 + uVar1) = (int)puVar3 + uVar1 * 2;
|
|
puVar3 = (undefined4 *)((int)puVar3 + uVar1);
|
|
iVar4 = iVar4 + -1;
|
|
} while (iVar4 != 0);
|
|
puVar3 = (undefined4 *)((int)puVar2 + uVar1 * (local_18 + -1));
|
|
}
|
|
*puVar3 = 0;
|
|
}
|
|
}
|
|
else {
|
|
*(undefined4 *)(param_2 + iVar4) = *puVar2;
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)(param_2 + 0x44));
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)std::__malloc_alloc::allocate(uVar1);
|
|
}
|
|
return puVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC allocate @ 0004d6c4
|
|
|
|
/* std::priv::_Pthread_alloc::allocate(unsigned int&) */
|
|
|
|
void std::priv::_Pthread_alloc::allocate(uint *param_1)
|
|
|
|
{
|
|
FUN_0004d4b8();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC deallocate @ 0004d6d0
|
|
|
|
/* std::priv::_Pthread_alloc::deallocate(void*, unsigned int) */
|
|
|
|
void std::priv::_Pthread_alloc::deallocate(void *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (0x80 < param_2) {
|
|
free(param_1);
|
|
return;
|
|
}
|
|
iVar1 = FUN_0004d384();
|
|
iVar1 = iVar1 + (param_2 + 7 >> 1 & 0x7ffffffc);
|
|
*(undefined4 *)param_1 = *(undefined4 *)(iVar1 + -4);
|
|
*(void **)(iVar1 + -4) = param_1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC allocate @ 0004d700
|
|
|
|
/* std::priv::_Pthread_alloc::allocate(unsigned int&, std::priv::_Pthread_alloc_per_thread_state*)
|
|
*/
|
|
|
|
void std::priv::_Pthread_alloc::allocate(uint *param_1,_Pthread_alloc_per_thread_state *param_2)
|
|
|
|
{
|
|
FUN_0004d564();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC deallocate @ 0004d70c
|
|
|
|
/* std::priv::_Pthread_alloc::deallocate(void*, unsigned int,
|
|
std::priv::_Pthread_alloc_per_thread_state*) */
|
|
|
|
void std::priv::_Pthread_alloc::deallocate
|
|
(void *param_1,uint param_2,_Pthread_alloc_per_thread_state *param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
if (0x80 < param_2) {
|
|
free(param_1);
|
|
return;
|
|
}
|
|
pthread_mutex_lock((pthread_mutex_t *)(param_3 + 0x44));
|
|
uVar1 = param_2 + 7 >> 1 & 0x7ffffffc;
|
|
*(undefined4 *)param_1 = *(undefined4 *)(param_3 + (uVar1 - 4));
|
|
*(void **)(param_3 + (uVar1 - 4)) = param_1;
|
|
pthread_mutex_unlock((pthread_mutex_t *)(param_3 + 0x44));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC reallocate @ 0004d754
|
|
|
|
/* std::priv::_Pthread_alloc::reallocate(void*, unsigned int, unsigned int&) */
|
|
|
|
void * std::priv::_Pthread_alloc::reallocate(void *param_1,uint param_2,uint *param_3)
|
|
|
|
{
|
|
void *pvVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
|
|
uVar3 = *param_3;
|
|
if ((param_2 < 0x81) || (uVar3 < 0x81)) {
|
|
if (7 < (uVar3 + 7 ^ param_2 + 7)) {
|
|
pvVar1 = (void *)FUN_0004d4b8(param_3);
|
|
uVar3 = param_2;
|
|
if (*param_3 <= param_2) {
|
|
uVar3 = *param_3;
|
|
}
|
|
__aeabi_memcpy(pvVar1,param_1,uVar3);
|
|
if (param_2 < 0x81) {
|
|
iVar2 = FUN_0004d384();
|
|
iVar2 = iVar2 + (param_2 + 7 >> 1 & 0x7ffffffc);
|
|
*(undefined4 *)param_1 = *(undefined4 *)(iVar2 + -4);
|
|
*(void **)(iVar2 + -4) = param_1;
|
|
param_1 = pvVar1;
|
|
}
|
|
else {
|
|
free(param_1);
|
|
param_1 = pvVar1;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
param_1 = realloc(param_1,uVar3);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _S_get_per_thread_state @ 0004d7d0
|
|
|
|
/* std::priv::_Pthread_alloc::_S_get_per_thread_state() */
|
|
|
|
void std::priv::_Pthread_alloc::_S_get_per_thread_state(void)
|
|
|
|
{
|
|
FUN_0004d384();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d7dc @ 0004d7dc
|
|
|
|
void FUN_0004d7dc(void)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
ushort *puVar3;
|
|
bool bVar4;
|
|
|
|
puVar3 = &DAT_00070e54;
|
|
iVar2 = 0;
|
|
do {
|
|
iVar1 = isalpha(iVar2);
|
|
if (iVar1 != 0) {
|
|
*puVar3 = *puVar3 | 0x20;
|
|
}
|
|
iVar1 = iscntrl(iVar2);
|
|
if (iVar1 != 0) {
|
|
*puVar3 = *puVar3 | 4;
|
|
}
|
|
if (iVar2 - 0x30U < 10) {
|
|
*puVar3 = *puVar3 | 0x40;
|
|
}
|
|
iVar1 = isprint(iVar2);
|
|
if (iVar1 != 0) {
|
|
*puVar3 = *puVar3 | 2;
|
|
}
|
|
iVar1 = ispunct(iVar2);
|
|
if (iVar1 != 0) {
|
|
*puVar3 = *puVar3 | 0x80;
|
|
}
|
|
iVar1 = isspace(iVar2);
|
|
if (iVar1 != 0) {
|
|
*puVar3 = *puVar3 | 1;
|
|
}
|
|
iVar1 = isxdigit(iVar2);
|
|
if (iVar1 != 0) {
|
|
*puVar3 = *puVar3 | 0x100;
|
|
}
|
|
iVar1 = isupper(iVar2);
|
|
if (iVar1 != 0) {
|
|
*puVar3 = *puVar3 | 8;
|
|
}
|
|
iVar1 = islower(iVar2);
|
|
if (iVar1 != 0) {
|
|
*puVar3 = *puVar3 | 0x10;
|
|
}
|
|
puVar3 = puVar3 + 1;
|
|
bVar4 = iVar2 != 0x7f;
|
|
iVar2 = iVar2 + 1;
|
|
} while (bVar4);
|
|
__aeabi_memclr4(&DAT_00070f54);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d8ac @ 0004d8ac
|
|
|
|
void FUN_0004d8ac(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d8c4 @ 0004d8c4
|
|
|
|
undefined4 FUN_0004d8c4(char *param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) {
|
|
*param_3 = 3;
|
|
uVar1 = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d8da @ 0004d8da
|
|
|
|
undefined4 FUN_0004d8da(char *param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) {
|
|
*param_3 = 3;
|
|
uVar1 = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d8f0 @ 0004d8f0
|
|
|
|
undefined4 FUN_0004d8f0(char *param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) {
|
|
*param_3 = 3;
|
|
uVar1 = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d906 @ 0004d906
|
|
|
|
undefined4 FUN_0004d906(char *param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) {
|
|
*param_3 = 3;
|
|
uVar1 = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d91c @ 0004d91c
|
|
|
|
undefined4 FUN_0004d91c(char *param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) {
|
|
*param_3 = 3;
|
|
uVar1 = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d932 @ 0004d932
|
|
|
|
undefined4 FUN_0004d932(char *param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) {
|
|
*param_3 = 3;
|
|
uVar1 = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d948 @ 0004d948
|
|
|
|
undefined4 FUN_0004d948(char *param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if ((*param_1 != 'C') || (uVar1 = 1, param_1[1] != '\0')) {
|
|
*param_3 = 3;
|
|
uVar1 = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d960 @ 0004d960
|
|
|
|
undefined * FUN_0004d960(void)
|
|
|
|
{
|
|
return &DAT_0004d964;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d968 @ 0004d968
|
|
|
|
undefined * FUN_0004d968(void)
|
|
|
|
{
|
|
return &DAT_0004d96c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d970 @ 0004d970
|
|
|
|
undefined * FUN_0004d970(void)
|
|
|
|
{
|
|
return &DAT_0004d974;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d978 @ 0004d978
|
|
|
|
undefined * FUN_0004d978(void)
|
|
|
|
{
|
|
return &DAT_0004d97c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d980 @ 0004d980
|
|
|
|
undefined * FUN_0004d980(void)
|
|
|
|
{
|
|
return &DAT_0004d984;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d988 @ 0004d988
|
|
|
|
undefined * FUN_0004d988(void)
|
|
|
|
{
|
|
return &DAT_0004d98c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d990 @ 0004d990
|
|
|
|
undefined * FUN_0004d990(void)
|
|
|
|
{
|
|
return &DAT_0004d994;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d998 @ 0004d998
|
|
|
|
undefined * FUN_0004d998(void)
|
|
|
|
{
|
|
return &DAT_0004d99c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9a0 @ 0004d9a0
|
|
|
|
undefined * FUN_0004d9a0(void)
|
|
|
|
{
|
|
return &DAT_0004d9a4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9a8 @ 0004d9a8
|
|
|
|
undefined * FUN_0004d9a8(void)
|
|
|
|
{
|
|
return &DAT_0004d9ac;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9b0 @ 0004d9b0
|
|
|
|
undefined * FUN_0004d9b0(void)
|
|
|
|
{
|
|
return &DAT_0004d9b4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9b8 @ 0004d9b8
|
|
|
|
undefined * FUN_0004d9b8(void)
|
|
|
|
{
|
|
return &DAT_0004d9bc;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9c0 @ 0004d9c0
|
|
|
|
undefined * FUN_0004d9c0(void)
|
|
|
|
{
|
|
return &DAT_0004d9c4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9c8 @ 0004d9c8
|
|
|
|
void FUN_0004d9c8(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9ca @ 0004d9ca
|
|
|
|
void FUN_0004d9ca(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9cc @ 0004d9cc
|
|
|
|
void FUN_0004d9cc(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9ce @ 0004d9ce
|
|
|
|
void FUN_0004d9ce(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9d0 @ 0004d9d0
|
|
|
|
void FUN_0004d9d0(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9d2 @ 0004d9d2
|
|
|
|
void FUN_0004d9d2(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9d4 @ 0004d9d4
|
|
|
|
void FUN_0004d9d4(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9d8 @ 0004d9d8
|
|
|
|
undefined * FUN_0004d9d8(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)
|
|
|
|
{
|
|
undefined *puVar1;
|
|
|
|
puVar1 = &DAT_0004d9f4;
|
|
if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) {
|
|
*param_4 = 3;
|
|
puVar1 = (undefined *)0x0;
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004d9f8 @ 0004d9f8
|
|
|
|
undefined * FUN_0004d9f8(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)
|
|
|
|
{
|
|
undefined *puVar1;
|
|
|
|
puVar1 = &DAT_0004da14;
|
|
if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) {
|
|
*param_4 = 3;
|
|
puVar1 = (undefined *)0x0;
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004da18 @ 0004da18
|
|
|
|
undefined * FUN_0004da18(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)
|
|
|
|
{
|
|
undefined *puVar1;
|
|
|
|
puVar1 = &DAT_0004da34;
|
|
if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) {
|
|
*param_4 = 3;
|
|
puVar1 = (undefined *)0x0;
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004da38 @ 0004da38
|
|
|
|
undefined * FUN_0004da38(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)
|
|
|
|
{
|
|
undefined *puVar1;
|
|
|
|
puVar1 = &DAT_0004da54;
|
|
if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) {
|
|
*param_4 = 3;
|
|
puVar1 = (undefined *)0x0;
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004da58 @ 0004da58
|
|
|
|
undefined * FUN_0004da58(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)
|
|
|
|
{
|
|
undefined *puVar1;
|
|
|
|
puVar1 = &DAT_0004da74;
|
|
if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) {
|
|
*param_4 = 3;
|
|
puVar1 = (undefined *)0x0;
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004da78 @ 0004da78
|
|
|
|
undefined * FUN_0004da78(char *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4)
|
|
|
|
{
|
|
undefined *puVar1;
|
|
|
|
puVar1 = &DAT_0004da94;
|
|
if ((*param_1 != '\0') && ((*param_1 != 'C' || (param_1[1] != '\0')))) {
|
|
*param_4 = 3;
|
|
puVar1 = (undefined *)0x0;
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004da98 @ 0004da98
|
|
|
|
undefined4 FUN_0004da98(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004da9c @ 0004da9c
|
|
|
|
undefined4 FUN_0004da9c(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004daa0 @ 0004daa0
|
|
|
|
undefined4 FUN_0004daa0(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004daa4 @ 0004daa4
|
|
|
|
undefined4 FUN_0004daa4(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004daa8 @ 0004daa8
|
|
|
|
undefined4 FUN_0004daa8(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dab0 @ 0004dab0
|
|
|
|
undefined2 * FUN_0004dab0(void)
|
|
|
|
{
|
|
return &DAT_00070e54;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dabc @ 0004dabc
|
|
|
|
void FUN_0004dabc(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
toupper(param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dac8 @ 0004dac8
|
|
|
|
void FUN_0004dac8(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
tolower(param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dad4 @ 0004dad4
|
|
|
|
uint FUN_0004dad4(undefined4 param_1,wint_t param_2,uint param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
uVar2 = 0;
|
|
if (((param_3 & 0x20) != 0) && (iVar1 = iswalpha(param_2), uVar2 = 0x20, iVar1 == 0)) {
|
|
uVar2 = 0;
|
|
}
|
|
if ((int)(param_3 << 0x1d) < 0) {
|
|
iVar1 = iswcntrl(param_2);
|
|
if (iVar1 != 0) {
|
|
uVar2 = uVar2 | 4;
|
|
}
|
|
}
|
|
if ((int)(param_3 << 0x19) < 0) {
|
|
iVar1 = iswdigit(param_2);
|
|
if (iVar1 != 0) {
|
|
uVar2 = uVar2 | 0x40;
|
|
}
|
|
}
|
|
if ((int)(param_3 << 0x1e) < 0) {
|
|
iVar1 = iswprint(param_2);
|
|
if (iVar1 != 0) {
|
|
uVar2 = uVar2 | 2;
|
|
}
|
|
}
|
|
if ((int)(param_3 << 0x18) < 0) {
|
|
iVar1 = iswpunct(param_2);
|
|
if (iVar1 != 0) {
|
|
uVar2 = uVar2 | 0x80;
|
|
}
|
|
}
|
|
if ((param_3 & 1) != 0) {
|
|
iVar1 = iswspace(param_2);
|
|
uVar2 = uVar2 | iVar1 != 0;
|
|
}
|
|
if ((int)(param_3 << 0x17) < 0) {
|
|
iVar1 = iswxdigit(param_2);
|
|
if (iVar1 != 0) {
|
|
uVar2 = uVar2 | 0x100;
|
|
}
|
|
}
|
|
if ((int)(param_3 << 0x1c) < 0) {
|
|
iVar1 = iswupper(param_2);
|
|
if (iVar1 != 0) {
|
|
uVar2 = uVar2 | 8;
|
|
}
|
|
}
|
|
if (-1 < (int)(param_3 << 0x1b)) {
|
|
return uVar2;
|
|
}
|
|
iVar1 = iswlower(param_2);
|
|
if (iVar1 != 0) {
|
|
uVar2 = uVar2 | 0x10;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dbac @ 0004dbac
|
|
|
|
void FUN_0004dbac(undefined4 param_1,wint_t param_2)
|
|
|
|
{
|
|
towlower(param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dbb8 @ 0004dbb8
|
|
|
|
void FUN_0004dbb8(undefined4 param_1,wint_t param_2)
|
|
|
|
{
|
|
towupper(param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dbc4 @ 0004dbc4
|
|
|
|
undefined4 FUN_0004dbc4(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dbc8 @ 0004dbc8
|
|
|
|
undefined4 FUN_0004dbc8(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dbcc @ 0004dbcc
|
|
|
|
undefined4 FUN_0004dbcc(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dbd0 @ 0004dbd0
|
|
|
|
undefined4 FUN_0004dbd0(undefined4 param_1,uint *param_2,byte *param_3)
|
|
|
|
{
|
|
*param_2 = (uint)*param_3;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dbd8 @ 0004dbd8
|
|
|
|
undefined4
|
|
FUN_0004dbd8(undefined4 param_1,undefined1 *param_2,undefined4 param_3,undefined1 param_4)
|
|
|
|
{
|
|
*param_2 = param_4;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dbde @ 0004dbde
|
|
|
|
undefined4
|
|
FUN_0004dbde(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
undefined4 *param_5)
|
|
|
|
{
|
|
*param_5 = param_3;
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dbe6 @ 0004dbe6
|
|
|
|
uint FUN_0004dbe6(undefined4 param_1,char *param_2,uint param_3,char *param_4,uint param_5)
|
|
|
|
{
|
|
int iVar1;
|
|
uint __n;
|
|
uint __n_00;
|
|
uint local_98;
|
|
char acStack_94 [64];
|
|
char acStack_54 [64];
|
|
|
|
local_98 = param_5;
|
|
if (param_5 != 0 || param_3 != 0) {
|
|
do {
|
|
__n = param_3;
|
|
if (0x3e < param_3) {
|
|
__n = 0x3f;
|
|
}
|
|
strncpy(acStack_54,param_2,__n);
|
|
acStack_54[__n] = '\0';
|
|
__n_00 = local_98;
|
|
if (0x3e < local_98) {
|
|
__n_00 = 0x3f;
|
|
}
|
|
strncpy(acStack_94,param_4,__n_00);
|
|
acStack_94[__n_00] = '\0';
|
|
iVar1 = strcmp(acStack_54,acStack_94);
|
|
if (iVar1 != 0) {
|
|
return iVar1 >> 0x1f | 1;
|
|
}
|
|
param_3 = param_3 - __n;
|
|
local_98 = local_98 - __n_00;
|
|
param_4 = param_4 + __n_00;
|
|
param_2 = param_2 + __n;
|
|
} while (local_98 != 0 || param_3 != 0);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dc70 @ 0004dc70
|
|
|
|
uint FUN_0004dc70(undefined4 param_1,wchar_t *param_2,uint param_3,wchar_t *param_4,uint param_5)
|
|
|
|
{
|
|
int iVar1;
|
|
uint __n;
|
|
uint __n_00;
|
|
uint local_218;
|
|
wchar_t awStack_214 [64];
|
|
wchar_t awStack_114 [64];
|
|
|
|
local_218 = param_5;
|
|
if (param_5 != 0 || param_3 != 0) {
|
|
do {
|
|
__n = param_3;
|
|
if (0x3e < param_3) {
|
|
__n = 0x3f;
|
|
}
|
|
wcsncpy(awStack_114,param_2,__n);
|
|
awStack_114[__n] = L'\0';
|
|
__n_00 = local_218;
|
|
if (0x3e < local_218) {
|
|
__n_00 = 0x3f;
|
|
}
|
|
wcsncpy(awStack_214,param_4,__n_00);
|
|
awStack_214[__n_00] = L'\0';
|
|
iVar1 = wcscmp(awStack_114,awStack_214);
|
|
if (iVar1 != 0) {
|
|
return iVar1 >> 0x1f | 1;
|
|
}
|
|
param_3 = param_3 - __n;
|
|
local_218 = local_218 - __n_00;
|
|
param_4 = param_4 + __n_00;
|
|
param_2 = param_2 + __n;
|
|
} while (local_218 != 0 || param_3 != 0);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd0a @ 0004dd0a
|
|
|
|
undefined4
|
|
FUN_0004dd0a(undefined4 param_1,char *param_2,int param_3,char *param_4,undefined4 param_5)
|
|
|
|
{
|
|
if (param_2 != (char *)0x0) {
|
|
strncpy(param_2,param_4,param_3 - 1U);
|
|
param_2[param_3 - 1U] = '\0';
|
|
}
|
|
return param_5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd2e @ 0004dd2e
|
|
|
|
undefined4
|
|
FUN_0004dd2e(undefined4 param_1,wchar_t *param_2,int param_3,wchar_t *param_4,undefined4 param_5)
|
|
|
|
{
|
|
if (param_2 != (wchar_t *)0x0) {
|
|
wcsncpy(param_2,param_4,param_3 - 1U);
|
|
param_2[param_3 - 1U] = L'\0';
|
|
}
|
|
return param_5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd54 @ 0004dd54
|
|
|
|
undefined4 FUN_0004dd54(void)
|
|
|
|
{
|
|
return 0x2e;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd58 @ 0004dd58
|
|
|
|
undefined4 FUN_0004dd58(void)
|
|
|
|
{
|
|
return 0x2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd5c @ 0004dd5c
|
|
|
|
undefined * FUN_0004dd5c(void)
|
|
|
|
{
|
|
return &DAT_0006478a;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd68 @ 0004dd68
|
|
|
|
undefined * FUN_0004dd68(void)
|
|
|
|
{
|
|
return &DAT_0004dd6c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd74 @ 0004dd74
|
|
|
|
char * FUN_0004dd74(void)
|
|
|
|
{
|
|
return "false";
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd80 @ 0004dd80
|
|
|
|
undefined4 FUN_0004dd80(void)
|
|
|
|
{
|
|
return 0x2e;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd84 @ 0004dd84
|
|
|
|
undefined4 FUN_0004dd84(void)
|
|
|
|
{
|
|
return 0x2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dd88 @ 0004dd88
|
|
|
|
undefined * FUN_0004dd88(void)
|
|
|
|
{
|
|
return &DAT_0004dd8c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dda0 @ 0004dda0
|
|
|
|
wchar_t * FUN_0004dda0(void)
|
|
|
|
{
|
|
return L"false";
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ddbc @ 0004ddbc
|
|
|
|
undefined * FUN_0004ddbc(void)
|
|
|
|
{
|
|
return &DAT_0006478a;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ddc8 @ 0004ddc8
|
|
|
|
undefined * FUN_0004ddc8(void)
|
|
|
|
{
|
|
return &DAT_0006478a;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ddd4 @ 0004ddd4
|
|
|
|
undefined4 FUN_0004ddd4(void)
|
|
|
|
{
|
|
return 0x2e;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ddd8 @ 0004ddd8
|
|
|
|
undefined4 FUN_0004ddd8(void)
|
|
|
|
{
|
|
return 0x2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dddc @ 0004dddc
|
|
|
|
undefined * FUN_0004dddc(void)
|
|
|
|
{
|
|
return &DAT_0006478a;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dde8 @ 0004dde8
|
|
|
|
undefined * FUN_0004dde8(void)
|
|
|
|
{
|
|
return &DAT_0006478a;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ddf4 @ 0004ddf4
|
|
|
|
undefined * FUN_0004ddf4(void)
|
|
|
|
{
|
|
return &DAT_0006478a;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de00 @ 0004de00
|
|
|
|
undefined4 FUN_0004de00(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de04 @ 0004de04
|
|
|
|
undefined4 FUN_0004de04(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de08 @ 0004de08
|
|
|
|
undefined4 FUN_0004de08(void)
|
|
|
|
{
|
|
return 0xff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de0c @ 0004de0c
|
|
|
|
undefined4 FUN_0004de0c(void)
|
|
|
|
{
|
|
return 0xff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de10 @ 0004de10
|
|
|
|
undefined4 FUN_0004de10(void)
|
|
|
|
{
|
|
return 0xff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de14 @ 0004de14
|
|
|
|
undefined4 FUN_0004de14(void)
|
|
|
|
{
|
|
return 0xff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de18 @ 0004de18
|
|
|
|
undefined4 FUN_0004de18(void)
|
|
|
|
{
|
|
return 0xff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de1c @ 0004de1c
|
|
|
|
undefined4 FUN_0004de1c(void)
|
|
|
|
{
|
|
return 0xff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de20 @ 0004de20
|
|
|
|
undefined * FUN_0004de20(void)
|
|
|
|
{
|
|
return &DAT_0004de24;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de28 @ 0004de28
|
|
|
|
undefined * FUN_0004de28(void)
|
|
|
|
{
|
|
return &DAT_0004de2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de38 @ 0004de38
|
|
|
|
undefined * FUN_0004de38(void)
|
|
|
|
{
|
|
return &DAT_0004de3c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de40 @ 0004de40
|
|
|
|
undefined * FUN_0004de40(void)
|
|
|
|
{
|
|
return &DAT_0004de44;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de48 @ 0004de48
|
|
|
|
undefined * FUN_0004de48(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
return (&PTR_s_January_00069898)[param_2];
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de58 @ 0004de58
|
|
|
|
undefined * FUN_0004de58(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
return (&PTR_DAT_000698c8)[param_2];
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de68 @ 0004de68
|
|
|
|
undefined * FUN_0004de68(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
return (&PTR_s_Sunday_000698f8)[param_2];
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de78 @ 0004de78
|
|
|
|
undefined * FUN_0004de78(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
return (&PTR_DAT_00069914)[param_2];
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de88 @ 0004de88
|
|
|
|
char * FUN_0004de88(void)
|
|
|
|
{
|
|
return "%m/%d/%y";
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004de94 @ 0004de94
|
|
|
|
char * FUN_0004de94(void)
|
|
|
|
{
|
|
return "%m/%d/%y";
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dea0 @ 0004dea0
|
|
|
|
char * FUN_0004dea0(void)
|
|
|
|
{
|
|
return "%H:%M:%S";
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004deb0 @ 0004deb0
|
|
|
|
undefined * FUN_0004deb0(void)
|
|
|
|
{
|
|
return &DAT_0006478a;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004debc @ 0004debc
|
|
|
|
undefined * FUN_0004debc(void)
|
|
|
|
{
|
|
return &DAT_0006478a;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dec8 @ 0004dec8
|
|
|
|
undefined * FUN_0004dec8(void)
|
|
|
|
{
|
|
return &DAT_0004decc;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ded0 @ 0004ded0
|
|
|
|
undefined * FUN_0004ded0(void)
|
|
|
|
{
|
|
return &DAT_0004ded4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ded8 @ 0004ded8
|
|
|
|
undefined * FUN_0004ded8(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
return (&PTR_u_January_00069930)[param_2];
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004dee8 @ 0004dee8
|
|
|
|
undefined * FUN_0004dee8(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
return (&PTR_DAT_00069960)[param_2];
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004def8 @ 0004def8
|
|
|
|
undefined * FUN_0004def8(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
return (&PTR_u_Sunday_00069990)[param_2];
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004df08 @ 0004df08
|
|
|
|
undefined * FUN_0004df08(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
return (&PTR_DAT_000699ac)[param_2];
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004df18 @ 0004df18
|
|
|
|
undefined * FUN_0004df18(void)
|
|
|
|
{
|
|
return &DAT_0004df1c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004df28 @ 0004df28
|
|
|
|
undefined * FUN_0004df28(void)
|
|
|
|
{
|
|
return &DAT_0004df2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004df38 @ 0004df38
|
|
|
|
undefined4 FUN_0004df38(void)
|
|
|
|
{
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004df3e @ 0004df3e
|
|
|
|
void FUN_0004df3e(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004df40 @ 0004df40
|
|
|
|
undefined4 FUN_0004df40(void)
|
|
|
|
{
|
|
undefined4 in_stack_00000000;
|
|
|
|
return in_stack_00000000;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __cxa_end_cleanup @ 0004df44
|
|
|
|
void __cxa_end_cleanup(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = FUN_0004e004();
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar1,param_2,param_3,param_4);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __cxa_type_match @ 0004df54
|
|
|
|
undefined4 __cxa_type_match(int param_1,int *param_2,undefined4 param_3,undefined4 *param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
undefined4 uVar4;
|
|
undefined4 *local_18;
|
|
|
|
iVar3 = *(int *)(param_1 + -0x34);
|
|
uVar4 = 0;
|
|
if (iVar3 != 0) {
|
|
local_18 = (undefined4 *)(param_1 + 0x58);
|
|
iVar1 = FUN_00030ba0(iVar3,&DAT_00068e30,&PTR_PTR_FUN_00031728_1_00068dc4,0);
|
|
uVar2 = 1;
|
|
if (iVar1 != 0) {
|
|
local_18 = *(undefined4 **)(param_1 + 0x58);
|
|
uVar2 = 2;
|
|
}
|
|
uVar4 = 0;
|
|
if (param_2 != (int *)0x0) {
|
|
iVar3 = (**(code **)(*param_2 + 8))(param_2,iVar3,&local_18);
|
|
if (iVar3 == 1) {
|
|
*param_4 = local_18;
|
|
uVar4 = uVar2;
|
|
}
|
|
}
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __cxa_begin_cleanup @ 0004dfc4
|
|
|
|
undefined4 __cxa_begin_cleanup(int *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = FUN_000306d8();
|
|
if (*param_1 == 0x432b2b00 && param_1[1] == 0x474e5543) {
|
|
iVar2 = param_1[-6];
|
|
param_1[-6] = iVar2 + 1;
|
|
if (iVar2 != 0) {
|
|
return 1;
|
|
}
|
|
param_1[-7] = *(int *)(iVar1 + 8);
|
|
}
|
|
*(int **)(iVar1 + 8) = param_1 + -0xe;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e004 @ 0004e004
|
|
|
|
int FUN_0004e004(void)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
int iVar3;
|
|
|
|
iVar1 = FUN_000306d8();
|
|
iVar3 = *(int *)(iVar1 + 8);
|
|
puVar2 = (undefined4 *)(iVar1 + 8);
|
|
if (iVar3 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_0003178c();
|
|
}
|
|
if (*(int *)(iVar3 + 0x38) == 0x432b2b00 && *(int *)(iVar3 + 0x3c) == 0x474e5543) {
|
|
iVar1 = *(int *)(iVar3 + 0x20) + -1;
|
|
*(int *)(iVar3 + 0x20) = iVar1;
|
|
if (iVar1 != 0) {
|
|
return iVar3 + 0x38;
|
|
}
|
|
*puVar2 = *(undefined4 *)(iVar3 + 0x1c);
|
|
puVar2 = (undefined4 *)(iVar3 + 0x1c);
|
|
}
|
|
*puVar2 = 0;
|
|
return iVar3 + 0x38;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __cxa_call_unexpected @ 0004e054
|
|
|
|
void __cxa_call_unexpected(int *param_1)
|
|
|
|
{
|
|
if (*param_1 == 0x432b2b00 && param_1[1] == 0x474e5543) {
|
|
FUN_000308d8(param_1);
|
|
(*(code *)param_1[-0xb])((code *)param_1[-0xb],0);
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_0003178c();
|
|
}
|
|
FUN_000308d8(param_1);
|
|
FUN_00031844();
|
|
FUN_000308d8();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_0003178c();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e1d4 @ 0004e1d4
|
|
|
|
uint FUN_0004e1d4(undefined4 *param_1)
|
|
|
|
{
|
|
byte bVar1;
|
|
uint uVar2;
|
|
byte *pbVar3;
|
|
uint uVar4;
|
|
|
|
pbVar3 = (byte *)*param_1;
|
|
uVar4 = 0;
|
|
uVar2 = 0;
|
|
do {
|
|
bVar1 = *pbVar3;
|
|
uVar2 = uVar2 | (bVar1 & 0x7f) << (uVar4 & 0xff);
|
|
uVar4 = uVar4 + 7;
|
|
pbVar3 = pbVar3 + 1;
|
|
} while ((bVar1 & 0x80) != 0);
|
|
*param_1 = pbVar3;
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e1f8 @ 0004e1f8
|
|
|
|
uint FUN_0004e1f8(undefined4 *param_1)
|
|
|
|
{
|
|
byte bVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
byte *pbVar5;
|
|
|
|
pbVar5 = (byte *)*param_1;
|
|
uVar3 = 0;
|
|
uVar2 = 0;
|
|
do {
|
|
bVar1 = *pbVar5;
|
|
uVar2 = uVar2 | (bVar1 & 0x7f) << (uVar3 & 0xff);
|
|
uVar3 = uVar3 + 7;
|
|
pbVar5 = pbVar5 + 1;
|
|
} while ((bVar1 & 0x80) != 0);
|
|
*param_1 = pbVar5;
|
|
uVar4 = bVar1 & 0x40;
|
|
if ((bVar1 & 0x40) != 0) {
|
|
uVar4 = -1 << (uVar3 & 0xff);
|
|
}
|
|
if (0x1f < uVar3) {
|
|
return uVar2;
|
|
}
|
|
return uVar4 | uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e23c @ 0004e23c
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
byte * FUN_0004e23c(undefined4 *param_1,uint param_2)
|
|
|
|
{
|
|
byte bVar1;
|
|
ushort uVar2;
|
|
uint uVar3;
|
|
byte *pbVar4;
|
|
uint uVar5;
|
|
byte *pbVar6;
|
|
ushort *puVar7;
|
|
ushort *puVar8;
|
|
uint uVar9;
|
|
|
|
if (param_2 == 0xff) {
|
|
return (byte *)0x0;
|
|
}
|
|
if (0xc < (param_2 & 0xf)) goto switchD_0004e25e_caseD_5;
|
|
puVar7 = (ushort *)*param_1;
|
|
puVar8 = puVar7;
|
|
switch(param_2 & 0xf) {
|
|
case 0:
|
|
case 3:
|
|
case 0xb:
|
|
pbVar6 = *(byte **)puVar7;
|
|
puVar8 = puVar7 + 2;
|
|
break;
|
|
case 1:
|
|
uVar3 = 0;
|
|
pbVar6 = (byte *)0x0;
|
|
do {
|
|
uVar2 = *puVar8;
|
|
pbVar6 = (byte *)((uint)pbVar6 | ((byte)uVar2 & 0x7f) << (uVar3 & 0xff));
|
|
uVar3 = uVar3 + 7;
|
|
puVar8 = (ushort *)((int)puVar8 + 1);
|
|
} while (((byte)uVar2 & 0x80) != 0);
|
|
break;
|
|
case 2:
|
|
pbVar6 = (byte *)(uint)*puVar7;
|
|
goto LAB_0004e30a;
|
|
case 4:
|
|
case 0xc:
|
|
pbVar6 = *(byte **)puVar7;
|
|
puVar8 = puVar7 + 4;
|
|
break;
|
|
default:
|
|
goto switchD_0004e25e_caseD_5;
|
|
case 9:
|
|
uVar9 = 0;
|
|
uVar3 = 0;
|
|
do {
|
|
bVar1 = (byte)*puVar8;
|
|
uVar3 = uVar3 | (bVar1 & 0x7f) << (uVar9 & 0xff);
|
|
uVar9 = uVar9 + 7;
|
|
puVar8 = (ushort *)((int)puVar8 + 1);
|
|
} while ((bVar1 & 0x80) != 0);
|
|
uVar5 = -1 << (uVar9 & 0xff);
|
|
if ((bVar1 & 0x40) == 0) {
|
|
uVar5 = bVar1 & 0x40;
|
|
}
|
|
if (0x1f < uVar9) {
|
|
uVar5 = 0;
|
|
}
|
|
pbVar6 = (byte *)(uVar5 | uVar3);
|
|
break;
|
|
case 10:
|
|
pbVar6 = (byte *)(int)(short)*puVar7;
|
|
LAB_0004e30a:
|
|
puVar8 = puVar7 + 1;
|
|
}
|
|
pbVar4 = pbVar6;
|
|
if ((param_2 & 0x70) != 0) {
|
|
if ((param_2 & 0x70) != 0x10) {
|
|
switchD_0004e25e_caseD_5:
|
|
/* WARNING: Subroutine does not return */
|
|
abort();
|
|
}
|
|
pbVar4 = (byte *)0x0;
|
|
if (pbVar6 == (byte *)0x0) goto LAB_0004e330;
|
|
pbVar4 = pbVar6 + (int)puVar7;
|
|
}
|
|
if (((int)(param_2 << 0x18) < 0) && (pbVar4 != (byte *)0x0)) {
|
|
pbVar4 = *(byte **)pbVar4;
|
|
}
|
|
LAB_0004e330:
|
|
*param_1 = puVar8;
|
|
return pbVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e34a @ 0004e34a
|
|
|
|
void FUN_0004e34a(void *param_1)
|
|
|
|
{
|
|
FUN_00030670();
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e370 @ 0004e370
|
|
|
|
void FUN_0004e370(void)
|
|
|
|
{
|
|
FUN_00030670();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e37a @ 0004e37a
|
|
|
|
void FUN_0004e37a(void *param_1)
|
|
|
|
{
|
|
FUN_00030670();
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e3a4 @ 0004e3a4
|
|
|
|
undefined4 FUN_0004e3a4(uint *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_0006b8e4);
|
|
uVar1 = *param_1;
|
|
while( true ) {
|
|
if ((uVar1 & 1) != 0) {
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4);
|
|
return 0;
|
|
}
|
|
if ((uVar1 & 0x100) == 0) break;
|
|
*param_1 = uVar1 | 0x200;
|
|
pthread_cond_wait((pthread_cond_t *)&DAT_00071054,(pthread_mutex_t *)&DAT_0006b8e4);
|
|
uVar1 = *param_1;
|
|
}
|
|
*param_1 = 0x100;
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4);
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e40c @ 0004e40c
|
|
|
|
void FUN_0004e40c(uint *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_0006b8e4);
|
|
uVar1 = *param_1;
|
|
*param_1 = 1;
|
|
if ((uVar1 & 0x200) != 0) {
|
|
pthread_cond_broadcast((pthread_cond_t *)&DAT_00071054);
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e444 @ 0004e444
|
|
|
|
void FUN_0004e444(uint *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
pthread_mutex_lock((pthread_mutex_t *)&DAT_0006b8e4);
|
|
uVar1 = *param_1;
|
|
*param_1 = 0;
|
|
if ((uVar1 & 0x200) != 0) {
|
|
pthread_cond_broadcast((pthread_cond_t *)&DAT_00071054);
|
|
}
|
|
pthread_mutex_unlock((pthread_mutex_t *)&DAT_0006b8e4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e480 @ 0004e480
|
|
|
|
void FUN_0004e480(void)
|
|
|
|
{
|
|
FUN_00030670();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e48c @ 0004e48c
|
|
|
|
undefined4 FUN_0004e48c(int *param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
uVar2 = 1;
|
|
iVar1 = (**(code **)(*param_1 + 0xc))(param_1,param_2,param_3,1);
|
|
if (iVar1 == 0) {
|
|
uVar2 = FUN_0003186c(param_2,&decltype(nullptr)::typeinfo);
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e4bc @ 0004e4bc
|
|
|
|
uint FUN_0004e4bc(int *param_1,int *param_2,undefined4 param_3,uint param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int *piVar5;
|
|
byte local_18 [4];
|
|
|
|
iVar1 = FUN_0003186c();
|
|
uVar3 = 1;
|
|
if (iVar1 == 0) {
|
|
if ((param_1 == (int *)0x0) || (param_2 == (int *)0x0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00055980();
|
|
}
|
|
uVar3 = 0;
|
|
iVar1 = FUN_00031886(*(undefined4 *)(*param_1 + -4),*(undefined4 *)(*param_2 + -4));
|
|
if ((iVar1 == 0) && ((param_2[2] & (param_1[2] ^ 0xffffffffU)) == 0)) {
|
|
uVar4 = param_4 | 2;
|
|
if (param_4 != 1) {
|
|
uVar4 = param_4 & 0xfffffffe;
|
|
}
|
|
if ((uVar4 & 5) != 4) {
|
|
uVar4 = ~(param_1[2] << 2) & 4U | uVar4;
|
|
iVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,param_3,uVar4,local_18);
|
|
if (iVar1 == 1) {
|
|
uVar3 = (uint)local_18[0];
|
|
if (uVar3 != 0) {
|
|
uVar3 = 1;
|
|
}
|
|
}
|
|
else {
|
|
piVar5 = (int *)param_1[3];
|
|
if ((piVar5 == (int *)0x0) ||
|
|
(piVar2 = (int *)FUN_00030ba0(piVar5,&PTR_PTR_FUN_00031728_1_00068d20,
|
|
&PTR_PTR_FUN_00031728_1_00069dc8,0), piVar2 == (int *)0x0
|
|
)) {
|
|
uVar3 = (**(code **)(*piVar5 + 8))(piVar5,param_2[3],param_3);
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*piVar2 + 0xc))(piVar2,param_2[3],param_3,uVar4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004e5a0 @ 0004e5a0
|
|
|
|
undefined4 FUN_0004e5a0(int *param_1,int param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
char local_18 [4];
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x10))(param_1,param_2,param_3,param_4,local_18);
|
|
if (iVar1 == 1) {
|
|
uVar2 = 1;
|
|
if (local_18[0] == '\0') {
|
|
return 0;
|
|
}
|
|
}
|
|
else {
|
|
piVar4 = (int *)param_1[3];
|
|
if ((piVar4 != (int *)0x0) &&
|
|
(piVar3 = (int *)FUN_00030ba0(piVar4,&PTR_PTR_FUN_00031728_1_00068d20,
|
|
&PTR_PTR_FUN_00031728_1_00069dc8,0), piVar3 != (int *)0x0)) {
|
|
uVar2 = (**(code **)(*piVar3 + 0xc))(piVar3,*(undefined4 *)(param_2 + 0xc),param_3,param_4);
|
|
return uVar2;
|
|
}
|
|
uVar2 = (**(code **)(*piVar4 + 8))(piVar4,*(undefined4 *)(param_2 + 0xc),param_3);
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Filebuf_base @ 0004e61c
|
|
|
|
/* std::_Filebuf_base::_Filebuf_base() */
|
|
|
|
void __thiscall std::_Filebuf_base::_Filebuf_base(_Filebuf_base *this)
|
|
|
|
{
|
|
*(undefined2 *)(this + 8) = 0;
|
|
*(undefined4 *)this = 0xffffffff;
|
|
*(undefined4 *)(this + 4) = 0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _S_initialize @ 0004e628
|
|
|
|
/* std::_Filebuf_base::_S_initialize() */
|
|
|
|
void std::_Filebuf_base::_S_initialize(void)
|
|
|
|
{
|
|
_M_page_size = sysconf(0x27);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_file_size @ 0004e640
|
|
|
|
/* std::_Filebuf_base::_M_file_size() */
|
|
|
|
int __thiscall std::_Filebuf_base::_M_file_size(_Filebuf_base *this)
|
|
|
|
{
|
|
bool bVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
stat sStack_70;
|
|
|
|
iVar2 = fstat(*(int *)this,&sStack_70);
|
|
iVar3 = 0;
|
|
if ((iVar2 == 0) && ((sStack_70.st_mode & 0xf000) == 0x8000)) {
|
|
bVar1 = 0 < sStack_70.st_blocks;
|
|
if (sStack_70.st_blocks == 0) {
|
|
bVar1 = sStack_70.st_blksize != 0;
|
|
}
|
|
iVar3 = sStack_70.st_blksize;
|
|
if (!bVar1) {
|
|
iVar3 = 0;
|
|
}
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_open @ 0004e698
|
|
|
|
/* std::_Filebuf_base::_M_open(char const*, int, long) */
|
|
|
|
bool __thiscall
|
|
std::_Filebuf_base::_M_open(_Filebuf_base *this,char *param_1,int param_2,long param_3)
|
|
|
|
{
|
|
__off_t _Var1;
|
|
int iVar2;
|
|
_Filebuf_base _Var3;
|
|
bool bVar4;
|
|
stat sStack_80;
|
|
|
|
bVar4 = false;
|
|
if (this[8] != (_Filebuf_base)0x0) {
|
|
return false;
|
|
}
|
|
iVar2 = 0x241;
|
|
switch(param_2 & 0xfffffff9) {
|
|
case 1:
|
|
case 0x11:
|
|
iVar2 = 0x441;
|
|
break;
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
case 6:
|
|
case 7:
|
|
case 10:
|
|
case 0xb:
|
|
case 0xc:
|
|
case 0xd:
|
|
case 0xe:
|
|
case 0xf:
|
|
case 0x12:
|
|
case 0x13:
|
|
case 0x14:
|
|
case 0x15:
|
|
case 0x16:
|
|
case 0x17:
|
|
case 0x1a:
|
|
case 0x1b:
|
|
case 0x1c:
|
|
case 0x1d:
|
|
case 0x1e:
|
|
case 0x1f:
|
|
case 0x20:
|
|
case 0x21:
|
|
case 0x22:
|
|
case 0x23:
|
|
case 0x24:
|
|
case 0x25:
|
|
case 0x26:
|
|
case 0x27:
|
|
case 0x28:
|
|
case 0x29:
|
|
case 0x2a:
|
|
case 0x2b:
|
|
case 0x2c:
|
|
case 0x2d:
|
|
case 0x2e:
|
|
case 0x2f:
|
|
case 0x31:
|
|
case 0x32:
|
|
case 0x33:
|
|
case 0x34:
|
|
case 0x35:
|
|
case 0x36:
|
|
case 0x37:
|
|
return false;
|
|
case 8:
|
|
param_3 = 0;
|
|
iVar2 = 0;
|
|
break;
|
|
case 9:
|
|
case 0x19:
|
|
iVar2 = 0x442;
|
|
break;
|
|
case 0x10:
|
|
case 0x30:
|
|
break;
|
|
case 0x18:
|
|
iVar2 = 2;
|
|
break;
|
|
case 0x38:
|
|
iVar2 = 0x242;
|
|
break;
|
|
default:
|
|
goto switchD_0004e6ca_default;
|
|
}
|
|
iVar2 = open(param_1,iVar2,param_3);
|
|
if (-1 < iVar2) {
|
|
_Var3 = (_Filebuf_base)0x1;
|
|
this[8] = (_Filebuf_base)0x1;
|
|
if ((param_2 & 3U) != 0) {
|
|
_Var3 = (_Filebuf_base)0x0;
|
|
_Var1 = lseek(iVar2,0,2);
|
|
if (_Var1 == -1) {
|
|
this[8] = (_Filebuf_base)0x0;
|
|
}
|
|
else {
|
|
_Var3 = this[8];
|
|
}
|
|
}
|
|
this[9] = _Var3;
|
|
*(int *)this = iVar2;
|
|
*(int *)(this + 4) = param_2;
|
|
if (_Var3 != (_Filebuf_base)0x0) {
|
|
iVar2 = fstat(iVar2,&sStack_80);
|
|
_Var3 = (_Filebuf_base)0x0;
|
|
if ((iVar2 == 0) && (_Var3 = (_Filebuf_base)0x1, (sStack_80.st_mode & 0xf000) != 0x8000)) {
|
|
_Var3 = (_Filebuf_base)0x0;
|
|
}
|
|
this[10] = _Var3;
|
|
bVar4 = this[8] != (_Filebuf_base)0x0;
|
|
}
|
|
}
|
|
switchD_0004e6ca_default:
|
|
return bVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_open @ 0004e794
|
|
|
|
/* std::_Filebuf_base::_M_open(char const*, int) */
|
|
|
|
void __thiscall std::_Filebuf_base::_M_open(_Filebuf_base *this,char *param_1,int param_2)
|
|
|
|
{
|
|
_M_open(this,param_1,param_2,0x1b6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_open @ 0004e7a4
|
|
|
|
/* std::_Filebuf_base::_M_open(int, int) */
|
|
|
|
undefined4 std::_Filebuf_base::_M_open(int param_1,int param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
undefined1 uVar3;
|
|
undefined4 uVar4;
|
|
stat sStack_80;
|
|
|
|
uVar4 = 0;
|
|
if ((-1 < param_2) && (*(char *)(param_1 + 8) == '\0')) {
|
|
uVar1 = fcntl(param_2,3);
|
|
if (uVar1 != 0xffffffff) {
|
|
*(int *)param_1 = param_2;
|
|
*(undefined2 *)(param_1 + 8) = 1;
|
|
*(uint *)(param_1 + 4) = *(uint *)(&DAT_0004e814 + (uVar1 & 3 ^ 2) * 4) | uVar1 >> 10 & 1;
|
|
iVar2 = fstat(param_2,&sStack_80);
|
|
uVar3 = 0;
|
|
if ((iVar2 == 0) && (uVar3 = 1, (sStack_80.st_mode & 0xf000) != 0x8000)) {
|
|
uVar3 = 0;
|
|
}
|
|
*(undefined1 *)(param_1 + 10) = uVar3;
|
|
uVar4 = 1;
|
|
}
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_close @ 0004e824
|
|
|
|
/* std::_Filebuf_base::_M_close() */
|
|
|
|
undefined4 __thiscall std::_Filebuf_base::_M_close(_Filebuf_base *this)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int iVar2;
|
|
|
|
uVar1 = 0;
|
|
if (this[8] != (_Filebuf_base)0x0) {
|
|
uVar1 = 1;
|
|
if (this[9] != (_Filebuf_base)0x0) {
|
|
iVar2 = close(*(int *)this);
|
|
uVar1 = 1;
|
|
if (iVar2 != 0) {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
*(undefined4 *)(this + 4) = 0;
|
|
*(undefined2 *)(this + 8) = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_read @ 0004e854
|
|
|
|
/* std::_Filebuf_base::_M_read(char*, int) */
|
|
|
|
void __thiscall std::_Filebuf_base::_M_read(_Filebuf_base *this,char *param_1,int param_2)
|
|
|
|
{
|
|
read(*(int *)this,param_1,param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_write @ 0004e860
|
|
|
|
/* std::_Filebuf_base::_M_write(char*, int) */
|
|
|
|
undefined4 __thiscall std::_Filebuf_base::_M_write(_Filebuf_base *this,char *param_1,int param_2)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
sVar1 = write(*(int *)this,param_1,param_2);
|
|
if (sVar1 != param_2) {
|
|
do {
|
|
if ((int)sVar1 < 1) {
|
|
return 0;
|
|
}
|
|
if (param_2 <= (int)sVar1) {
|
|
return 0;
|
|
}
|
|
param_1 = param_1 + sVar1;
|
|
param_2 = param_2 - sVar1;
|
|
sVar1 = write(*(int *)this,param_1,param_2);
|
|
} while (param_2 != sVar1);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_seek @ 0004e89e
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
/* std::_Filebuf_base::_M_seek(long, int) */
|
|
|
|
__off_t __thiscall std::_Filebuf_base::_M_seek(_Filebuf_base *this,long param_1,int param_2)
|
|
|
|
{
|
|
bool bVar1;
|
|
__off_t _Var2;
|
|
int iVar3;
|
|
int iVar4;
|
|
stat sStack_80;
|
|
|
|
iVar3 = 1;
|
|
if (param_2 == 4) {
|
|
iVar3 = fstat(*(int *)this,&sStack_80);
|
|
iVar4 = 0;
|
|
if ((iVar3 == 0) && ((sStack_80.st_mode & 0xf000) == 0x8000)) {
|
|
bVar1 = 0 < sStack_80.st_blocks;
|
|
if (sStack_80.st_blocks == 0) {
|
|
bVar1 = sStack_80.st_blksize != 0;
|
|
}
|
|
iVar4 = sStack_80.st_blksize;
|
|
if (!bVar1) {
|
|
iVar4 = 0;
|
|
}
|
|
}
|
|
iVar3 = 2;
|
|
if (iVar4 < -param_1) {
|
|
return -1;
|
|
}
|
|
}
|
|
else if (param_2 != 2) {
|
|
if (param_2 != 1) {
|
|
return -1;
|
|
}
|
|
iVar3 = 0;
|
|
if (param_1 < 0) {
|
|
return -1;
|
|
}
|
|
}
|
|
_Var2 = lseek(*(int *)this,param_1,iVar3);
|
|
return _Var2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_mmap @ 0004e92a
|
|
|
|
/* std::_Filebuf_base::_M_mmap(long, long) */
|
|
|
|
void * __thiscall std::_Filebuf_base::_M_mmap(_Filebuf_base *this,long param_1,long param_2)
|
|
|
|
{
|
|
void *__addr;
|
|
__off_t _Var1;
|
|
void *pvVar2;
|
|
|
|
__addr = mmap((void *)0x0,param_2,1,2,*(int *)this,param_1);
|
|
pvVar2 = (void *)0x0;
|
|
if (__addr != (void *)0xffffffff) {
|
|
_Var1 = lseek(*(int *)this,param_2 + param_1,0);
|
|
pvVar2 = __addr;
|
|
if (_Var1 < 0) {
|
|
munmap(__addr,param_2);
|
|
pvVar2 = (void *)0x0;
|
|
}
|
|
}
|
|
return pvVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_unmap @ 0004e97a
|
|
|
|
/* std::_Filebuf_base::_M_unmap(void*, long) */
|
|
|
|
void __thiscall std::_Filebuf_base::_M_unmap(_Filebuf_base *this,void *param_1,long param_2)
|
|
|
|
{
|
|
munmap(param_1,param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _M_doit @ 0004e988
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
/* std::_Underflow<char, std::char_traits<char> >::_M_doit(std::filebuf*) */
|
|
|
|
uint std::_Underflow<char,std::char_traits<char>>::_M_doit(filebuf *param_1)
|
|
|
|
{
|
|
bool bVar1;
|
|
__off_t _Var2;
|
|
int iVar3;
|
|
void *__addr;
|
|
uint uVar4;
|
|
byte *pbVar5;
|
|
int extraout_r1;
|
|
int extraout_r1_00;
|
|
int iVar6;
|
|
size_t __len;
|
|
stat sStack_80;
|
|
|
|
if (param_1[0x2f] == (filebuf)0x0) {
|
|
if (param_1[0x28] == (filebuf)0x0) {
|
|
return 0xffffffff;
|
|
}
|
|
if (-1 < (int)((uint)(byte)param_1[0x24] << 0x1c)) {
|
|
return 0xffffffff;
|
|
}
|
|
if (param_1[0x30] != (filebuf)0x0) {
|
|
return 0xffffffff;
|
|
}
|
|
if (param_1[0x31] != (filebuf)0x0) {
|
|
return 0xffffffff;
|
|
}
|
|
if (*(int *)(param_1 + 0x34) == 0) {
|
|
iVar6 = _Filebuf_base::_M_page_size + 0xfff;
|
|
__aeabi_uidivmod();
|
|
iVar6 = FUN_000352a0(param_1,0,iVar6 - extraout_r1);
|
|
if (iVar6 != 1) {
|
|
return 0xffffffff;
|
|
}
|
|
}
|
|
*(undefined4 *)(param_1 + 0x44) = *(undefined4 *)(param_1 + 0x3c);
|
|
*(undefined4 *)(param_1 + 0x48) = *(undefined4 *)(param_1 + 0x3c);
|
|
*(undefined4 *)(param_1 + 0x50) = *(undefined4 *)(param_1 + 0x4c);
|
|
param_1[0x2f] = (filebuf)0x1;
|
|
}
|
|
else if (param_1[0x32] != (filebuf)0x0) {
|
|
pbVar5 = *(byte **)(param_1 + 0x60);
|
|
*(undefined4 *)(param_1 + 4) = *(undefined4 *)(param_1 + 0x5c);
|
|
*(byte **)(param_1 + 8) = pbVar5;
|
|
*(byte **)(param_1 + 0xc) = *(byte **)(param_1 + 100);
|
|
param_1[0x32] = (filebuf)0x0;
|
|
if (pbVar5 != *(byte **)(param_1 + 100)) {
|
|
return (uint)*pbVar5;
|
|
}
|
|
}
|
|
if ((param_1[0x2a] == (filebuf)0x0) || (param_1[0x2d] == (filebuf)0x0)) goto LAB_0004eb1c;
|
|
if (*(void **)(param_1 + 0x54) != (void *)0x0) {
|
|
munmap(*(void **)(param_1 + 0x54),*(size_t *)(param_1 + 0x58));
|
|
}
|
|
iVar6 = 0;
|
|
_Var2 = lseek(*(int *)(param_1 + 0x20),0,1);
|
|
iVar3 = fstat(*(int *)(param_1 + 0x20),&sStack_80);
|
|
if (iVar3 == 0) {
|
|
if ((sStack_80.st_mode & 0xf000) == 0x8000) {
|
|
bVar1 = 0 < sStack_80.st_blocks;
|
|
if (sStack_80.st_blocks == 0) {
|
|
bVar1 = sStack_80.st_blksize != 0;
|
|
}
|
|
iVar6 = sStack_80.st_blksize;
|
|
if (!bVar1) {
|
|
iVar6 = 0;
|
|
}
|
|
}
|
|
if (_Var2 < iVar6) goto LAB_0004ea9e;
|
|
LAB_0004eb18:
|
|
*(undefined4 *)(param_1 + 0x54) = 0;
|
|
}
|
|
else {
|
|
if (-1 < _Var2) goto LAB_0004eb18;
|
|
LAB_0004ea9e:
|
|
if ((_Var2 < 0) || (iVar6 < 1)) goto LAB_0004eb18;
|
|
__aeabi_uidivmod(_Var2,_Filebuf_base::_M_page_size);
|
|
iVar3 = _Var2 - extraout_r1_00;
|
|
__len = iVar6 - iVar3;
|
|
if (0xfffff < iVar6 - iVar3) {
|
|
__len = 0x100000;
|
|
}
|
|
*(size_t *)(param_1 + 0x58) = __len;
|
|
__addr = mmap((void *)0x0,__len,1,2,*(int *)(param_1 + 0x20),iVar3);
|
|
if (__addr == (void *)0xffffffff) goto LAB_0004eb18;
|
|
_Var2 = lseek(*(int *)(param_1 + 0x20),__len + iVar3,0);
|
|
if (_Var2 < 0) {
|
|
munmap(__addr,__len);
|
|
goto LAB_0004eb18;
|
|
}
|
|
*(void **)(param_1 + 0x54) = __addr;
|
|
if (__addr != (void *)0x0) {
|
|
*(void **)(param_1 + 4) = __addr;
|
|
*(int *)(param_1 + 8) = (int)__addr + extraout_r1_00;
|
|
*(int *)(param_1 + 0xc) = (int)__addr + *(int *)(param_1 + 0x58);
|
|
return (uint)*(byte *)((int)__addr + extraout_r1_00);
|
|
}
|
|
}
|
|
*(undefined4 *)(param_1 + 0x58) = 0;
|
|
LAB_0004eb1c:
|
|
uVar4 = FUN_0004eb44(param_1);
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004eb44 @ 0004eb44
|
|
|
|
uint FUN_0004eb44(int param_1)
|
|
|
|
{
|
|
byte *pbVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
void *__buf;
|
|
int iVar4;
|
|
byte *local_1c;
|
|
int local_18;
|
|
|
|
*(undefined4 *)(param_1 + 0x4c) = *(undefined4 *)(param_1 + 0x50);
|
|
__buf = *(void **)(param_1 + 0x3c);
|
|
uVar2 = *(uint *)(param_1 + 0x44);
|
|
if ((uVar2 < *(uint *)(param_1 + 0x48)) && (iVar4 = *(uint *)(param_1 + 0x48) - uVar2, iVar4 != 0)
|
|
) {
|
|
__aeabi_memmove(__buf,uVar2,iVar4);
|
|
__buf = (void *)((int)__buf + iVar4);
|
|
}
|
|
*(void **)(param_1 + 0x48) = __buf;
|
|
iVar4 = read(*(int *)(param_1 + 0x20),__buf,*(int *)(param_1 + 0x40) - (int)__buf);
|
|
if (-1 < iVar4) {
|
|
while( true ) {
|
|
iVar3 = *(int *)(param_1 + 0x48) + iVar4;
|
|
*(int *)(param_1 + 0x48) = iVar3;
|
|
if (*(int *)(param_1 + 0x3c) == iVar3) break;
|
|
iVar3 = (**(code **)(**(int **)(param_1 + 0x68) + 0xc))
|
|
(*(int **)(param_1 + 0x68),param_1 + 0x50,*(int *)(param_1 + 0x3c),iVar3,
|
|
&local_18,*(undefined4 *)(param_1 + 0x34),*(undefined4 *)(param_1 + 0x38),
|
|
&local_1c);
|
|
if (iVar3 == 2) {
|
|
LAB_0004ec20:
|
|
if (*(void **)(param_1 + 0x54) != (void *)0x0) {
|
|
munmap(*(void **)(param_1 + 0x54),*(size_t *)(param_1 + 0x58));
|
|
*(undefined4 *)(param_1 + 0x54) = 0;
|
|
*(undefined4 *)(param_1 + 0x58) = 0;
|
|
}
|
|
*(undefined1 *)(param_1 + 0x30) = 0;
|
|
*(undefined1 *)(param_1 + 0x2f) = 0;
|
|
*(undefined1 *)(param_1 + 0x31) = 1;
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
return 0xffffffff;
|
|
}
|
|
if (iVar3 == 3) {
|
|
pbVar1 = *(byte **)(param_1 + 0x3c);
|
|
local_1c = *(byte **)(param_1 + 0x48);
|
|
*(byte **)(param_1 + 0x44) = local_1c;
|
|
LAB_0004ec56:
|
|
*(byte **)(param_1 + 4) = pbVar1;
|
|
*(byte **)(param_1 + 8) = pbVar1;
|
|
*(byte **)(param_1 + 0xc) = local_1c;
|
|
return (uint)*pbVar1;
|
|
}
|
|
pbVar1 = *(byte **)(param_1 + 0x34);
|
|
if (((local_1c != pbVar1) && (local_18 == *(int *)(param_1 + 0x3c))) ||
|
|
((*(char *)(param_1 + 0x2c) != '\0' &&
|
|
(((int)local_1c - (int)pbVar1) * *(int *)(param_1 + 0x6c) -
|
|
(local_18 - *(int *)(param_1 + 0x3c)) != 0)))) goto LAB_0004ec20;
|
|
if (local_1c != pbVar1) {
|
|
*(int *)(param_1 + 0x44) = local_18;
|
|
goto LAB_0004ec56;
|
|
}
|
|
if (*(int *)(param_1 + 0x70) <= local_18 - *(int *)(param_1 + 0x3c)) goto LAB_0004ec20;
|
|
if ((iVar4 < 1) ||
|
|
(iVar4 = read(*(int *)(param_1 + 0x20),*(void **)(param_1 + 0x48),
|
|
*(int *)(param_1 + 0x40) - (int)*(void **)(param_1 + 0x48)), iVar4 < 0))
|
|
break;
|
|
}
|
|
}
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ec64 @ 0004ec64
|
|
|
|
undefined4 * FUN_0004ec64(undefined4 *param_1,undefined4 param_2)
|
|
|
|
{
|
|
param_1[6] = 0;
|
|
param_1[5] = 0;
|
|
param_1[4] = 0;
|
|
param_1[3] = 0;
|
|
param_1[2] = 0;
|
|
param_1[1] = 0;
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::locale((locale *)(param_1 + 7));
|
|
param_1[8] = param_2;
|
|
*param_1 = &PTR_FUN_0004eca0_1_00069df8;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004eca0 @ 0004eca0
|
|
|
|
undefined4 * FUN_0004eca0(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_0004eca0_1_00069df8;
|
|
fflush((FILE *)param_1[8]);
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ecd0 @ 0004ecd0
|
|
|
|
void FUN_0004ecd0(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_0004eca0_1_00069df8;
|
|
fflush((FILE *)param_1[8]);
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ed04 @ 0004ed04
|
|
|
|
int FUN_0004ed04(int param_1,char *param_2,size_t param_3)
|
|
|
|
{
|
|
int __modes;
|
|
|
|
__modes = 2;
|
|
if (param_2 != (char *)0x0 || param_3 != 0) {
|
|
__modes = 0;
|
|
}
|
|
setvbuf(*(FILE **)(param_1 + 0x20),param_2,__modes,param_3);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ed24 @ 0004ed24
|
|
|
|
void FUN_0004ed24(fpos_t *param_1,int param_2,long param_3,int param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = 0;
|
|
if (param_4 == 1) {
|
|
LAB_0004ed44:
|
|
iVar1 = fseek(*(FILE **)(param_2 + 0x20),param_3,iVar1);
|
|
if (iVar1 == 0) {
|
|
fgetpos(*(FILE **)(param_2 + 0x20),param_1);
|
|
goto LAB_0004ed62;
|
|
}
|
|
}
|
|
else {
|
|
if (param_4 == 4) {
|
|
iVar1 = 2;
|
|
goto LAB_0004ed44;
|
|
}
|
|
if (param_4 == 2) {
|
|
iVar1 = 1;
|
|
goto LAB_0004ed44;
|
|
}
|
|
}
|
|
param_1->__pos = -1;
|
|
LAB_0004ed62:
|
|
(param_1->__state).__count = 0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ed6a @ 0004ed6a
|
|
|
|
void FUN_0004ed6a(__off_t *param_1,int param_2,__off_t param_3,__off_t param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
__off_t local_18;
|
|
|
|
local_18 = param_3;
|
|
iVar1 = fsetpos(*(FILE **)(param_2 + 0x20),(fpos_t *)&local_18);
|
|
if (iVar1 != 0) {
|
|
*param_1 = -1;
|
|
param_1[1] = 0;
|
|
return;
|
|
}
|
|
*param_1 = param_3;
|
|
param_1[1] = param_4;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ed98 @ 0004ed98
|
|
|
|
undefined4 FUN_0004ed98(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
iVar1 = fflush(*(FILE **)(param_1 + 0x20));
|
|
uVar2 = 0xffffffff;
|
|
if (iVar1 == 0) {
|
|
uVar2 = 0;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004edb0 @ 0004edb0
|
|
|
|
void FUN_0004edb0(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_0004eca0_1_00069df8;
|
|
fflush((FILE *)param_1[8]);
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ede8 @ 0004ede8
|
|
|
|
int FUN_0004ede8(int param_1)
|
|
|
|
{
|
|
int __c;
|
|
int iVar1;
|
|
|
|
__c = getc(*(FILE **)(param_1 + 0x20));
|
|
iVar1 = -1;
|
|
if (__c != -1) {
|
|
ungetc(__c,*(FILE **)(param_1 + 0x20));
|
|
iVar1 = __c;
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ee0a @ 0004ee0a
|
|
|
|
void FUN_0004ee0a(int param_1)
|
|
|
|
{
|
|
getc(*(FILE **)(param_1 + 0x20));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ee16 @ 0004ee16
|
|
|
|
int FUN_0004ee16(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (param_2 != -1) {
|
|
iVar1 = ungetc(param_2,*(FILE **)(param_1 + 0x20));
|
|
return iVar1;
|
|
}
|
|
if (*(uint *)(param_1 + 4) < *(uint *)(param_1 + 8)) {
|
|
*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) - 1;
|
|
return 0;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ee44 @ 0004ee44
|
|
|
|
void FUN_0004ee44(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_0004eca0_1_00069df8;
|
|
fflush((FILE *)param_1[8]);
|
|
*param_1 = &PTR_FUN_00035128_1_000690ec;
|
|
std::locale::~locale((locale *)(param_1 + 7));
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004ee7e @ 0004ee7e
|
|
|
|
int FUN_0004ee7e(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
if (param_2 == -1) {
|
|
iVar2 = *(int *)(param_1 + 0x10);
|
|
iVar3 = *(int *)(param_1 + 0x14);
|
|
iVar1 = 0;
|
|
if (iVar3 != iVar2) {
|
|
fflush(*(FILE **)(param_1 + 0x20));
|
|
iVar1 = -1;
|
|
if (*(int *)(param_1 + 0x14) - *(int *)(param_1 + 0x10) < iVar3 - iVar2) {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
iVar1 = putc(param_2,*(FILE **)(param_1 + 0x20));
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~codecvt @ 0004eeb8
|
|
|
|
/* std::codecvt<char, char, mbstate_t>::~codecvt() */
|
|
|
|
void __thiscall std::codecvt<char,char,mbstate_t>::~codecvt(codecvt<char,char,mbstate_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~codecvt @ 0004eec2
|
|
|
|
/* std::codecvt<char, char, mbstate_t>::~codecvt() */
|
|
|
|
void __thiscall std::codecvt<char,char,mbstate_t>::~codecvt(codecvt<char,char,mbstate_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_length @ 0004eee2
|
|
|
|
/* std::codecvt<char, char, mbstate_t>::do_length(mbstate_t&, char const*, char const*, unsigned
|
|
int) const */
|
|
|
|
uint __thiscall
|
|
std::codecvt<char,char,mbstate_t>::do_length
|
|
(codecvt<char,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,char *param_3,
|
|
uint param_4)
|
|
|
|
{
|
|
if ((uint)((int)param_3 - (int)param_2) <= param_4) {
|
|
param_4 = (int)param_3 - (int)param_2;
|
|
}
|
|
return param_4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_max_length @ 0004eeee
|
|
|
|
/* std::codecvt<char, char, mbstate_t>::do_max_length() const */
|
|
|
|
undefined4 std::codecvt<char,char,mbstate_t>::do_max_length(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_always_noconv @ 0004eef2
|
|
|
|
/* std::codecvt<char, char, mbstate_t>::do_always_noconv() const */
|
|
|
|
undefined4 std::codecvt<char,char,mbstate_t>::do_always_noconv(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_encoding @ 0004eef6
|
|
|
|
/* std::codecvt<char, char, mbstate_t>::do_encoding() const */
|
|
|
|
undefined4 std::codecvt<char,char,mbstate_t>::do_encoding(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_unshift @ 0004eefa
|
|
|
|
/* std::codecvt<char, char, mbstate_t>::do_unshift(mbstate_t&, char*, char*, char*&) const */
|
|
|
|
undefined4 __thiscall
|
|
std::codecvt<char,char,mbstate_t>::do_unshift
|
|
(codecvt<char,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,char *param_3,
|
|
char **param_4)
|
|
|
|
{
|
|
*param_4 = param_2;
|
|
return 3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_in @ 0004ef02
|
|
|
|
/* std::codecvt<char, char, mbstate_t>::do_in(mbstate_t&, char const*, char const*, char const*&,
|
|
char*, char*, char*&) const */
|
|
|
|
undefined4 __thiscall
|
|
std::codecvt<char,char,mbstate_t>::do_in
|
|
(codecvt<char,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,char *param_3,
|
|
char **param_4,char *param_5,char *param_6,char **param_7)
|
|
|
|
{
|
|
*param_4 = param_2;
|
|
*param_7 = param_5;
|
|
return 3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_out @ 0004ef10
|
|
|
|
/* std::codecvt<char, char, mbstate_t>::do_out(mbstate_t&, char const*, char const*, char const*&,
|
|
char*, char*, char*&) const */
|
|
|
|
undefined4 __thiscall
|
|
std::codecvt<char,char,mbstate_t>::do_out
|
|
(codecvt<char,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,char *param_3,
|
|
char **param_4,char *param_5,char *param_6,char **param_7)
|
|
|
|
{
|
|
*param_4 = param_2;
|
|
*param_7 = param_5;
|
|
return 3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~codecvt @ 0004ef1e
|
|
|
|
/* std::codecvt<wchar_t, char, mbstate_t>::~codecvt() */
|
|
|
|
void __thiscall
|
|
std::codecvt<wchar_t,char,mbstate_t>::~codecvt(codecvt<wchar_t,char,mbstate_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~codecvt @ 0004ef28
|
|
|
|
/* std::codecvt<wchar_t, char, mbstate_t>::~codecvt() */
|
|
|
|
void __thiscall
|
|
std::codecvt<wchar_t,char,mbstate_t>::~codecvt(codecvt<wchar_t,char,mbstate_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_out @ 0004ef48
|
|
|
|
/* std::codecvt<wchar_t, char, mbstate_t>::do_out(mbstate_t&, wchar_t const*, wchar_t const*,
|
|
wchar_t const*&, char*, char*, char*&) const */
|
|
|
|
undefined4 __thiscall
|
|
std::codecvt<wchar_t,char,mbstate_t>::do_out
|
|
(codecvt<wchar_t,char,mbstate_t> *this,mbstate_t *param_1,wchar_t *param_2,
|
|
wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7)
|
|
|
|
{
|
|
int iVar1;
|
|
char *pcVar2;
|
|
int iVar3;
|
|
wchar_t *pwVar4;
|
|
wchar_t wVar5;
|
|
|
|
iVar1 = (int)param_3 - (int)param_2 >> 2;
|
|
iVar3 = (int)param_6 - (int)param_5;
|
|
if (iVar1 <= (int)param_6 - (int)param_5) {
|
|
iVar3 = iVar1;
|
|
}
|
|
pwVar4 = param_2 + iVar3;
|
|
if (0 < iVar3 * 4) {
|
|
iVar1 = iVar3 + 1;
|
|
pcVar2 = param_5;
|
|
do {
|
|
wVar5 = *param_2;
|
|
param_2 = param_2 + 1;
|
|
*pcVar2 = (char)wVar5;
|
|
iVar1 = iVar1 + -1;
|
|
pcVar2 = pcVar2 + 1;
|
|
} while (1 < iVar1);
|
|
}
|
|
*param_4 = pwVar4;
|
|
*param_7 = param_5 + iVar3;
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_in @ 0004ef8e
|
|
|
|
/* std::codecvt<wchar_t, char, mbstate_t>::do_in(mbstate_t&, char const*, char const*, char const*&,
|
|
wchar_t*, wchar_t*, wchar_t*&) const */
|
|
|
|
undefined4 __thiscall
|
|
std::codecvt<wchar_t,char,mbstate_t>::do_in
|
|
(codecvt<wchar_t,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,char *param_3,
|
|
char **param_4,wchar_t *param_5,wchar_t *param_6,wchar_t **param_7)
|
|
|
|
{
|
|
char *pcVar1;
|
|
wchar_t *pwVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
|
|
iVar3 = (int)param_6 - (int)param_5 >> 2;
|
|
if ((int)param_3 - (int)param_2 <= iVar3) {
|
|
iVar3 = (int)param_3 - (int)param_2;
|
|
}
|
|
pcVar1 = param_2 + iVar3;
|
|
if (0 < iVar3) {
|
|
iVar4 = iVar3 + 1;
|
|
pwVar2 = param_5;
|
|
do {
|
|
*pwVar2 = (uint)(byte)*param_2;
|
|
pwVar2 = pwVar2 + 1;
|
|
iVar4 = iVar4 + -1;
|
|
param_2 = (char *)((byte *)param_2 + 1);
|
|
} while (1 < iVar4);
|
|
}
|
|
*param_4 = pcVar1;
|
|
*param_7 = param_5 + iVar3;
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_unshift @ 0004efd4
|
|
|
|
/* std::codecvt<wchar_t, char, mbstate_t>::do_unshift(mbstate_t&, char*, char*, char*&) const */
|
|
|
|
undefined4 __thiscall
|
|
std::codecvt<wchar_t,char,mbstate_t>::do_unshift
|
|
(codecvt<wchar_t,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,char *param_3,
|
|
char **param_4)
|
|
|
|
{
|
|
*param_4 = param_2;
|
|
return 3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_encoding @ 0004efdc
|
|
|
|
/* std::codecvt<wchar_t, char, mbstate_t>::do_encoding() const */
|
|
|
|
undefined4 std::codecvt<wchar_t,char,mbstate_t>::do_encoding(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_always_noconv @ 0004efe0
|
|
|
|
/* std::codecvt<wchar_t, char, mbstate_t>::do_always_noconv() const */
|
|
|
|
undefined4 std::codecvt<wchar_t,char,mbstate_t>::do_always_noconv(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_length @ 0004efe4
|
|
|
|
/* std::codecvt<wchar_t, char, mbstate_t>::do_length(mbstate_t&, char const*, char const*, unsigned
|
|
int) const */
|
|
|
|
uint __thiscall
|
|
std::codecvt<wchar_t,char,mbstate_t>::do_length
|
|
(codecvt<wchar_t,char,mbstate_t> *this,mbstate_t *param_1,char *param_2,char *param_3,
|
|
uint param_4)
|
|
|
|
{
|
|
if ((uint)((int)param_3 - (int)param_2) <= param_4) {
|
|
param_4 = (int)param_3 - (int)param_2;
|
|
}
|
|
return param_4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_max_length @ 0004eff0
|
|
|
|
/* std::codecvt<wchar_t, char, mbstate_t>::do_max_length() const */
|
|
|
|
undefined4 std::codecvt<wchar_t,char,mbstate_t>::do_max_length(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~collate @ 0004eff4
|
|
|
|
/* std::collate<char>::~collate() */
|
|
|
|
void __thiscall std::collate<char>::~collate(collate<char> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~collate @ 0004effe
|
|
|
|
/* std::collate<char>::~collate() */
|
|
|
|
void __thiscall std::collate<char>::~collate(collate<char> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_compare @ 0004f01e
|
|
|
|
/* std::collate<char>::do_compare(char const*, char const*, char const*, char const*) const */
|
|
|
|
undefined4 __thiscall
|
|
std::collate<char>::do_compare
|
|
(collate<char> *this,char *param_1,char *param_2,char *param_3,char *param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
size_t __n;
|
|
undefined4 uVar2;
|
|
size_t sVar3;
|
|
size_t sVar4;
|
|
|
|
sVar3 = (int)param_4 - (int)param_3;
|
|
sVar4 = (int)param_2 - (int)param_1;
|
|
__n = sVar3;
|
|
if ((int)sVar4 <= (int)sVar3) {
|
|
__n = sVar4;
|
|
}
|
|
iVar1 = memcmp(param_1,param_3,__n);
|
|
if (iVar1 == 0) {
|
|
uVar2 = 0;
|
|
if ((sVar4 != sVar3) && (uVar2 = 0xffffffff, (int)sVar3 <= (int)sVar4)) {
|
|
uVar2 = 1;
|
|
}
|
|
}
|
|
else {
|
|
uVar2 = 0xffffffff;
|
|
if (0 < iVar1) {
|
|
uVar2 = 1;
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_transform @ 0004f05c
|
|
|
|
/* std::collate<char>::do_transform(char const*, char const*) const */
|
|
|
|
void std::collate<char>::do_transform(char *param_1,char *param_2)
|
|
|
|
{
|
|
FUN_0004f078();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004f078 @ 0004f078
|
|
|
|
undefined4 * FUN_0004f078(undefined4 *param_1,int param_2,int param_3)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
uint local_18;
|
|
|
|
param_1[4] = param_1;
|
|
param_1[5] = param_1;
|
|
iVar2 = param_3 - param_2;
|
|
uVar3 = iVar2 + 1;
|
|
if (uVar3 != 0) {
|
|
puVar1 = param_1;
|
|
if (0x10 < uVar3) {
|
|
local_18 = uVar3;
|
|
if (uVar3 < 0x81) {
|
|
puVar1 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar3 = local_18;
|
|
}
|
|
else {
|
|
puVar1 = (undefined4 *)operator_new(uVar3);
|
|
}
|
|
param_1[4] = puVar1;
|
|
param_1[5] = puVar1;
|
|
*param_1 = (undefined1 *)((int)puVar1 + uVar3);
|
|
}
|
|
if (param_3 != param_2) {
|
|
__aeabi_memcpy(puVar1,param_2,iVar2);
|
|
puVar1 = (undefined4 *)((int)puVar1 + iVar2);
|
|
}
|
|
param_1[4] = puVar1;
|
|
*(undefined1 *)puVar1 = 0;
|
|
return param_1;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_hash @ 0004f114
|
|
|
|
/* std::collate<char>::do_hash(char const*, char const*) const */
|
|
|
|
int __thiscall std::collate<char>::do_hash(collate<char> *this,char *param_1,char *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = 0;
|
|
if (param_1 < param_2) {
|
|
iVar1 = 0;
|
|
do {
|
|
iVar1 = iVar1 * 5 + (uint)(byte)*param_1;
|
|
param_1 = (char *)((byte *)param_1 + 1);
|
|
} while (param_2 != param_1);
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~collate @ 0004f12c
|
|
|
|
/* std::collate<wchar_t>::~collate() */
|
|
|
|
void __thiscall std::collate<wchar_t>::~collate(collate<wchar_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~collate @ 0004f136
|
|
|
|
/* std::collate<wchar_t>::~collate() */
|
|
|
|
void __thiscall std::collate<wchar_t>::~collate(collate<wchar_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_compare @ 0004f156
|
|
|
|
/* std::collate<wchar_t>::do_compare(wchar_t const*, wchar_t const*, wchar_t const*, wchar_t const*)
|
|
const */
|
|
|
|
undefined4 __thiscall
|
|
std::collate<wchar_t>::do_compare
|
|
(collate<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,
|
|
wchar_t *param_4)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
bool bVar7;
|
|
bool bVar8;
|
|
wchar_t *local_1c;
|
|
|
|
bVar7 = param_3 == param_4;
|
|
local_1c = param_1;
|
|
if ((param_1 != param_2) && (param_3 != param_4)) {
|
|
iVar6 = (int)param_3 + (4 - (int)param_4);
|
|
iVar5 = 0;
|
|
do {
|
|
uVar3 = *(uint *)((int)param_3 + -iVar5);
|
|
uVar2 = *(uint *)((int)param_1 + -iVar5);
|
|
if (uVar2 < uVar3) {
|
|
return 0xffffffff;
|
|
}
|
|
if (uVar3 < uVar2) {
|
|
return 1;
|
|
}
|
|
bVar7 = iVar6 == iVar5;
|
|
iVar4 = iVar5 + -4;
|
|
} while ((iVar6 != iVar5) &&
|
|
(bVar8 = (int)param_1 + (4 - (int)param_2) != iVar5, iVar5 = iVar4, bVar8));
|
|
local_1c = (wchar_t *)((int)param_1 - iVar4);
|
|
}
|
|
uVar1 = 0xffffffff;
|
|
if ((bVar7) && (uVar1 = 1, local_1c == param_2)) {
|
|
uVar1 = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_transform @ 0004f1d8
|
|
|
|
/* std::collate<wchar_t>::do_transform(wchar_t const*, wchar_t const*) const */
|
|
|
|
void std::collate<wchar_t>::do_transform(wchar_t *param_1,wchar_t *param_2)
|
|
|
|
{
|
|
FUN_0004f1f4();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004f1f4 @ 0004f1f4
|
|
|
|
int * FUN_0004f1f4(int *param_1,int param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int *piVar2;
|
|
undefined4 uVar3;
|
|
int iVar4;
|
|
uint local_18;
|
|
|
|
param_1[0x10] = (int)param_1;
|
|
param_1[0x11] = (int)param_1;
|
|
iVar4 = param_3 - param_2;
|
|
uVar1 = (iVar4 >> 2) + 1;
|
|
if (0x3ffffffe < (uint)(iVar4 >> 2)) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
piVar2 = param_1;
|
|
if (0x10 < uVar1) {
|
|
if (0x3fffffff < uVar1) {
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
uVar1 = uVar1 * 4;
|
|
local_18 = uVar1;
|
|
if (uVar1 < 0x81) {
|
|
piVar2 = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar1 = local_18;
|
|
}
|
|
else {
|
|
piVar2 = (int *)operator_new(uVar1);
|
|
}
|
|
param_1[0x10] = (int)piVar2;
|
|
param_1[0x11] = (int)piVar2;
|
|
*param_1 = (int)piVar2 + (uVar1 & 0xfffffffc);
|
|
}
|
|
if (param_3 != param_2) {
|
|
__aeabi_memcpy(piVar2,param_2,iVar4);
|
|
piVar2 = (int *)((int)piVar2 + iVar4);
|
|
}
|
|
param_1[0x10] = (int)piVar2;
|
|
*piVar2 = 0;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_hash @ 0004f2c8
|
|
|
|
/* std::collate<wchar_t>::do_hash(wchar_t const*, wchar_t const*) const */
|
|
|
|
int __thiscall
|
|
std::collate<wchar_t>::do_hash(collate<wchar_t> *this,wchar_t *param_1,wchar_t *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
wchar_t wVar2;
|
|
|
|
iVar1 = 0;
|
|
if (param_1 < param_2) {
|
|
iVar1 = 0;
|
|
do {
|
|
wVar2 = *param_1;
|
|
param_1 = param_1 + 1;
|
|
iVar1 = wVar2 + iVar1 * 5;
|
|
} while (param_1 < param_2);
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC classic_table @ 0004f2e0
|
|
|
|
/* std::ctype<char>::classic_table() */
|
|
|
|
undefined * std::ctype<char>::classic_table(void)
|
|
|
|
{
|
|
return &DAT_00065b4c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ctype @ 0004f2ec
|
|
|
|
/* std::ctype<char>::ctype(std::ctype_base::mask const*, bool, unsigned int) */
|
|
|
|
ctype<char> * __thiscall
|
|
std::ctype<char>::ctype(ctype<char> *this,mask *param_1,bool param_2,uint param_3)
|
|
|
|
{
|
|
mask *pmVar1;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_3 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__ctype_00069fe8;
|
|
pmVar1 = param_1;
|
|
if (param_1 == (mask *)0x0) {
|
|
pmVar1 = &DAT_00065b4c;
|
|
}
|
|
*(mask **)(this + 0xc) = pmVar1;
|
|
this[0x10] = (ctype<char>)(param_1 != (mask *)0x0 && param_2);
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ctype @ 0004f344
|
|
|
|
/* std::ctype<char>::~ctype() */
|
|
|
|
void __thiscall std::ctype<char>::~ctype(ctype<char> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__ctype_00069fe8;
|
|
if ((this[0x10] != (ctype<char>)0x0) && (*(void **)(this + 0xc) != (void *)0x0)) {
|
|
operator_delete__(*(void **)(this + 0xc));
|
|
}
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ctype @ 0004f370
|
|
|
|
/* std::ctype<char>::~ctype() */
|
|
|
|
void __thiscall std::ctype<char>::~ctype(ctype<char> *this)
|
|
|
|
{
|
|
*(undefined ***)this = &PTR__ctype_00069fe8;
|
|
if ((this[0x10] != (ctype<char>)0x0) && (*(void **)(this + 0xc) != (void *)0x0)) {
|
|
operator_delete__(*(void **)(this + 0xc));
|
|
}
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC scan_is @ 0004f3b0
|
|
|
|
/* std::ctype<char>::scan_is(std::ctype_base::mask, char const*, char const*) const */
|
|
|
|
byte * __thiscall
|
|
std::ctype<char>::scan_is(ctype<char> *this,uint param_2,byte *param_3,byte *param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar2 = (int)param_4 - (int)param_3 >> 2;
|
|
iVar1 = *(int *)(this + 0xc);
|
|
if (0 < iVar2) {
|
|
iVar2 = iVar2 + 1;
|
|
do {
|
|
if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) {
|
|
return param_3;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)param_3[1] * 4) & param_2) != 0) {
|
|
return param_3 + 1;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)param_3[2] * 4) & param_2) != 0) {
|
|
return param_3 + 2;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)param_3[3] * 4) & param_2) != 0) {
|
|
return param_3 + 3;
|
|
}
|
|
iVar2 = iVar2 + -1;
|
|
param_3 = param_3 + 4;
|
|
} while (1 < iVar2);
|
|
}
|
|
iVar2 = (int)param_4 - (int)param_3;
|
|
if (iVar2 != 1) {
|
|
if (iVar2 != 2) {
|
|
if (iVar2 != 3) {
|
|
return param_4;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) {
|
|
return param_3;
|
|
}
|
|
param_3 = param_3 + 1;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) {
|
|
return param_3;
|
|
}
|
|
param_3 = param_3 + 1;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) {
|
|
return param_4;
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC scan_not @ 0004f43c
|
|
|
|
/* std::ctype<char>::scan_not(std::ctype_base::mask, char const*, char const*) const */
|
|
|
|
byte * __thiscall
|
|
std::ctype<char>::scan_not(ctype<char> *this,uint param_2,byte *param_3,byte *param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar2 = (int)param_4 - (int)param_3 >> 2;
|
|
iVar1 = *(int *)(this + 0xc);
|
|
if (0 < iVar2) {
|
|
iVar2 = iVar2 + 1;
|
|
do {
|
|
if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) {
|
|
return param_3;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)param_3[1] * 4) & param_2) == 0) {
|
|
return param_3 + 1;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)param_3[2] * 4) & param_2) == 0) {
|
|
return param_3 + 2;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)param_3[3] * 4) & param_2) == 0) {
|
|
return param_3 + 3;
|
|
}
|
|
iVar2 = iVar2 + -1;
|
|
param_3 = param_3 + 4;
|
|
} while (1 < iVar2);
|
|
}
|
|
iVar2 = (int)param_4 - (int)param_3;
|
|
if (iVar2 != 1) {
|
|
if (iVar2 != 2) {
|
|
if (iVar2 != 3) {
|
|
return param_4;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) {
|
|
return param_3;
|
|
}
|
|
param_3 = param_3 + 1;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) == 0) {
|
|
return param_3;
|
|
}
|
|
param_3 = param_3 + 1;
|
|
}
|
|
if ((*(uint *)(iVar1 + (uint)*param_3 * 4) & param_2) != 0) {
|
|
return param_4;
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_toupper @ 0004f4c8
|
|
|
|
/* std::ctype<char>::do_toupper(char) const */
|
|
|
|
undefined1 __thiscall std::ctype<char>::do_toupper(ctype<char> *this,char param_1)
|
|
|
|
{
|
|
return (&DAT_00065f4c)[param_1];
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_tolower @ 0004f4d4
|
|
|
|
/* std::ctype<char>::do_tolower(char) const */
|
|
|
|
undefined1 __thiscall std::ctype<char>::do_tolower(ctype<char> *this,char param_1)
|
|
|
|
{
|
|
return (&DAT_0006604c)[param_1];
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_toupper @ 0004f4e0
|
|
|
|
/* std::ctype<char>::do_toupper(char*, char const*) const */
|
|
|
|
char * __thiscall std::ctype<char>::do_toupper(ctype<char> *this,char *param_1,char *param_2)
|
|
|
|
{
|
|
if (param_1 < param_2) {
|
|
do {
|
|
*param_1 = (&DAT_00065f4c)[(byte)*param_1];
|
|
param_1 = (char *)((byte *)param_1 + 1);
|
|
} while (param_2 != param_1);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_tolower @ 0004f4fc
|
|
|
|
/* std::ctype<char>::do_tolower(char*, char const*) const */
|
|
|
|
char * __thiscall std::ctype<char>::do_tolower(ctype<char> *this,char *param_1,char *param_2)
|
|
|
|
{
|
|
if (param_1 < param_2) {
|
|
do {
|
|
*param_1 = (&DAT_0006604c)[(byte)*param_1];
|
|
param_1 = (char *)((byte *)param_1 + 1);
|
|
} while (param_2 != param_1);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_widen @ 0004f518
|
|
|
|
/* std::ctype<char>::do_widen(char) const */
|
|
|
|
int __thiscall std::ctype<char>::do_widen(ctype<char> *this,char param_1)
|
|
|
|
{
|
|
return (int)param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_widen @ 0004f51c
|
|
|
|
/* std::ctype<char>::do_widen(char const*, char const*, char*) const */
|
|
|
|
char * __thiscall
|
|
std::ctype<char>::do_widen(ctype<char> *this,char *param_1,char *param_2,char *param_3)
|
|
|
|
{
|
|
if (param_2 != param_1) {
|
|
__aeabi_memmove(param_3);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_narrow @ 0004f530
|
|
|
|
/* std::ctype<char>::do_narrow(char, char) const */
|
|
|
|
int std::ctype<char>::do_narrow(char param_1,char param_2)
|
|
|
|
{
|
|
return (int)param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_narrow @ 0004f534
|
|
|
|
/* std::ctype<char>::do_narrow(char const*, char const*, char, char*) const */
|
|
|
|
char * __thiscall
|
|
std::ctype<char>::do_narrow
|
|
(ctype<char> *this,char *param_1,char *param_2,char param_3,char *param_4)
|
|
|
|
{
|
|
if ((int)param_2 - (int)param_1 != 0) {
|
|
__aeabi_memmove(param_4,param_1,(int)param_2 - (int)param_1,(int)param_3);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ctype @ 0004f548
|
|
|
|
/* std::ctype<wchar_t>::~ctype() */
|
|
|
|
void __thiscall std::ctype<wchar_t>::~ctype(ctype<wchar_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~ctype @ 0004f552
|
|
|
|
/* std::ctype<wchar_t>::~ctype() */
|
|
|
|
void __thiscall std::ctype<wchar_t>::~ctype(ctype<wchar_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_is @ 0004f574
|
|
|
|
/* std::ctype<wchar_t>::do_is(std::ctype_base::mask, wchar_t) const */
|
|
|
|
undefined4 __thiscall std::ctype<wchar_t>::do_is(undefined4 param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = 0;
|
|
if (param_3 < 0x100) {
|
|
uVar1 = 1;
|
|
if ((*(uint *)(&DAT_00065b4c + param_3 * 4) & param_2) == 0) {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_is @ 0004f594
|
|
|
|
/* std::ctype<wchar_t>::do_is(wchar_t const*, wchar_t const*, std::ctype_base::mask*) const */
|
|
|
|
wchar_t * __thiscall
|
|
std::ctype<wchar_t>::do_is(ctype<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,mask *param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if (param_1 < param_2) {
|
|
do {
|
|
uVar1 = 0;
|
|
if ((uint)*param_1 < 0x100) {
|
|
uVar1 = *(undefined4 *)(&DAT_00065b4c + *param_1 * 4);
|
|
}
|
|
*(undefined4 *)param_3 = uVar1;
|
|
param_3 = (mask *)((int)param_3 + 4);
|
|
param_1 = param_1 + 1;
|
|
} while (param_1 < param_2);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_scan_is @ 0004f5bc
|
|
|
|
/* std::ctype<wchar_t>::do_scan_is(std::ctype_base::mask, wchar_t const*, wchar_t const*) const */
|
|
|
|
uint * __thiscall
|
|
std::ctype<wchar_t>::do_scan_is(undefined4 param_1,uint param_2,uint *param_3,uint *param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = (int)param_4 - (int)param_3 >> 4;
|
|
if (0 < iVar1) {
|
|
iVar1 = iVar1 + 1;
|
|
do {
|
|
if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) {
|
|
return param_3;
|
|
}
|
|
if ((param_3[1] < 0x100) && ((*(uint *)(&DAT_00065b4c + param_3[1] * 4) & param_2) != 0)) {
|
|
return param_3 + 1;
|
|
}
|
|
if ((param_3[2] < 0x100) && ((*(uint *)(&DAT_00065b4c + param_3[2] * 4) & param_2) != 0)) {
|
|
return param_3 + 2;
|
|
}
|
|
if ((param_3[3] < 0x100) && ((*(uint *)(&DAT_00065b4c + param_3[3] * 4) & param_2) != 0)) {
|
|
return param_3 + 3;
|
|
}
|
|
iVar1 = iVar1 + -1;
|
|
param_3 = param_3 + 4;
|
|
} while (1 < iVar1);
|
|
}
|
|
iVar1 = (int)param_4 - (int)param_3 >> 2;
|
|
if (iVar1 != 1) {
|
|
if (iVar1 != 2) {
|
|
if (iVar1 != 3) {
|
|
return param_4;
|
|
}
|
|
if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) {
|
|
return param_3;
|
|
}
|
|
param_3 = param_3 + 1;
|
|
}
|
|
if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) {
|
|
return param_3;
|
|
}
|
|
param_3 = param_3 + 1;
|
|
}
|
|
if ((*param_3 < 0x100) && ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0)) {
|
|
return param_3;
|
|
}
|
|
return param_4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_scan_not @ 0004f6b4
|
|
|
|
/* std::ctype<wchar_t>::do_scan_not(std::ctype_base::mask, wchar_t const*, wchar_t const*) const */
|
|
|
|
uint * __thiscall
|
|
std::ctype<wchar_t>::do_scan_not(undefined4 param_1,uint param_2,uint *param_3,uint *param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = (int)param_4 - (int)param_3 >> 4;
|
|
if (0 < iVar1) {
|
|
iVar1 = iVar1 + 1;
|
|
do {
|
|
if (0xff < *param_3) {
|
|
return param_3;
|
|
}
|
|
if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) == 0) {
|
|
return param_3;
|
|
}
|
|
if (0xff < param_3[1]) {
|
|
return param_3 + 1;
|
|
}
|
|
if ((*(uint *)(&DAT_00065b4c + param_3[1] * 4) & param_2) == 0) {
|
|
return param_3 + 1;
|
|
}
|
|
if (0xff < param_3[2]) {
|
|
return param_3 + 2;
|
|
}
|
|
if ((*(uint *)(&DAT_00065b4c + param_3[2] * 4) & param_2) == 0) {
|
|
return param_3 + 2;
|
|
}
|
|
if (0xff < param_3[3]) {
|
|
return param_3 + 3;
|
|
}
|
|
if ((*(uint *)(&DAT_00065b4c + param_3[3] * 4) & param_2) == 0) {
|
|
return param_3 + 3;
|
|
}
|
|
iVar1 = iVar1 + -1;
|
|
param_3 = param_3 + 4;
|
|
} while (1 < iVar1);
|
|
}
|
|
iVar1 = (int)param_4 - (int)param_3 >> 2;
|
|
if (iVar1 != 1) {
|
|
if (iVar1 != 2) {
|
|
if (iVar1 != 3) {
|
|
return param_4;
|
|
}
|
|
if (0xff < *param_3) {
|
|
return param_3;
|
|
}
|
|
if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) == 0) {
|
|
return param_3;
|
|
}
|
|
param_3 = param_3 + 1;
|
|
}
|
|
if (0xff < *param_3) {
|
|
return param_3;
|
|
}
|
|
if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) == 0) {
|
|
return param_3;
|
|
}
|
|
param_3 = param_3 + 1;
|
|
}
|
|
if (0xff < *param_3) {
|
|
return param_3;
|
|
}
|
|
if ((*(uint *)(&DAT_00065b4c + *param_3 * 4) & param_2) != 0) {
|
|
return param_4;
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_toupper @ 0004f7bc
|
|
|
|
/* std::ctype<wchar_t>::do_toupper(wchar_t) const */
|
|
|
|
wchar_t __thiscall std::ctype<wchar_t>::do_toupper(ctype<wchar_t> *this,wchar_t param_1)
|
|
|
|
{
|
|
if ((uint)param_1 < 0x100) {
|
|
param_1 = (wchar_t)(byte)(&DAT_00065f4c)[param_1];
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_toupper @ 0004f7d0
|
|
|
|
/* std::ctype<wchar_t>::do_toupper(wchar_t*, wchar_t const*) const */
|
|
|
|
wchar_t * __thiscall
|
|
std::ctype<wchar_t>::do_toupper(ctype<wchar_t> *this,wchar_t *param_1,wchar_t *param_2)
|
|
|
|
{
|
|
wchar_t wVar1;
|
|
|
|
if (param_1 < param_2) {
|
|
do {
|
|
wVar1 = *param_1;
|
|
if ((uint)wVar1 < 0x100) {
|
|
wVar1 = (wchar_t)(byte)(&DAT_00065f4c)[wVar1];
|
|
}
|
|
*param_1 = wVar1;
|
|
param_1 = param_1 + 1;
|
|
} while (param_1 < param_2);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_tolower @ 0004f7f0
|
|
|
|
/* std::ctype<wchar_t>::do_tolower(wchar_t) const */
|
|
|
|
wchar_t __thiscall std::ctype<wchar_t>::do_tolower(ctype<wchar_t> *this,wchar_t param_1)
|
|
|
|
{
|
|
if ((uint)param_1 < 0x100) {
|
|
param_1 = (wchar_t)(byte)(&DAT_0006604c)[param_1];
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_tolower @ 0004f804
|
|
|
|
/* std::ctype<wchar_t>::do_tolower(wchar_t*, wchar_t const*) const */
|
|
|
|
wchar_t * __thiscall
|
|
std::ctype<wchar_t>::do_tolower(ctype<wchar_t> *this,wchar_t *param_1,wchar_t *param_2)
|
|
|
|
{
|
|
wchar_t wVar1;
|
|
|
|
if (param_1 < param_2) {
|
|
do {
|
|
wVar1 = *param_1;
|
|
if ((uint)wVar1 < 0x100) {
|
|
wVar1 = (wchar_t)(byte)(&DAT_0006604c)[wVar1];
|
|
}
|
|
*param_1 = wVar1;
|
|
param_1 = param_1 + 1;
|
|
} while (param_1 < param_2);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_widen @ 0004f824
|
|
|
|
/* std::ctype<wchar_t>::do_widen(char) const */
|
|
|
|
int __thiscall std::ctype<wchar_t>::do_widen(ctype<wchar_t> *this,char param_1)
|
|
|
|
{
|
|
return (int)param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_widen @ 0004f828
|
|
|
|
/* std::ctype<wchar_t>::do_widen(char const*, char const*, wchar_t*) const */
|
|
|
|
char * __thiscall
|
|
std::ctype<wchar_t>::do_widen(ctype<wchar_t> *this,char *param_1,char *param_2,wchar_t *param_3)
|
|
|
|
{
|
|
if (param_1 != param_2) {
|
|
do {
|
|
*param_3 = (uint)(byte)*param_1;
|
|
param_3 = param_3 + 1;
|
|
param_1 = (char *)((byte *)param_1 + 1);
|
|
} while (param_2 != param_1);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_narrow @ 0004f83a
|
|
|
|
/* std::ctype<wchar_t>::do_narrow(wchar_t, char) const */
|
|
|
|
wchar_t __thiscall std::ctype<wchar_t>::do_narrow(ctype<wchar_t> *this,wchar_t param_1,char param_2)
|
|
|
|
{
|
|
wchar_t wVar1;
|
|
|
|
wVar1 = (int)param_2;
|
|
if ((param_1 & 0xffU) == param_1) {
|
|
wVar1 = param_1 & 0xffU;
|
|
}
|
|
return wVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_narrow @ 0004f848
|
|
|
|
/* std::ctype<wchar_t>::do_narrow(wchar_t const*, wchar_t const*, char, char*) const */
|
|
|
|
wchar_t * __thiscall
|
|
std::ctype<wchar_t>::do_narrow
|
|
(ctype<wchar_t> *this,wchar_t *param_1,wchar_t *param_2,char param_3,char *param_4)
|
|
|
|
{
|
|
char cVar1;
|
|
wchar_t wVar2;
|
|
|
|
if (param_1 != param_2) {
|
|
do {
|
|
wVar2 = *param_1;
|
|
param_1 = param_1 + 1;
|
|
cVar1 = param_3;
|
|
if ((wVar2 & 0xffU) == wVar2) {
|
|
cVar1 = (char)wVar2;
|
|
}
|
|
*param_4 = cVar1;
|
|
param_4 = param_4 + 1;
|
|
} while (param_2 != param_1);
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct @ 0004f870
|
|
|
|
/* std::moneypunct<char, true>::moneypunct(unsigned int) */
|
|
|
|
moneypunct<char,true> * __thiscall
|
|
std::moneypunct<char,true>::moneypunct(moneypunct<char,true> *this,uint param_1)
|
|
|
|
{
|
|
*(uint *)(this + 4) = (uint)(param_1 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__moneypunct_0006a0a8;
|
|
this[0xc] = (moneypunct<char,true>)0x2;
|
|
this[0xd] = (moneypunct<char,true>)0x3;
|
|
this[0xf] = (moneypunct<char,true>)0x4;
|
|
this[0xe] = (moneypunct<char,true>)0x0;
|
|
this[0x10] = (moneypunct<char,true>)0x2;
|
|
this[0x12] = (moneypunct<char,true>)0x0;
|
|
this[0x11] = (moneypunct<char,true>)0x3;
|
|
this[0x13] = (moneypunct<char,true>)0x4;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct @ 0004f8b4
|
|
|
|
/* std::moneypunct<char, true>::~moneypunct() */
|
|
|
|
void __thiscall std::moneypunct<char,true>::~moneypunct(moneypunct<char,true> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct @ 0004f8be
|
|
|
|
/* std::moneypunct<char, true>::~moneypunct() */
|
|
|
|
void __thiscall std::moneypunct<char,true>::~moneypunct(moneypunct<char,true> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004f8de
|
|
|
|
/* std::moneypunct<char, true>::do_decimal_point() const */
|
|
|
|
undefined4 std::moneypunct<char,true>::do_decimal_point(void)
|
|
|
|
{
|
|
return 0x20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004f8e2
|
|
|
|
/* std::moneypunct<char, true>::do_thousands_sep() const */
|
|
|
|
undefined4 std::moneypunct<char,true>::do_thousands_sep(void)
|
|
|
|
{
|
|
return 0x20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004f8e8
|
|
|
|
/* std::moneypunct<char, true>::do_grouping() const */
|
|
|
|
void __thiscall std::moneypunct<char,true>::do_grouping(moneypunct<char,true> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_curr_symbol @ 0004f904
|
|
|
|
/* std::moneypunct<char, true>::do_curr_symbol() const */
|
|
|
|
void __thiscall std::moneypunct<char,true>::do_curr_symbol(moneypunct<char,true> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_positive_sign @ 0004f920
|
|
|
|
/* std::moneypunct<char, true>::do_positive_sign() const */
|
|
|
|
void __thiscall std::moneypunct<char,true>::do_positive_sign(moneypunct<char,true> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_negative_sign @ 0004f93c
|
|
|
|
/* std::moneypunct<char, true>::do_negative_sign() const */
|
|
|
|
void __thiscall std::moneypunct<char,true>::do_negative_sign(moneypunct<char,true> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_pos_format @ 0004f958
|
|
|
|
/* std::moneypunct<char, true>::do_pos_format() const */
|
|
|
|
undefined4 __thiscall std::moneypunct<char,true>::do_pos_format(moneypunct<char,true> *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0xc);
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_neg_format @ 0004f96e
|
|
|
|
/* std::moneypunct<char, true>::do_neg_format() const */
|
|
|
|
undefined4 __thiscall std::moneypunct<char,true>::do_neg_format(moneypunct<char,true> *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0x10);
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_frac_digits @ 0004f984
|
|
|
|
/* std::moneypunct<char, true>::do_frac_digits() const */
|
|
|
|
undefined4 std::moneypunct<char,true>::do_frac_digits(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct @ 0004f988
|
|
|
|
/* std::moneypunct<char, false>::moneypunct(unsigned int) */
|
|
|
|
moneypunct<char,false> * __thiscall
|
|
std::moneypunct<char,false>::moneypunct(moneypunct<char,false> *this,uint param_1)
|
|
|
|
{
|
|
*(uint *)(this + 4) = (uint)(param_1 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__moneypunct_0006a0dc;
|
|
this[0xc] = (moneypunct<char,false>)0x2;
|
|
this[0xd] = (moneypunct<char,false>)0x3;
|
|
this[0xf] = (moneypunct<char,false>)0x4;
|
|
this[0xe] = (moneypunct<char,false>)0x0;
|
|
this[0x10] = (moneypunct<char,false>)0x2;
|
|
this[0x12] = (moneypunct<char,false>)0x0;
|
|
this[0x11] = (moneypunct<char,false>)0x3;
|
|
this[0x13] = (moneypunct<char,false>)0x4;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct @ 0004f9cc
|
|
|
|
/* std::moneypunct<char, false>::~moneypunct() */
|
|
|
|
void __thiscall std::moneypunct<char,false>::~moneypunct(moneypunct<char,false> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct @ 0004f9d6
|
|
|
|
/* std::moneypunct<char, false>::~moneypunct() */
|
|
|
|
void __thiscall std::moneypunct<char,false>::~moneypunct(moneypunct<char,false> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004f9f6
|
|
|
|
/* std::moneypunct<char, false>::do_decimal_point() const */
|
|
|
|
undefined4 std::moneypunct<char,false>::do_decimal_point(void)
|
|
|
|
{
|
|
return 0x20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004f9fa
|
|
|
|
/* std::moneypunct<char, false>::do_thousands_sep() const */
|
|
|
|
undefined4 std::moneypunct<char,false>::do_thousands_sep(void)
|
|
|
|
{
|
|
return 0x20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004fa00
|
|
|
|
/* std::moneypunct<char, false>::do_grouping() const */
|
|
|
|
void __thiscall std::moneypunct<char,false>::do_grouping(moneypunct<char,false> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_curr_symbol @ 0004fa1c
|
|
|
|
/* std::moneypunct<char, false>::do_curr_symbol() const */
|
|
|
|
void __thiscall std::moneypunct<char,false>::do_curr_symbol(moneypunct<char,false> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_positive_sign @ 0004fa38
|
|
|
|
/* std::moneypunct<char, false>::do_positive_sign() const */
|
|
|
|
void __thiscall std::moneypunct<char,false>::do_positive_sign(moneypunct<char,false> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_negative_sign @ 0004fa54
|
|
|
|
/* std::moneypunct<char, false>::do_negative_sign() const */
|
|
|
|
void __thiscall std::moneypunct<char,false>::do_negative_sign(moneypunct<char,false> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_pos_format @ 0004fa70
|
|
|
|
/* std::moneypunct<char, false>::do_pos_format() const */
|
|
|
|
undefined4 __thiscall std::moneypunct<char,false>::do_pos_format(moneypunct<char,false> *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0xc);
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_neg_format @ 0004fa86
|
|
|
|
/* std::moneypunct<char, false>::do_neg_format() const */
|
|
|
|
undefined4 __thiscall std::moneypunct<char,false>::do_neg_format(moneypunct<char,false> *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0x10);
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_frac_digits @ 0004fa9c
|
|
|
|
/* std::moneypunct<char, false>::do_frac_digits() const */
|
|
|
|
undefined4 std::moneypunct<char,false>::do_frac_digits(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct @ 0004faa0
|
|
|
|
/* std::moneypunct<wchar_t, true>::moneypunct(unsigned int) */
|
|
|
|
moneypunct<wchar_t,true> * __thiscall
|
|
std::moneypunct<wchar_t,true>::moneypunct(moneypunct<wchar_t,true> *this,uint param_1)
|
|
|
|
{
|
|
*(uint *)(this + 4) = (uint)(param_1 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__moneypunct_0006a110;
|
|
this[0xc] = (moneypunct<wchar_t,true>)0x2;
|
|
this[0xd] = (moneypunct<wchar_t,true>)0x3;
|
|
this[0xf] = (moneypunct<wchar_t,true>)0x4;
|
|
this[0xe] = (moneypunct<wchar_t,true>)0x0;
|
|
this[0x10] = (moneypunct<wchar_t,true>)0x2;
|
|
this[0x12] = (moneypunct<wchar_t,true>)0x0;
|
|
this[0x11] = (moneypunct<wchar_t,true>)0x3;
|
|
this[0x13] = (moneypunct<wchar_t,true>)0x4;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct @ 0004fae4
|
|
|
|
/* std::moneypunct<wchar_t, true>::~moneypunct() */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,true>::~moneypunct(moneypunct<wchar_t,true> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct @ 0004faee
|
|
|
|
/* std::moneypunct<wchar_t, true>::~moneypunct() */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,true>::~moneypunct(moneypunct<wchar_t,true> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004fb0e
|
|
|
|
/* std::moneypunct<wchar_t, true>::do_decimal_point() const */
|
|
|
|
undefined4 std::moneypunct<wchar_t,true>::do_decimal_point(void)
|
|
|
|
{
|
|
return 0x20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004fb12
|
|
|
|
/* std::moneypunct<wchar_t, true>::do_thousands_sep() const */
|
|
|
|
undefined4 std::moneypunct<wchar_t,true>::do_thousands_sep(void)
|
|
|
|
{
|
|
return 0x20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004fb18
|
|
|
|
/* std::moneypunct<wchar_t, true>::do_grouping() const */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,true>::do_grouping(moneypunct<wchar_t,true> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_curr_symbol @ 0004fb34
|
|
|
|
/* std::moneypunct<wchar_t, true>::do_curr_symbol() const */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,true>::do_curr_symbol(moneypunct<wchar_t,true> *this)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
*(moneypunct<wchar_t,true> **)(this + 0x40) = this;
|
|
*(moneypunct<wchar_t,true> **)(this + 0x44) = this;
|
|
sVar1 = wcslen(L"");
|
|
FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_positive_sign @ 0004fb8c
|
|
|
|
/* std::moneypunct<wchar_t, true>::do_positive_sign() const */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,true>::do_positive_sign(moneypunct<wchar_t,true> *this)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
*(moneypunct<wchar_t,true> **)(this + 0x40) = this;
|
|
*(moneypunct<wchar_t,true> **)(this + 0x44) = this;
|
|
sVar1 = wcslen(L"");
|
|
FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_negative_sign @ 0004fbe4
|
|
|
|
/* std::moneypunct<wchar_t, true>::do_negative_sign() const */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,true>::do_negative_sign(moneypunct<wchar_t,true> *this)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
*(moneypunct<wchar_t,true> **)(this + 0x40) = this;
|
|
*(moneypunct<wchar_t,true> **)(this + 0x44) = this;
|
|
sVar1 = wcslen(L"");
|
|
FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_frac_digits @ 0004fc3c
|
|
|
|
/* std::moneypunct<wchar_t, true>::do_frac_digits() const */
|
|
|
|
undefined4 std::moneypunct<wchar_t,true>::do_frac_digits(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_pos_format @ 0004fc40
|
|
|
|
/* std::moneypunct<wchar_t, true>::do_pos_format() const */
|
|
|
|
undefined4 __thiscall std::moneypunct<wchar_t,true>::do_pos_format(moneypunct<wchar_t,true> *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0xc);
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_neg_format @ 0004fc56
|
|
|
|
/* std::moneypunct<wchar_t, true>::do_neg_format() const */
|
|
|
|
undefined4 __thiscall std::moneypunct<wchar_t,true>::do_neg_format(moneypunct<wchar_t,true> *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0x10);
|
|
}
|
|
|
|
|
|
|
|
### FUNC moneypunct @ 0004fc6c
|
|
|
|
/* std::moneypunct<wchar_t, false>::moneypunct(unsigned int) */
|
|
|
|
moneypunct<wchar_t,false> * __thiscall
|
|
std::moneypunct<wchar_t,false>::moneypunct(moneypunct<wchar_t,false> *this,uint param_1)
|
|
|
|
{
|
|
*(uint *)(this + 4) = (uint)(param_1 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__moneypunct_0006a144;
|
|
this[0xc] = (moneypunct<wchar_t,false>)0x2;
|
|
this[0xd] = (moneypunct<wchar_t,false>)0x3;
|
|
this[0xf] = (moneypunct<wchar_t,false>)0x4;
|
|
this[0xe] = (moneypunct<wchar_t,false>)0x0;
|
|
this[0x10] = (moneypunct<wchar_t,false>)0x2;
|
|
this[0x12] = (moneypunct<wchar_t,false>)0x0;
|
|
this[0x11] = (moneypunct<wchar_t,false>)0x3;
|
|
this[0x13] = (moneypunct<wchar_t,false>)0x4;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct @ 0004fcb0
|
|
|
|
/* std::moneypunct<wchar_t, false>::~moneypunct() */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,false>::~moneypunct(moneypunct<wchar_t,false> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~moneypunct @ 0004fcba
|
|
|
|
/* std::moneypunct<wchar_t, false>::~moneypunct() */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,false>::~moneypunct(moneypunct<wchar_t,false> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 0004fcda
|
|
|
|
/* std::moneypunct<wchar_t, false>::do_decimal_point() const */
|
|
|
|
undefined4 std::moneypunct<wchar_t,false>::do_decimal_point(void)
|
|
|
|
{
|
|
return 0x20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 0004fcde
|
|
|
|
/* std::moneypunct<wchar_t, false>::do_thousands_sep() const */
|
|
|
|
undefined4 std::moneypunct<wchar_t,false>::do_thousands_sep(void)
|
|
|
|
{
|
|
return 0x20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 0004fce4
|
|
|
|
/* std::moneypunct<wchar_t, false>::do_grouping() const */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,false>::do_grouping(moneypunct<wchar_t,false> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00066173,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_curr_symbol @ 0004fd00
|
|
|
|
/* std::moneypunct<wchar_t, false>::do_curr_symbol() const */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,false>::do_curr_symbol(moneypunct<wchar_t,false> *this)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
*(moneypunct<wchar_t,false> **)(this + 0x40) = this;
|
|
*(moneypunct<wchar_t,false> **)(this + 0x44) = this;
|
|
sVar1 = wcslen(L"");
|
|
FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_positive_sign @ 0004fd58
|
|
|
|
/* std::moneypunct<wchar_t, false>::do_positive_sign() const */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,false>::do_positive_sign(moneypunct<wchar_t,false> *this)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
*(moneypunct<wchar_t,false> **)(this + 0x40) = this;
|
|
*(moneypunct<wchar_t,false> **)(this + 0x44) = this;
|
|
sVar1 = wcslen(L"");
|
|
FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_negative_sign @ 0004fdb0
|
|
|
|
/* std::moneypunct<wchar_t, false>::do_negative_sign() const */
|
|
|
|
void __thiscall std::moneypunct<wchar_t,false>::do_negative_sign(moneypunct<wchar_t,false> *this)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
*(moneypunct<wchar_t,false> **)(this + 0x40) = this;
|
|
*(moneypunct<wchar_t,false> **)(this + 0x44) = this;
|
|
sVar1 = wcslen(L"");
|
|
FUN_0004fe38(this,&DAT_00066174,&DAT_00066174 + sVar1 * 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_frac_digits @ 0004fe08
|
|
|
|
/* std::moneypunct<wchar_t, false>::do_frac_digits() const */
|
|
|
|
undefined4 std::moneypunct<wchar_t,false>::do_frac_digits(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_pos_format @ 0004fe0c
|
|
|
|
/* std::moneypunct<wchar_t, false>::do_pos_format() const */
|
|
|
|
undefined4 __thiscall std::moneypunct<wchar_t,false>::do_pos_format(moneypunct<wchar_t,false> *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0xc);
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_neg_format @ 0004fe22
|
|
|
|
/* std::moneypunct<wchar_t, false>::do_neg_format() const */
|
|
|
|
undefined4 __thiscall std::moneypunct<wchar_t,false>::do_neg_format(moneypunct<wchar_t,false> *this)
|
|
|
|
{
|
|
return *(undefined4 *)(this + 0x10);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0004fe38 @ 0004fe38
|
|
|
|
void FUN_0004fe38(int *param_1,int param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 *puVar2;
|
|
undefined4 uVar3;
|
|
uint uVar4;
|
|
uint local_18;
|
|
|
|
uVar4 = param_3 - param_2 >> 2;
|
|
uVar1 = uVar4 + 1;
|
|
if (0x3ffffffe < uVar4) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
if (uVar1 < 0x11) {
|
|
puVar2 = (undefined4 *)param_1[0x11];
|
|
}
|
|
else {
|
|
if (0x3fffffff < uVar1) {
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
uVar1 = uVar1 * 4;
|
|
local_18 = uVar1;
|
|
if (uVar1 < 0x81) {
|
|
puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar1 = local_18;
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)operator_new(uVar1);
|
|
}
|
|
param_1[0x10] = (int)puVar2;
|
|
param_1[0x11] = (int)puVar2;
|
|
*param_1 = (int)puVar2 + (uVar1 & 0xfffffffc);
|
|
}
|
|
if (param_3 != param_2) {
|
|
__aeabi_memcpy(puVar2,param_2);
|
|
puVar2 = (undefined4 *)((int)puVar2 + (param_3 - param_2));
|
|
}
|
|
param_1[0x10] = (int)puVar2;
|
|
*puVar2 = 0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __valid_grouping @ 0004fee0
|
|
|
|
/* std::priv::__valid_grouping(char const*, char const*, char const*, char const*) */
|
|
|
|
undefined4 std::priv::__valid_grouping(char *param_1,char *param_2,char *param_3,char *param_4)
|
|
|
|
{
|
|
byte bVar1;
|
|
byte bVar2;
|
|
char *pcVar3;
|
|
undefined4 uVar4;
|
|
|
|
uVar4 = 1;
|
|
if ((param_1 != param_2) && (param_3 != param_4)) {
|
|
bVar2 = param_2[-1];
|
|
bVar1 = *param_3;
|
|
for (pcVar3 = param_2 + -1; pcVar3 != param_1; pcVar3 = pcVar3 + -1) {
|
|
if (bVar2 != bVar1) {
|
|
return 0;
|
|
}
|
|
if (param_3 != param_4 + -1) {
|
|
param_3 = (char *)((byte *)param_3 + 1);
|
|
}
|
|
bVar1 = *param_3;
|
|
bVar2 = pcVar3[-1];
|
|
}
|
|
uVar4 = 1;
|
|
if (bVar1 < bVar2) {
|
|
uVar4 = 0;
|
|
}
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __digit_val_table @ 0004ff38
|
|
|
|
/* std::priv::__digit_val_table(unsigned int) */
|
|
|
|
undefined1 std::priv::__digit_val_table(uint param_1)
|
|
|
|
{
|
|
return (&DAT_00066206)[param_1];
|
|
}
|
|
|
|
|
|
|
|
### FUNC __narrow_atoms @ 0004ff44
|
|
|
|
/* std::priv::__narrow_atoms() */
|
|
|
|
char * std::priv::__narrow_atoms(void)
|
|
|
|
{
|
|
return "+-0xX";
|
|
}
|
|
|
|
|
|
|
|
### FUNC __get_fdigit @ 0004ff50
|
|
|
|
/* std::priv::__get_fdigit(wchar_t&, wchar_t const*) */
|
|
|
|
undefined4 std::priv::__get_fdigit(wchar_t *param_1,wchar_t *param_2)
|
|
|
|
{
|
|
wchar_t wVar1;
|
|
wchar_t wVar2;
|
|
|
|
wVar1 = *param_1;
|
|
wVar2 = L'0';
|
|
if ((((((*param_2 != wVar1) && (wVar2 = L'1', param_2[1] != wVar1)) &&
|
|
(wVar2 = L'2', param_2[2] != wVar1)) &&
|
|
((wVar2 = L'3', param_2[3] != wVar1 && (wVar2 = L'4', param_2[4] != wVar1)))) &&
|
|
((wVar2 = L'5', param_2[5] != wVar1 &&
|
|
((wVar2 = L'6', param_2[6] != wVar1 && (wVar2 = L'7', param_2[7] != wVar1)))))) &&
|
|
((wVar2 = L'8', param_2[8] != wVar1 && (wVar2 = L'9', param_2[9] != wVar1)))) {
|
|
return 0;
|
|
}
|
|
*param_1 = wVar2;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __get_fdigit_or_sep @ 0004ffb0
|
|
|
|
/* std::priv::__get_fdigit_or_sep(wchar_t&, wchar_t, wchar_t const*) */
|
|
|
|
undefined4 std::priv::__get_fdigit_or_sep(wchar_t *param_1,wchar_t param_2,wchar_t *param_3)
|
|
|
|
{
|
|
wchar_t wVar1;
|
|
wchar_t wVar2;
|
|
|
|
wVar1 = *param_1;
|
|
wVar2 = L',';
|
|
if ((((((wVar1 != param_2) && (wVar2 = L'0', *param_3 != wVar1)) &&
|
|
(wVar2 = L'1', param_3[1] != wVar1)) &&
|
|
((wVar2 = L'2', param_3[2] != wVar1 && (wVar2 = L'3', param_3[3] != wVar1)))) &&
|
|
((wVar2 = L'4', param_3[4] != wVar1 &&
|
|
((wVar2 = L'5', param_3[5] != wVar1 && (wVar2 = L'6', param_3[6] != wVar1)))))) &&
|
|
((wVar2 = L'7', param_3[7] != wVar1 &&
|
|
((wVar2 = L'8', param_3[8] != wVar1 && (wVar2 = L'9', param_3[9] != wVar1)))))) {
|
|
return 0;
|
|
}
|
|
*param_1 = wVar2;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __hex_char_table_lo @ 00050018
|
|
|
|
/* std::priv::__hex_char_table_lo() */
|
|
|
|
char * std::priv::__hex_char_table_lo(void)
|
|
|
|
{
|
|
return "0123456789abcdefx";
|
|
}
|
|
|
|
|
|
|
|
### FUNC __hex_char_table_hi @ 00050024
|
|
|
|
/* std::priv::__hex_char_table_hi() */
|
|
|
|
char * std::priv::__hex_char_table_hi(void)
|
|
|
|
{
|
|
return "0123456789ABCDEFX";
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00050030 @ 00050030
|
|
|
|
int FUN_00050030(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = FUN_00041ecc(&stack0xfffffff0);
|
|
iVar2 = (int)&stack0xfffffff0 - iVar1;
|
|
if (iVar2 != 0) {
|
|
__aeabi_memmove(param_1,iVar1,iVar2);
|
|
param_1 = param_1 + iVar2;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00050058 @ 00050058
|
|
|
|
byte * FUN_00050058(byte *param_1,byte *param_2,int param_3,byte param_4,uint param_5,uint param_6,
|
|
int param_7)
|
|
|
|
{
|
|
byte *pbVar1;
|
|
byte *pbVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
|
|
pbVar1 = (byte *)0x0;
|
|
if (param_1 != param_2) {
|
|
uVar5 = 0;
|
|
uVar6 = (uint)(*param_1 == param_5 || *param_1 == param_6);
|
|
pbVar2 = param_1 + 1;
|
|
if (uVar6 == 0) {
|
|
pbVar2 = param_1;
|
|
}
|
|
uVar4 = 0;
|
|
pbVar1 = param_2;
|
|
while( true ) {
|
|
if (uVar4 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) {
|
|
uVar5 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar4);
|
|
uVar4 = uVar4 + 1;
|
|
}
|
|
if (((uVar5 == 0) || ((int)param_2 - (int)(pbVar2 + param_7) <= (int)uVar5)) ||
|
|
(uVar5 == 0xff)) break;
|
|
param_2 = param_2 + -uVar5;
|
|
iVar3 = (int)(pbVar1 + 1) - (int)param_2;
|
|
if (0 < iVar3) {
|
|
__aeabi_memmove(pbVar1 + (2 - iVar3),param_2);
|
|
}
|
|
*param_2 = param_4;
|
|
pbVar1 = pbVar1 + 1;
|
|
}
|
|
pbVar1 = pbVar1 + ((uVar6 + param_7) - (int)(pbVar2 + param_7));
|
|
}
|
|
return pbVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000500f4 @ 000500f4
|
|
|
|
void FUN_000500f4(byte *param_1,uint param_2,int param_3,undefined4 param_4,uint param_5,
|
|
uint param_6,int param_7)
|
|
|
|
{
|
|
byte bVar1;
|
|
byte *pbVar2;
|
|
byte *pbVar3;
|
|
byte *pbVar4;
|
|
byte *pbVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
byte *pbVar12;
|
|
uint local_30;
|
|
|
|
pbVar4 = param_1 + 0x118;
|
|
pbVar2 = *(byte **)(param_1 + 0x118);
|
|
if (param_2 <= (uint)(*(int *)(param_1 + 0x10) - (int)pbVar2)) {
|
|
bVar1 = *pbVar2;
|
|
uVar8 = 0;
|
|
pbVar2 = pbVar2 + param_2;
|
|
uVar9 = uVar8;
|
|
while( true ) {
|
|
if (uVar8 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) {
|
|
uVar9 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar8);
|
|
uVar8 = uVar8 + 1;
|
|
}
|
|
if (uVar9 == 0) break;
|
|
pbVar3 = *(byte **)pbVar4;
|
|
if (uVar9 == 0xff) {
|
|
return;
|
|
}
|
|
if ((int)(pbVar2 + ((-param_7 - (uint)(bVar1 == param_5 || bVar1 == param_6)) - (int)pbVar3))
|
|
<= (int)uVar9) {
|
|
return;
|
|
}
|
|
pbVar2 = pbVar2 + -uVar9;
|
|
pbVar12 = *(byte **)(param_1 + 0x10);
|
|
if (pbVar12 == pbVar2) {
|
|
pbVar5 = param_1 + 0x10;
|
|
if (pbVar3 != param_1) {
|
|
pbVar5 = *(byte **)param_1;
|
|
}
|
|
if ((int)pbVar5 - (int)pbVar12 == 1) {
|
|
uVar6 = (int)pbVar12 - (int)pbVar3;
|
|
if (uVar6 == 0xfffffffe) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar10 = uVar6;
|
|
if (uVar6 < 2) {
|
|
uVar10 = 1;
|
|
}
|
|
uVar11 = uVar6 + uVar10 + 1;
|
|
local_30 = 0xfffffffe;
|
|
uVar7 = 0xfffffffe;
|
|
if (uVar6 <= uVar11) {
|
|
uVar7 = uVar11;
|
|
}
|
|
if (uVar6 + uVar10 != -2) {
|
|
local_30 = uVar7;
|
|
}
|
|
pbVar5 = param_1 + 0x14;
|
|
if (0x80 < local_30 >> 1) {
|
|
pbVar5 = (byte *)operator_new(local_30);
|
|
pbVar12 = *(byte **)(param_1 + 0x10);
|
|
pbVar3 = *(byte **)pbVar4;
|
|
}
|
|
pbVar2 = pbVar5;
|
|
if (0 < (int)pbVar12 - (int)pbVar3) {
|
|
pbVar12 = pbVar12 + (1 - (int)pbVar3);
|
|
do {
|
|
*pbVar2 = *pbVar3;
|
|
pbVar12 = pbVar12 + -1;
|
|
pbVar2 = pbVar2 + 1;
|
|
pbVar3 = pbVar3 + 1;
|
|
} while (1 < (int)pbVar12);
|
|
}
|
|
*pbVar2 = 0;
|
|
pbVar3 = *(byte **)pbVar4;
|
|
if (((pbVar3 != param_1) && (pbVar3 != (byte *)0x0)) && (param_1 + 0x14 != pbVar3)) {
|
|
if ((uint)(*(int *)param_1 - (int)pbVar3) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pbVar3,*(int *)param_1 - (int)pbVar3);
|
|
}
|
|
else {
|
|
operator_delete(pbVar3);
|
|
}
|
|
}
|
|
*(byte **)(param_1 + 0x10) = pbVar2;
|
|
*(byte **)param_1 = pbVar5 + local_30;
|
|
*(byte **)pbVar4 = pbVar5;
|
|
}
|
|
pbVar2[1] = 0;
|
|
**(undefined1 **)(param_1 + 0x10) = (char)param_4;
|
|
pbVar2 = *(byte **)(param_1 + 0x10);
|
|
*(byte **)(param_1 + 0x10) = pbVar2 + 1;
|
|
}
|
|
else {
|
|
pbVar2 = (byte *)FUN_00050418(param_1,pbVar2,param_4);
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00050274 @ 00050274
|
|
|
|
int FUN_00050274(int *param_1,int *param_2,int param_3,int param_4,int param_5,int param_6,
|
|
int param_7)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
|
|
iVar2 = 0;
|
|
if (param_1 != param_2) {
|
|
uVar5 = 0;
|
|
uVar6 = (uint)(*param_1 == param_5 || *param_1 == param_6);
|
|
piVar3 = param_1 + 1;
|
|
if (uVar6 == 0) {
|
|
piVar3 = param_1;
|
|
}
|
|
uVar4 = 0;
|
|
piVar1 = param_2;
|
|
while( true ) {
|
|
if (uVar4 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) {
|
|
uVar5 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar4);
|
|
uVar4 = uVar4 + 1;
|
|
}
|
|
if (((uVar5 == 0) || ((int)param_2 - (int)(piVar3 + param_7) >> 2 <= (int)uVar5)) ||
|
|
(uVar5 == 0xff)) break;
|
|
param_2 = param_2 + -uVar5;
|
|
iVar2 = (int)(piVar1 + 1) - (int)param_2;
|
|
if (0 < iVar2) {
|
|
__aeabi_memmove((int)piVar1 + (8 - iVar2),param_2);
|
|
}
|
|
*param_2 = param_4;
|
|
piVar1 = piVar1 + 1;
|
|
}
|
|
iVar2 = uVar6 + param_7 + ((int)piVar1 - (int)(piVar3 + param_7) >> 2);
|
|
}
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005031c @ 0005031c
|
|
|
|
void FUN_0005031c(int *param_1,uint param_2,int param_3,int param_4,int param_5,int param_6,
|
|
int param_7)
|
|
|
|
{
|
|
int *piVar1;
|
|
int *piVar2;
|
|
uint uVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
|
|
piVar1 = (int *)param_1[0x112];
|
|
if (param_2 <= (uint)(param_1[0x10] - (int)piVar1 >> 2)) {
|
|
iVar8 = *piVar1;
|
|
uVar7 = 0;
|
|
piVar1 = piVar1 + param_2;
|
|
uVar9 = 0;
|
|
while( true ) {
|
|
if (uVar9 < (uint)(*(int *)(param_3 + 0x10) - *(int *)(param_3 + 0x14))) {
|
|
uVar7 = (uint)*(byte *)(*(int *)(param_3 + 0x14) + uVar9);
|
|
uVar9 = uVar9 + 1;
|
|
}
|
|
if (uVar7 == 0) break;
|
|
piVar2 = (int *)param_1[0x112];
|
|
if (uVar7 == 0xff) {
|
|
return;
|
|
}
|
|
if ((int)((-param_7 - (uint)(iVar8 == param_5 || iVar8 == param_6)) +
|
|
((int)piVar1 - (int)piVar2 >> 2)) <= (int)uVar7) {
|
|
return;
|
|
}
|
|
piVar1 = piVar1 + -uVar7;
|
|
piVar4 = (int *)param_1[0x10];
|
|
if (piVar4 == piVar1) {
|
|
if (piVar2 == param_1) {
|
|
if ((int)piVar4 - (int)param_1 >> 2 == 0xf) goto LAB_000503d4;
|
|
}
|
|
else if (*param_1 - (int)piVar4 >> 2 == 1) {
|
|
LAB_000503d4:
|
|
uVar3 = (int)piVar4 - (int)piVar2 >> 2;
|
|
uVar5 = uVar3;
|
|
if (uVar3 < 2) {
|
|
uVar5 = 1;
|
|
}
|
|
uVar6 = uVar3 + uVar5 + 1;
|
|
uVar5 = 0x3ffffffe;
|
|
if (uVar3 <= uVar6) {
|
|
uVar5 = uVar6;
|
|
}
|
|
uVar3 = 0x3ffffffe;
|
|
if (uVar6 < 0x3fffffff) {
|
|
uVar3 = uVar5;
|
|
}
|
|
FUN_000506a4(param_1,uVar3);
|
|
piVar1 = (int *)param_1[0x10];
|
|
}
|
|
*piVar1 = param_4;
|
|
piVar1[1] = 0;
|
|
param_1[0x10] = (int)(piVar1 + 1);
|
|
}
|
|
else {
|
|
piVar1 = (int *)FUN_00050548(param_1,piVar1,param_4);
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00050418 @ 00050418
|
|
|
|
int * FUN_00050418(int *param_1,int *param_2,undefined1 param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
undefined1 *puVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
int *piVar9;
|
|
int *piVar10;
|
|
int *local_1c;
|
|
|
|
piVar9 = (int *)param_1[0x46];
|
|
piVar1 = param_1 + 0x46;
|
|
if (piVar9 == param_1) {
|
|
iVar3 = param_1[4];
|
|
uVar6 = (int)param_1 + (0x10 - iVar3);
|
|
}
|
|
else {
|
|
iVar3 = param_1[4];
|
|
uVar6 = *param_1 - iVar3;
|
|
}
|
|
if (uVar6 < 2) {
|
|
local_1c = param_1 + 4;
|
|
uVar6 = iVar3 - (int)piVar9;
|
|
if (uVar6 == 0xfffffffe) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar7 = uVar6;
|
|
if (uVar6 < 2) {
|
|
uVar7 = 1;
|
|
}
|
|
uVar8 = uVar6 + uVar7 + 1;
|
|
uVar4 = 0xfffffffe;
|
|
if (uVar6 <= uVar8) {
|
|
uVar4 = uVar8;
|
|
}
|
|
uVar8 = 0xfffffffe;
|
|
if (uVar6 + uVar7 != -2) {
|
|
uVar8 = uVar4;
|
|
}
|
|
if (uVar8 >> 1 < 0x81) {
|
|
piVar2 = param_1 + 5;
|
|
}
|
|
else {
|
|
piVar2 = (int *)operator_new(uVar8);
|
|
piVar9 = (int *)*piVar1;
|
|
}
|
|
piVar10 = piVar2;
|
|
if (0 < (int)param_2 - (int)piVar9) {
|
|
puVar5 = (undefined1 *)((int)param_2 + (1 - (int)piVar9));
|
|
do {
|
|
*(char *)piVar10 = (char)*piVar9;
|
|
puVar5 = puVar5 + -1;
|
|
piVar10 = (int *)((int)piVar10 + 1);
|
|
piVar9 = (int *)((int)piVar9 + 1);
|
|
} while (1 < (int)puVar5);
|
|
}
|
|
*(undefined1 *)piVar10 = param_3;
|
|
puVar5 = (undefined1 *)((int)piVar10 + 1);
|
|
if (0 < *local_1c - (int)param_2) {
|
|
iVar3 = (*local_1c + 1) - (int)param_2;
|
|
do {
|
|
*puVar5 = (char)*param_2;
|
|
iVar3 = iVar3 + -1;
|
|
puVar5 = puVar5 + 1;
|
|
param_2 = (int *)((int)param_2 + 1);
|
|
} while (1 < iVar3);
|
|
}
|
|
*puVar5 = 0;
|
|
piVar9 = (int *)*piVar1;
|
|
if (((piVar9 != param_1) && (piVar9 != (int *)0x0)) && (param_1 + 5 != piVar9)) {
|
|
if ((uint)(*param_1 - (int)piVar9) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar9,*param_1 - (int)piVar9);
|
|
}
|
|
else {
|
|
operator_delete(piVar9);
|
|
}
|
|
}
|
|
param_1[4] = (int)puVar5;
|
|
*param_1 = (int)((int)piVar2 + uVar8);
|
|
*piVar1 = (int)piVar2;
|
|
}
|
|
else {
|
|
local_1c = param_1 + 4;
|
|
*(undefined1 *)(iVar3 + 1) = 0;
|
|
if ((int *)*local_1c != param_2) {
|
|
__aeabi_memmove((undefined1 *)((int)param_2 + 1),param_2);
|
|
}
|
|
*(undefined1 *)param_2 = param_3;
|
|
*local_1c = *local_1c + 1;
|
|
piVar10 = param_2;
|
|
}
|
|
return piVar10;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00050548 @ 00050548
|
|
|
|
wchar_t * FUN_00050548(wchar_t *param_1,wchar_t *param_2,wchar_t param_3)
|
|
|
|
{
|
|
wchar_t *pwVar1;
|
|
wchar_t *pwVar2;
|
|
undefined4 uVar3;
|
|
wchar_t wVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
wchar_t *pwVar8;
|
|
wchar_t *pwVar9;
|
|
uint uVar10;
|
|
wchar_t *pwVar11;
|
|
uint local_18;
|
|
|
|
pwVar1 = (wchar_t *)param_1[0x112];
|
|
if (pwVar1 == param_1) {
|
|
wVar4 = param_1[0x10];
|
|
uVar6 = 0x10 - (wVar4 - (int)param_1 >> 2);
|
|
}
|
|
else {
|
|
wVar4 = param_1[0x10];
|
|
uVar6 = *param_1 - wVar4 >> 2;
|
|
}
|
|
pwVar9 = param_1 + 0x10;
|
|
if (uVar6 < 2) {
|
|
uVar7 = wVar4 - (int)pwVar1 >> 2;
|
|
uVar6 = uVar7;
|
|
if (uVar7 < 2) {
|
|
uVar6 = 1;
|
|
}
|
|
uVar10 = uVar7 + uVar6 + 1;
|
|
uVar6 = 0x3ffffffe;
|
|
if (uVar7 <= uVar10) {
|
|
uVar6 = uVar10;
|
|
}
|
|
uVar7 = 0x3ffffffe;
|
|
if (uVar10 < 0x3fffffff) {
|
|
uVar7 = uVar6;
|
|
}
|
|
if (uVar7 >> 1 < 0x81) {
|
|
pwVar2 = param_1 + 0x11;
|
|
}
|
|
else {
|
|
if (0x3fffffff < uVar7) {
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
local_18 = uVar7 << 2;
|
|
if (local_18 < 0x81) {
|
|
pwVar2 = (wchar_t *)std::__node_alloc::_M_allocate(&local_18);
|
|
}
|
|
else {
|
|
pwVar2 = (wchar_t *)operator_new(local_18);
|
|
}
|
|
pwVar1 = (wchar_t *)param_1[0x112];
|
|
}
|
|
pwVar11 = pwVar2;
|
|
if (0 < (int)param_2 - (int)pwVar1) {
|
|
iVar5 = ((uint)((int)param_2 - (int)pwVar1) >> 2) + 1;
|
|
pwVar8 = pwVar1;
|
|
do {
|
|
wVar4 = *pwVar8;
|
|
pwVar8 = pwVar8 + 1;
|
|
*pwVar11 = wVar4;
|
|
pwVar11 = pwVar11 + 1;
|
|
iVar5 = iVar5 + -1;
|
|
} while (1 < iVar5);
|
|
}
|
|
*pwVar11 = param_3;
|
|
pwVar8 = pwVar11 + 1;
|
|
if (0 < *pwVar9 - (int)param_2) {
|
|
iVar5 = ((uint)(*pwVar9 - (int)param_2) >> 2) + 1;
|
|
do {
|
|
wVar4 = *param_2;
|
|
param_2 = param_2 + 1;
|
|
*pwVar8 = wVar4;
|
|
pwVar8 = pwVar8 + 1;
|
|
iVar5 = iVar5 + -1;
|
|
} while (1 < iVar5);
|
|
}
|
|
*pwVar8 = L'\0';
|
|
if (((pwVar1 != param_1) && (pwVar1 != (wchar_t *)0x0)) && (param_1 + 0x11 != pwVar1)) {
|
|
if ((uint)(*param_1 - (int)pwVar1) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pwVar1,*param_1 - (int)pwVar1);
|
|
}
|
|
else {
|
|
operator_delete(pwVar1);
|
|
}
|
|
}
|
|
param_1[0x10] = (wchar_t)pwVar8;
|
|
*param_1 = (wchar_t)(pwVar2 + uVar7);
|
|
param_1[0x112] = (wchar_t)pwVar2;
|
|
}
|
|
else {
|
|
*(undefined4 *)(wVar4 + L'\x04') = 0;
|
|
wmemmove(param_2 + 1,param_2,wVar4 - (int)param_2 >> 2);
|
|
*param_2 = param_3;
|
|
*pwVar9 = *pwVar9 + L'\x04';
|
|
pwVar11 = param_2;
|
|
}
|
|
return pwVar11;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000506a4 @ 000506a4
|
|
|
|
void FUN_000506a4(int *param_1,uint param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
int *piVar2;
|
|
undefined4 uVar3;
|
|
int iVar4;
|
|
int *piVar5;
|
|
int iVar6;
|
|
int *piVar7;
|
|
uint local_18;
|
|
|
|
if (param_2 >> 1 < 0x81) {
|
|
piVar1 = param_1 + 0x11;
|
|
}
|
|
else {
|
|
if (param_2 >> 0x1e != 0) {
|
|
FUN_00030824(4);
|
|
uVar3 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar3,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
local_18 = param_2 << 2;
|
|
if (local_18 < 0x81) {
|
|
piVar1 = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
}
|
|
else {
|
|
piVar1 = (int *)operator_new(local_18);
|
|
}
|
|
}
|
|
piVar2 = (int *)param_1[0x112];
|
|
piVar7 = piVar1;
|
|
if (0 < param_1[0x10] - (int)piVar2) {
|
|
iVar4 = ((uint)(param_1[0x10] - (int)piVar2) >> 2) + 1;
|
|
piVar5 = piVar2;
|
|
do {
|
|
iVar6 = *piVar5;
|
|
piVar5 = piVar5 + 1;
|
|
*piVar7 = iVar6;
|
|
piVar7 = piVar7 + 1;
|
|
iVar4 = iVar4 + -1;
|
|
} while (1 < iVar4);
|
|
}
|
|
*piVar7 = 0;
|
|
if (((piVar2 != param_1) && (piVar2 != (int *)0x0)) && (param_1 + 0x11 != piVar2)) {
|
|
if ((uint)(*param_1 - (int)piVar2) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar2,*param_1 - (int)piVar2);
|
|
}
|
|
else {
|
|
operator_delete(piVar2);
|
|
}
|
|
}
|
|
param_1[0x10] = (int)piVar7;
|
|
*param_1 = (int)(piVar1 + param_2);
|
|
param_1[0x112] = (int)piVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Initialize_get_float @ 00050758
|
|
|
|
/* std::priv::_Initialize_get_float(std::ctype<wchar_t> const&, wchar_t&, wchar_t&, wchar_t&,
|
|
wchar_t&, wchar_t*) */
|
|
|
|
void std::priv::_Initialize_get_float
|
|
(ctype *param_1,wchar_t *param_2,wchar_t *param_3,wchar_t *param_4,wchar_t *param_5,
|
|
wchar_t *param_6)
|
|
|
|
{
|
|
wchar_t wVar1;
|
|
undefined4 local_20;
|
|
undefined4 local_1c;
|
|
undefined2 local_18;
|
|
undefined1 local_16 [2];
|
|
|
|
local_16[0] = 0;
|
|
local_18 = 0x3938;
|
|
local_1c = 0x37363534;
|
|
local_20 = 0x33323130;
|
|
wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x2b);
|
|
*param_2 = wVar1;
|
|
wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x2d);
|
|
*param_3 = wVar1;
|
|
wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x65);
|
|
*param_4 = wVar1;
|
|
wVar1 = (**(code **)(*(int *)param_1 + 0x28))(param_1,0x45);
|
|
*param_5 = wVar1;
|
|
(**(code **)(*(int *)param_1 + 0x2c))(param_1,&local_20,local_16,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __string_to_float @ 000507d0
|
|
|
|
/* std::priv::__string_to_float(std::priv::__basic_iostring<char> const&, float&) */
|
|
|
|
void std::priv::__string_to_float(__basic_iostring *param_1,float *param_2)
|
|
|
|
{
|
|
float fVar1;
|
|
|
|
FUN_000507e8(*(undefined4 *)(param_1 + 0x118));
|
|
fVar1 = (float)__truncdfsf2();
|
|
*param_2 = fVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000507e8 @ 000507e8
|
|
|
|
undefined8 FUN_000507e8(byte *param_1)
|
|
|
|
{
|
|
bool bVar1;
|
|
bool bVar2;
|
|
undefined8 uVar3;
|
|
longlong lVar4;
|
|
bool bVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
byte *pbVar8;
|
|
byte *pbVar9;
|
|
uint uVar10;
|
|
int iVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
uint uVar15;
|
|
uint uVar16;
|
|
longlong lVar17;
|
|
undefined8 uVar18;
|
|
uint local_4c;
|
|
uint local_44;
|
|
uint local_40;
|
|
int local_3c;
|
|
byte local_38 [20];
|
|
int local_24;
|
|
undefined8 local_20;
|
|
|
|
lVar17 = CONCAT44(local_20._4_4_,(uint)local_20);
|
|
uVar10 = (uint)*param_1;
|
|
pbVar8 = param_1 + 1;
|
|
bVar5 = false;
|
|
if (uVar10 != 0x2b) {
|
|
bVar2 = false;
|
|
bVar5 = true;
|
|
if (uVar10 != 0x2d) goto LAB_00050808;
|
|
}
|
|
bVar2 = bVar5;
|
|
uVar10 = (uint)param_1[1];
|
|
pbVar8 = param_1 + 2;
|
|
LAB_00050808:
|
|
iVar11 = 0;
|
|
local_3c = 0;
|
|
uVar15 = 0;
|
|
do {
|
|
pbVar9 = pbVar8 + 1;
|
|
uVar10 = uVar10 - 0x30;
|
|
if (uVar10 < 10) {
|
|
uVar6 = uVar15;
|
|
if (iVar11 == 0x11) {
|
|
local_3c = local_3c + (uVar15 ^ 1);
|
|
iVar11 = 0x11;
|
|
}
|
|
else {
|
|
iVar7 = 0;
|
|
if (iVar11 != 0 || uVar10 != 0) {
|
|
local_38[iVar11] = (byte)uVar10;
|
|
iVar7 = iVar11 + 1;
|
|
}
|
|
local_3c = local_3c - uVar15;
|
|
iVar11 = iVar7;
|
|
}
|
|
}
|
|
else {
|
|
uVar6 = 1;
|
|
if ((uVar10 != 0xfffffffe) || (uVar15 != 0)) break;
|
|
}
|
|
uVar10 = (uint)*pbVar8;
|
|
uVar15 = uVar6;
|
|
pbVar8 = pbVar9;
|
|
} while( true );
|
|
if (iVar11 == 0) {
|
|
return 0;
|
|
}
|
|
local_40 = 0x20;
|
|
if ((uVar10 | 0x20) == 0x35) {
|
|
uVar10 = (uint)*pbVar8;
|
|
bVar5 = false;
|
|
if ((uVar10 == 0x20) || (uVar10 == 0x2b)) {
|
|
LAB_0005088e:
|
|
bVar1 = bVar5;
|
|
uVar10 = (uint)*pbVar9;
|
|
pbVar9 = pbVar8 + 2;
|
|
}
|
|
else {
|
|
bVar1 = false;
|
|
bVar5 = true;
|
|
if (uVar10 == 0x2d) goto LAB_0005088e;
|
|
}
|
|
uVar10 = uVar10 - 0x30;
|
|
if (uVar10 < 10) {
|
|
iVar7 = 0;
|
|
do {
|
|
iVar7 = iVar7 * 10 + uVar10;
|
|
uVar10 = *pbVar9 - 0x30;
|
|
pbVar9 = pbVar9 + 1;
|
|
} while (uVar10 < 10);
|
|
if (bVar1) {
|
|
iVar7 = -iVar7;
|
|
}
|
|
local_3c = iVar7 + local_3c;
|
|
}
|
|
}
|
|
uVar10 = 0;
|
|
uVar15 = 0;
|
|
if (-0x133 < local_3c + iVar11) {
|
|
uVar15 = 0x7ff00000;
|
|
uVar10 = 0;
|
|
lVar17 = CONCAT44(local_20._4_4_,(uint)local_20);
|
|
if (local_3c + iVar11 < 0x136) {
|
|
lVar17 = 0;
|
|
lVar4 = 0;
|
|
if (0 < iVar11) {
|
|
pbVar8 = local_38;
|
|
do {
|
|
local_20._4_4_ = (uint)((ulonglong)lVar4 >> 0x20);
|
|
local_20._0_4_ = (uint)lVar4;
|
|
lVar17 = __muldi3((uint)local_20,local_20._4_4_,10,0);
|
|
local_20 = lVar4;
|
|
local_20 = lVar17;
|
|
lVar4 = lVar17 + (ulonglong)*pbVar8;
|
|
uVar10 = (uint)lVar4;
|
|
uVar15 = (uint)((ulonglong)lVar4 >> 0x20);
|
|
pbVar8 = pbVar8 + 1;
|
|
} while (pbVar8 < local_38 + iVar11);
|
|
lVar17 = lVar4;
|
|
if (lVar4 != 0) {
|
|
if (uVar15 == 0) {
|
|
local_40 = 0;
|
|
}
|
|
uVar13 = local_40 | 0x10;
|
|
uVar16 = uVar13 - 0x20;
|
|
local_4c = 0;
|
|
uVar6 = 0;
|
|
if ((int)uVar16 < 0) {
|
|
uVar6 = uVar15 >> (local_40 | 0x10);
|
|
}
|
|
uVar14 = uVar15 >> (uVar16 & 0xff);
|
|
if ((int)uVar16 < 0) {
|
|
uVar14 = uVar15 << (0x20 - uVar13 & 0xff) | uVar10 >> (local_40 | 0x10);
|
|
}
|
|
if (uVar14 != 0 || uVar6 != 0) {
|
|
local_40 = uVar13;
|
|
}
|
|
uVar13 = local_40 | 8;
|
|
uVar16 = uVar13 - 0x20;
|
|
uVar6 = 0;
|
|
if ((int)uVar16 < 0) {
|
|
uVar6 = uVar15 >> (local_40 | 8);
|
|
}
|
|
uVar14 = uVar15 >> (uVar16 & 0xff);
|
|
if ((int)uVar16 < 0) {
|
|
uVar14 = uVar15 << (0x20 - uVar13 & 0xff) | uVar10 >> (local_40 | 8);
|
|
}
|
|
if (uVar14 != 0 || uVar6 != 0) {
|
|
local_40 = uVar13;
|
|
}
|
|
uVar13 = local_40 | 4;
|
|
uVar16 = uVar13 - 0x20;
|
|
uVar6 = 0;
|
|
if ((int)uVar16 < 0) {
|
|
uVar6 = uVar15 >> (local_40 | 4);
|
|
}
|
|
uVar14 = uVar15 >> (uVar16 & 0xff);
|
|
if ((int)uVar16 < 0) {
|
|
uVar14 = uVar15 << (0x20 - uVar13 & 0xff) | uVar10 >> (local_40 | 4);
|
|
}
|
|
if (uVar14 != 0 || uVar6 != 0) {
|
|
local_40 = uVar13;
|
|
}
|
|
uVar13 = local_40 + 2;
|
|
uVar16 = local_40 - 0x1e;
|
|
uVar6 = 0;
|
|
if ((int)uVar16 < 0) {
|
|
uVar6 = uVar15 >> uVar13;
|
|
}
|
|
uVar14 = uVar15 >> (uVar16 & 0xff);
|
|
if ((int)uVar16 < 0) {
|
|
uVar14 = uVar10 >> uVar13 | uVar15 << (0x1e - local_40 & 0xff);
|
|
}
|
|
if (uVar14 != 0 || uVar6 != 0) {
|
|
local_40 = uVar13;
|
|
}
|
|
uVar13 = local_40 + 1;
|
|
uVar16 = local_40 - 0x1f;
|
|
uVar6 = 0;
|
|
if ((int)uVar16 < 0) {
|
|
uVar6 = uVar15 >> uVar13;
|
|
}
|
|
uVar14 = uVar15 >> (uVar16 & 0xff);
|
|
if ((int)uVar16 < 0) {
|
|
uVar14 = uVar10 >> uVar13 | uVar15 << (0x1f - local_40 & 0xff);
|
|
}
|
|
if (uVar14 != 0 || uVar6 != 0) {
|
|
local_40 = uVar13;
|
|
}
|
|
uVar6 = local_40 - 0x20;
|
|
local_44 = 0;
|
|
if ((int)uVar6 < 0) {
|
|
local_44 = uVar15 >> local_40;
|
|
}
|
|
uVar13 = uVar15 >> (uVar6 & 0xff);
|
|
if ((int)uVar6 < 0) {
|
|
uVar13 = uVar15 << (0x20 - local_40 & 0xff) | uVar10 >> local_40;
|
|
}
|
|
uVar6 = local_40 + 1;
|
|
if (uVar13 == 0 && local_44 == 0) {
|
|
uVar6 = local_40;
|
|
}
|
|
uVar13 = 0x20 - uVar6;
|
|
uVar16 = 0x40 - uVar6;
|
|
if ((int)uVar13 < 0) {
|
|
local_4c = uVar10 << (uVar16 & 0xff);
|
|
}
|
|
local_20._0_4_ = local_4c;
|
|
local_20._4_4_ = uVar10 << (uVar13 & 0xff);
|
|
if ((int)uVar13 < 0) {
|
|
local_20._4_4_ = uVar10 >> (0x20 - uVar16 & 0xff) | uVar15 << (uVar16 & 0xff);
|
|
}
|
|
FUN_00050d84(&local_20,local_3c,&local_24);
|
|
local_24 = local_24 + uVar6;
|
|
if (-0x3fe < local_24) {
|
|
uVar6 = local_20._4_4_ >> 0xb;
|
|
uVar15 = (uint)local_20 >> 0xb | local_20._4_4_ << 0x15;
|
|
uVar10 = uVar15;
|
|
local_20._4_4_ = uVar6;
|
|
if ((((uint)local_20 & 0x400) != 0) &&
|
|
(((uint)local_20 >> 0xb & 1) != 0 || ((uint)local_20 & 0x3ff) != 0)) {
|
|
local_20._4_4_ = uVar6 + (0xfffffffe < uVar15);
|
|
uVar10 = uVar15 + 1;
|
|
if ((local_20._4_4_ & 0x200000) != 0) {
|
|
local_24 = local_24 + 1;
|
|
uVar10 = local_20._4_4_ * -0x80000000 | uVar15 + 1 >> 1;
|
|
local_20._4_4_ = local_20._4_4_ >> 1;
|
|
}
|
|
}
|
|
local_20._0_4_ = uVar10;
|
|
uVar15 = 0x7ff00000;
|
|
uVar10 = 0;
|
|
lVar17 = CONCAT44(local_20._4_4_,(uint)local_20);
|
|
if (local_24 < 0x401) {
|
|
uVar15 = (local_24 + 0x3fe) * 0x100000 & 0x7ff00000U | local_20._4_4_ & 0x800fffff;
|
|
uVar10 = (uint)local_20;
|
|
lVar17 = CONCAT44(uVar15,(uint)local_20);
|
|
}
|
|
goto LAB_00050ae0;
|
|
}
|
|
if (-0x434 < local_24) {
|
|
uVar6 = -local_24 - 0x3f2;
|
|
if ((int)uVar6 < 0x41) {
|
|
if (uVar6 == 0x40) {
|
|
uVar12 = local_20._4_4_ >> 0x1f;
|
|
uVar13 = 0x7fffffff;
|
|
uVar10 = 0;
|
|
uVar15 = 0;
|
|
}
|
|
else {
|
|
uVar16 = -local_24 - 0x412;
|
|
uVar13 = 1 << (uVar16 & 0xff);
|
|
if ((int)uVar16 < 0) {
|
|
uVar13 = 1 >> (0x20 - uVar6 & 0xff);
|
|
}
|
|
uVar14 = 0;
|
|
if ((int)uVar16 < 0) {
|
|
uVar14 = 1 << (uVar6 & 0xff);
|
|
}
|
|
uVar13 = uVar13 - (uVar14 < 2);
|
|
uVar10 = local_20._4_4_ >> (uVar16 & 0xff);
|
|
if ((int)uVar16 < 0) {
|
|
uVar10 = local_20._4_4_ << (0x20 - uVar6 & 0xff) |
|
|
(uint)local_20 >> (uVar6 & 0xff);
|
|
}
|
|
uVar12 = ~uVar10 & 1;
|
|
uVar15 = 0;
|
|
if ((int)uVar16 < 0) {
|
|
uVar15 = local_20._4_4_ >> (uVar6 & 0xff);
|
|
}
|
|
local_20._0_4_ = (uint)local_20 & uVar14 - 2;
|
|
}
|
|
lVar17 = CONCAT44(uVar15,uVar10);
|
|
if ((uVar12 != 0) &&
|
|
(lVar17 = CONCAT44(uVar15,uVar10),
|
|
((uint)local_20 != 0 || (uVar10 & 1) != 0) || (local_20._4_4_ & uVar13) != 0)) {
|
|
uVar6 = uVar10 + 1;
|
|
uVar15 = uVar15 + (0xfffffffe < uVar10);
|
|
uVar10 = uVar6;
|
|
lVar17 = CONCAT44(uVar15,uVar6);
|
|
}
|
|
goto LAB_00050ae0;
|
|
}
|
|
}
|
|
lVar17 = 0;
|
|
}
|
|
}
|
|
uVar15 = 0;
|
|
uVar10 = uVar15;
|
|
}
|
|
}
|
|
LAB_00050ae0:
|
|
local_20 = lVar17;
|
|
uVar18 = __subdf3(0,0x80000000,uVar10,uVar15);
|
|
uVar3 = CONCAT44(uVar15,uVar10);
|
|
if (bVar2) {
|
|
uVar3 = uVar18;
|
|
}
|
|
return uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __string_to_float @ 00050c2c
|
|
|
|
/* std::priv::__string_to_float(std::priv::__basic_iostring<char> const&, double&) */
|
|
|
|
void std::priv::__string_to_float(__basic_iostring *param_1,double *param_2)
|
|
|
|
{
|
|
double dVar1;
|
|
|
|
dVar1 = (double)FUN_000507e8(*(undefined4 *)(param_1 + 0x118));
|
|
*param_2 = dVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __string_to_float @ 00050c40
|
|
|
|
/* std::priv::__string_to_float(std::priv::__basic_iostring<char> const&, long double&) */
|
|
|
|
void std::priv::__string_to_float(__basic_iostring *param_1,longdouble *param_2)
|
|
|
|
{
|
|
longdouble lVar1;
|
|
|
|
lVar1 = (longdouble)FUN_00050c54(*(undefined4 *)(param_1 + 0x118));
|
|
*param_2 = lVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00050c54 @ 00050c54
|
|
|
|
undefined8 FUN_00050c54(byte *param_1)
|
|
|
|
{
|
|
bool bVar1;
|
|
bool bVar2;
|
|
bool bVar3;
|
|
uint uVar4;
|
|
byte *pbVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
int iVar9;
|
|
byte *pbVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
undefined8 uVar13;
|
|
undefined8 uVar14;
|
|
undefined1 local_24 [16];
|
|
|
|
uVar11 = (uint)*param_1;
|
|
pbVar5 = param_1 + 1;
|
|
bVar3 = false;
|
|
if (uVar11 != 0x2b) {
|
|
bVar1 = false;
|
|
bVar3 = true;
|
|
if (uVar11 != 0x2d) goto LAB_00050c78;
|
|
}
|
|
bVar1 = bVar3;
|
|
uVar11 = (uint)param_1[1];
|
|
pbVar5 = param_1 + 2;
|
|
LAB_00050c78:
|
|
iVar6 = 0;
|
|
iVar9 = 0;
|
|
uVar12 = 0;
|
|
do {
|
|
pbVar10 = pbVar5 + 1;
|
|
uVar11 = uVar11 - 0x30;
|
|
if (uVar11 < 10) {
|
|
uVar4 = uVar12;
|
|
if (iVar6 == 0xf) {
|
|
iVar9 = iVar9 + (uVar12 ^ 1);
|
|
iVar6 = 0xf;
|
|
}
|
|
else {
|
|
iVar7 = 0;
|
|
if (iVar6 != 0 || uVar11 != 0) {
|
|
local_24[iVar6] = (char)uVar11;
|
|
iVar7 = iVar6 + 1;
|
|
}
|
|
iVar9 = iVar9 - uVar12;
|
|
iVar6 = iVar7;
|
|
}
|
|
}
|
|
else {
|
|
uVar4 = 1;
|
|
if ((uVar11 != 0xfffffffe) || (uVar12 != 0)) {
|
|
if (iVar6 == 0) {
|
|
uVar14 = 0;
|
|
}
|
|
else {
|
|
if ((uVar11 | 0x20) == 0x35) {
|
|
uVar11 = (uint)*pbVar5;
|
|
bVar3 = false;
|
|
if (((uVar11 == 0x20) || (uVar11 == 0x2b)) ||
|
|
(bVar2 = false, bVar3 = true, uVar11 == 0x2d)) {
|
|
bVar2 = bVar3;
|
|
uVar11 = (uint)*pbVar10;
|
|
pbVar10 = pbVar5 + 2;
|
|
}
|
|
uVar11 = uVar11 - 0x30;
|
|
if (uVar11 < 10) {
|
|
iVar7 = 0;
|
|
do {
|
|
iVar7 = iVar7 * 10 + uVar11;
|
|
uVar11 = *pbVar10 - 0x30;
|
|
pbVar10 = pbVar10 + 1;
|
|
} while (uVar11 < 10);
|
|
iVar8 = -iVar7;
|
|
if (!bVar2) {
|
|
iVar8 = iVar7;
|
|
}
|
|
iVar9 = iVar8 + iVar9;
|
|
}
|
|
}
|
|
uVar14 = 0;
|
|
if (-0x133 < iVar9 + iVar6) {
|
|
uVar13 = 0x7ff0000000000000;
|
|
if (iVar9 + iVar6 < 0x136) {
|
|
uVar13 = FUN_00051158(local_24,iVar6,iVar9);
|
|
}
|
|
uVar14 = __subdf3(0,0x80000000,(int)uVar13,(int)((ulonglong)uVar13 >> 0x20));
|
|
if (!bVar1) {
|
|
uVar14 = uVar13;
|
|
}
|
|
}
|
|
}
|
|
return uVar14;
|
|
}
|
|
}
|
|
uVar11 = (uint)*pbVar5;
|
|
uVar12 = uVar4;
|
|
pbVar5 = pbVar10;
|
|
} while( true );
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00050d84 @ 00050d84
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00051064) */
|
|
/* WARNING: Removing unreachable block (ram,0x00050eb6) */
|
|
/* WARNING: Removing unreachable block (ram,0x00050ef8) */
|
|
/* WARNING: Removing unreachable block (ram,0x0005109c) */
|
|
|
|
void FUN_00050d84(uint *param_1,int param_2,int *param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
undefined4 uVar8;
|
|
uint uVar9;
|
|
int iVar10;
|
|
uint uVar11;
|
|
ulonglong uVar12;
|
|
longlong lVar13;
|
|
undefined8 uVar14;
|
|
int local_64;
|
|
int local_50;
|
|
int local_4c;
|
|
uint local_48;
|
|
uint local_2c;
|
|
uint local_24;
|
|
uint local_20;
|
|
uint local_1c;
|
|
|
|
*param_3 = 0;
|
|
if (param_2 == 0) {
|
|
return;
|
|
}
|
|
local_48 = 0x80000000;
|
|
if (param_2 < 1) {
|
|
iVar1 = param_2;
|
|
if (param_2 < -0x1b) {
|
|
iVar1 = -0x1c;
|
|
}
|
|
iVar1 = __udivsi3((iVar1 + 0x1b) - param_2,0x1c);
|
|
local_64 = iVar1 * 0x1c + param_2 + 0x1c;
|
|
local_4c = 0x24;
|
|
local_50 = 0xd;
|
|
LAB_00050e1c:
|
|
local_1c = *param_1;
|
|
local_24 = param_1[1];
|
|
iVar1 = iVar1 + 1;
|
|
iVar10 = 0;
|
|
do {
|
|
iVar3 = local_50;
|
|
if (iVar1 <= local_50) {
|
|
iVar3 = iVar1;
|
|
}
|
|
iVar4 = (iVar3 + local_4c) * 8;
|
|
uVar8 = *(undefined4 *)(&DAT_000662b0 + iVar4);
|
|
uVar12 = __muldi3(uVar8,0,local_1c,0);
|
|
local_20 = (uint)uVar12;
|
|
lVar13 = __muldi3(uVar8,0,local_24,0);
|
|
uVar12 = lVar13 + (uVar12 >> 0x20);
|
|
uVar9 = (uint)(uVar12 >> 0x20);
|
|
uVar8 = *(undefined4 *)(&DAT_000662b4 + iVar4);
|
|
lVar13 = __muldi3(uVar8,0,local_1c,0);
|
|
lVar13 = lVar13 + (uVar12 & 0xffffffff);
|
|
local_2c = (uint)lVar13;
|
|
uVar2 = (uint)((ulonglong)lVar13 >> 0x20);
|
|
uVar14 = __muldi3(uVar8,0,local_24,0);
|
|
uVar7 = uVar9 + (uint)uVar14;
|
|
uVar6 = uVar7 + uVar2;
|
|
uVar7 = (int)((ulonglong)uVar14 >> 0x20) + (uint)CARRY4(uVar9,(uint)uVar14) +
|
|
(uint)CARRY4(uVar7,uVar2);
|
|
iVar1 = iVar1 - iVar3;
|
|
if (uVar7 < 0x80000000) {
|
|
if ((uVar6 != 0xffffffff || uVar7 != 0x7fffffff) || (local_2c < 0xc0000000)) {
|
|
uVar9 = uVar6 * 2 | local_2c >> 0x1f;
|
|
uVar7 = uVar7 * 2 | uVar6 >> 0x1f;
|
|
*param_1 = uVar9;
|
|
param_1[1] = uVar7;
|
|
local_2c = local_2c * 2 | local_20 >> 0x1f;
|
|
local_20 = local_20 << 1;
|
|
iVar4 = 1;
|
|
uVar6 = uVar9;
|
|
goto LAB_00050f50;
|
|
}
|
|
iVar4 = 0;
|
|
*param_1 = 0;
|
|
param_1[1] = 0x80000000;
|
|
local_1c = 0;
|
|
uVar9 = local_48;
|
|
uVar2 = local_1c;
|
|
}
|
|
else {
|
|
*param_1 = uVar6;
|
|
param_1[1] = uVar7;
|
|
iVar4 = 0;
|
|
LAB_00050f50:
|
|
uVar9 = uVar7;
|
|
uVar2 = uVar6;
|
|
if ((int)local_2c < 0) {
|
|
local_1c = 1;
|
|
if ((local_20 != 0 || local_2c != 0x80000000) || ((uVar6 & 1) != 0)) {
|
|
uVar2 = uVar6 + 1;
|
|
*param_1 = uVar2;
|
|
local_24 = 0;
|
|
uVar9 = uVar7 + (0xfffffffe < uVar6);
|
|
param_1[1] = uVar9;
|
|
if (uVar2 == 0 && uVar9 == 0) {
|
|
*param_1 = uVar6 + 2;
|
|
param_1[1] = uVar7 + (0xfffffffd < uVar6);
|
|
uVar9 = local_24;
|
|
uVar2 = local_1c;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
local_1c = uVar2;
|
|
local_24 = uVar9;
|
|
iVar10 = (*(short *)(&DAT_00066530 + (iVar3 + local_4c) * 2) - iVar4) + iVar10;
|
|
} while (iVar1 != 0);
|
|
*param_3 = iVar10;
|
|
if (local_64 == 0) {
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
iVar10 = 0;
|
|
local_64 = param_2;
|
|
if (0x1b < param_2) {
|
|
iVar1 = -2 - param_2;
|
|
if (-2 - param_2 < -0x37) {
|
|
iVar1 = -0x38;
|
|
}
|
|
iVar1 = __udivsi3(iVar1 + param_2 + 0x1d,0x1c);
|
|
local_64 = param_2 + iVar1 * -0x1c + -0x1b;
|
|
local_4c = 0x19;
|
|
local_50 = 0xb;
|
|
goto LAB_00050e1c;
|
|
}
|
|
}
|
|
uVar6 = *param_1;
|
|
iVar1 = (local_64 + -1) * 8;
|
|
uVar8 = *(undefined4 *)(&DAT_000662b0 + iVar1);
|
|
uVar12 = __muldi3(uVar8,0,uVar6,0);
|
|
uVar9 = (uint)uVar12;
|
|
uVar7 = param_1[1];
|
|
lVar13 = __muldi3(uVar8,0,uVar7,0);
|
|
uVar12 = lVar13 + (uVar12 >> 0x20);
|
|
uVar5 = (uint)(uVar12 >> 0x20);
|
|
uVar8 = *(undefined4 *)(&DAT_000662b4 + iVar1);
|
|
lVar13 = __muldi3(uVar8,0,uVar6,0);
|
|
lVar13 = lVar13 + (uVar12 & 0xffffffff);
|
|
uVar6 = (uint)lVar13;
|
|
uVar11 = (uint)((ulonglong)lVar13 >> 0x20);
|
|
uVar14 = __muldi3(uVar8,0,uVar7,0);
|
|
uVar7 = uVar5 + (uint)uVar14;
|
|
uVar2 = uVar7 + uVar11;
|
|
uVar7 = (int)((ulonglong)uVar14 >> 0x20) + (uint)CARRY4(uVar5,(uint)uVar14) +
|
|
(uint)CARRY4(uVar7,uVar11);
|
|
if (uVar7 < 0x80000000) {
|
|
if ((uVar2 == 0xffffffff && uVar7 == 0x7fffffff) && (0xbfffffff < uVar6)) {
|
|
iVar1 = 0;
|
|
*param_1 = 0;
|
|
param_1[1] = 0x80000000;
|
|
goto LAB_00051122;
|
|
}
|
|
uVar5 = uVar2 * 2 | uVar6 >> 0x1f;
|
|
uVar7 = uVar7 * 2 | uVar2 >> 0x1f;
|
|
*param_1 = uVar5;
|
|
param_1[1] = uVar7;
|
|
uVar6 = uVar6 * 2 | uVar9 >> 0x1f;
|
|
uVar9 = uVar9 << 1;
|
|
iVar1 = 1;
|
|
}
|
|
else {
|
|
*param_1 = uVar2;
|
|
param_1[1] = uVar7;
|
|
iVar1 = 0;
|
|
uVar5 = uVar2;
|
|
}
|
|
if (((int)uVar6 < 0) && ((uVar9 != 0 || uVar6 != 0x80000000 || ((uVar5 & 1) != 0)))) {
|
|
*param_1 = uVar5 + 1;
|
|
uVar6 = uVar7 + (0xfffffffe < uVar5);
|
|
param_1[1] = uVar6;
|
|
if (uVar6 == 0 && uVar5 + 1 == 0) {
|
|
*param_1 = uVar5 + 2;
|
|
param_1[1] = uVar7 + (0xfffffffd < uVar5);
|
|
}
|
|
}
|
|
LAB_00051122:
|
|
*param_3 = (*(short *)(&DAT_00066530 + (local_64 + -1) * 2) - iVar1) + iVar10;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00051158 @ 00051158
|
|
|
|
undefined8 FUN_00051158(byte *param_1,int param_2,undefined4 param_3)
|
|
|
|
{
|
|
longlong lVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
byte *pbVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
bool bVar10;
|
|
longlong lVar11;
|
|
uint uStack_3c;
|
|
uint local_2c;
|
|
int local_24;
|
|
undefined8 local_20;
|
|
|
|
lVar1 = 0;
|
|
pbVar6 = param_1 + param_2;
|
|
if (0 < param_2) {
|
|
do {
|
|
local_20._4_4_ = (uint)((ulonglong)lVar1 >> 0x20);
|
|
local_20._0_4_ = (uint)lVar1;
|
|
lVar11 = __muldi3((uint)local_20,local_20._4_4_,10,0);
|
|
local_20 = lVar1;
|
|
lVar1 = lVar11 + (ulonglong)*param_1;
|
|
uVar2 = (uint)lVar1;
|
|
uVar3 = (uint)((ulonglong)lVar1 >> 0x20);
|
|
param_1 = param_1 + 1;
|
|
} while (param_1 < pbVar6);
|
|
if (lVar1 != 0) {
|
|
uVar5 = 0x20;
|
|
if (uVar3 == 0) {
|
|
uVar5 = 0;
|
|
}
|
|
uVar7 = uVar5 | 0x10;
|
|
uVar9 = uVar7 - 0x20;
|
|
local_2c = 0;
|
|
uVar8 = 0;
|
|
if ((int)uVar9 < 0) {
|
|
uVar8 = uVar3 >> (uVar5 | 0x10);
|
|
}
|
|
uVar4 = uVar3 >> (uVar9 & 0xff);
|
|
if ((int)uVar9 < 0) {
|
|
uVar4 = uVar3 << (0x20 - uVar7 & 0xff) | uVar2 >> (uVar5 | 0x10);
|
|
}
|
|
if (uVar4 != 0 || uVar8 != 0) {
|
|
uVar5 = uVar7;
|
|
}
|
|
uVar7 = uVar5 | 8;
|
|
uVar9 = uVar7 - 0x20;
|
|
uVar8 = 0;
|
|
if ((int)uVar9 < 0) {
|
|
uVar8 = uVar3 >> (uVar5 | 8);
|
|
}
|
|
uVar4 = uVar3 >> (uVar9 & 0xff);
|
|
if ((int)uVar9 < 0) {
|
|
uVar4 = uVar3 << (0x20 - uVar7 & 0xff) | uVar2 >> (uVar5 | 8);
|
|
}
|
|
if (uVar4 != 0 || uVar8 != 0) {
|
|
uVar5 = uVar7;
|
|
}
|
|
uVar7 = uVar5 | 4;
|
|
uVar9 = uVar7 - 0x20;
|
|
uVar8 = 0;
|
|
if ((int)uVar9 < 0) {
|
|
uVar8 = uVar3 >> (uVar5 | 4);
|
|
}
|
|
uVar4 = uVar3 >> (uVar9 & 0xff);
|
|
if ((int)uVar9 < 0) {
|
|
uVar4 = uVar3 << (0x20 - uVar7 & 0xff) | uVar2 >> (uVar5 | 4);
|
|
}
|
|
if (uVar4 != 0 || uVar8 != 0) {
|
|
uVar5 = uVar7;
|
|
}
|
|
uVar7 = uVar5 + 2;
|
|
uVar9 = uVar5 - 0x1e;
|
|
uVar8 = 0;
|
|
if ((int)uVar9 < 0) {
|
|
uVar8 = uVar3 >> uVar7;
|
|
}
|
|
uVar4 = uVar3 >> (uVar9 & 0xff);
|
|
if ((int)uVar9 < 0) {
|
|
uVar4 = uVar2 >> uVar7 | uVar3 << (0x1e - uVar5 & 0xff);
|
|
}
|
|
if (uVar4 != 0 || uVar8 != 0) {
|
|
uVar5 = uVar7;
|
|
}
|
|
uVar7 = uVar5 + 1;
|
|
uVar9 = uVar5 - 0x1f;
|
|
uVar8 = 0;
|
|
if ((int)uVar9 < 0) {
|
|
uVar8 = uVar3 >> uVar7;
|
|
}
|
|
uVar4 = uVar3 >> (uVar9 & 0xff);
|
|
if ((int)uVar9 < 0) {
|
|
uVar4 = uVar2 >> uVar7 | uVar3 << (0x1f - uVar5 & 0xff);
|
|
}
|
|
if (uVar4 != 0 || uVar8 != 0) {
|
|
uVar5 = uVar7;
|
|
}
|
|
uVar7 = uVar5 - 0x20;
|
|
uVar8 = 0;
|
|
if ((int)uVar7 < 0) {
|
|
uVar8 = uVar3 >> uVar5;
|
|
}
|
|
uVar9 = uVar3 >> (uVar7 & 0xff);
|
|
if ((int)uVar7 < 0) {
|
|
uVar9 = uVar3 << (0x20 - uVar5 & 0xff) | uVar2 >> uVar5;
|
|
}
|
|
uVar7 = uVar5 + 1;
|
|
if (uVar9 == 0 && uVar8 == 0) {
|
|
uVar7 = uVar5;
|
|
}
|
|
uVar8 = 0x20 - uVar7;
|
|
uVar5 = 0x40 - uVar7;
|
|
if ((int)uVar8 < 0) {
|
|
local_2c = uVar2 << (uVar5 & 0xff);
|
|
}
|
|
local_20._0_4_ = local_2c;
|
|
local_20._4_4_ = uVar2 << (uVar8 & 0xff);
|
|
if ((int)uVar8 < 0) {
|
|
local_20._4_4_ = uVar2 >> (0x20 - uVar5 & 0xff) | uVar3 << (uVar5 & 0xff);
|
|
}
|
|
FUN_00050d84(&local_20,param_3,&local_24);
|
|
local_24 = local_24 + uVar7;
|
|
if (-0x3fe < local_24) {
|
|
uVar2 = local_20._4_4_ >> 0xf;
|
|
uVar3 = (uint)local_20 >> 0xf | local_20._4_4_ << 0x11;
|
|
if ((((uint)local_20 & 0x4000) != 0) &&
|
|
(((uint)local_20 >> 0xf & 1) != 0 || ((uint)local_20 & 0x7ff) != 0)) {
|
|
bVar10 = 0xfffffffe < uVar3;
|
|
uVar3 = uVar3 + 1;
|
|
uVar2 = uVar2 + bVar10;
|
|
}
|
|
uStack_3c = 0x7ff00000;
|
|
uVar5 = 0;
|
|
if (local_24 < 0x401) {
|
|
uStack_3c = uVar2;
|
|
uVar5 = uVar3;
|
|
}
|
|
goto LAB_000513c2;
|
|
}
|
|
if (local_24 < -0x4033) {
|
|
LAB_0005139a:
|
|
uVar8 = 0;
|
|
uVar3 = 0;
|
|
}
|
|
else {
|
|
uVar2 = -local_24 - 0x3fee;
|
|
if (0x40 < (int)uVar2) goto LAB_0005139a;
|
|
if (uVar2 == 0x40) {
|
|
uVar4 = local_20._4_4_ >> 0x1f;
|
|
uVar9 = local_20._4_4_ & 0x7fffffff;
|
|
uVar8 = 0;
|
|
uVar3 = 0;
|
|
}
|
|
else {
|
|
uVar5 = -local_24 - 0x400e;
|
|
local_2c = 1 << (uVar5 & 0xff);
|
|
if ((int)uVar5 < 0) {
|
|
local_2c = 1 >> (0x20 - uVar2 & 0xff);
|
|
}
|
|
uVar7 = 0;
|
|
if ((int)uVar5 < 0) {
|
|
uVar7 = 1 << (uVar2 & 0xff);
|
|
}
|
|
uVar9 = local_2c - (uVar7 < 2) & local_20._4_4_;
|
|
uVar8 = local_20._4_4_ >> (uVar5 & 0xff);
|
|
if ((int)uVar5 < 0) {
|
|
uVar8 = local_20._4_4_ << (0x20 - uVar2 & 0xff) | (uint)local_20 >> (uVar2 & 0xff);
|
|
}
|
|
uVar4 = ~uVar8 & 1;
|
|
uVar3 = 0;
|
|
if ((int)uVar5 < 0) {
|
|
uVar3 = local_20._4_4_ >> (uVar2 & 0xff);
|
|
}
|
|
local_20._0_4_ = (uint)local_20 & uVar7 - 2;
|
|
}
|
|
if ((uVar4 != 0) && (((uVar8 & 1) != 0 || (uint)local_20 != 0) || uVar9 != 0)) {
|
|
bVar10 = 0xfffffffe < uVar8;
|
|
uVar8 = uVar8 + 1;
|
|
uVar5 = 0;
|
|
uVar3 = uVar3 + bVar10;
|
|
uStack_3c = 0;
|
|
if (uVar3 == 0x100000 && uVar8 == 0) goto LAB_000513c2;
|
|
}
|
|
}
|
|
uStack_3c = uVar3;
|
|
uVar5 = uVar8;
|
|
goto LAB_000513c2;
|
|
}
|
|
}
|
|
uStack_3c = 0;
|
|
uVar5 = 0;
|
|
LAB_000513c2:
|
|
return CONCAT44(uStack_3c,uVar5);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00051490 @ 00051490
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00051594) */
|
|
|
|
int FUN_00051490(int param_1,uint param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,
|
|
undefined4 param_6)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
size_t sVar2;
|
|
char *pcVar3;
|
|
char *pcVar4;
|
|
char cVar5;
|
|
char *pcVar6;
|
|
int iVar7;
|
|
char cVar8;
|
|
char *pcVar9;
|
|
char local_170 [32];
|
|
char acStack_150 [316];
|
|
|
|
local_170[0] = '%';
|
|
iVar7 = 1;
|
|
if ((int)(param_2 * 0x100000) < 0) {
|
|
local_170[1] = 0x2b;
|
|
iVar7 = 2;
|
|
}
|
|
if ((int)(param_2 << 0x15) < 0) {
|
|
local_170[iVar7] = '#';
|
|
iVar7 = iVar7 + 1;
|
|
}
|
|
local_170[iVar7] = '.';
|
|
local_170[iVar7 + 1] = '*';
|
|
if ((param_2 & 0xc0) == 0x40) {
|
|
cVar8 = 'F';
|
|
cVar5 = 'f';
|
|
}
|
|
else if ((param_2 & 0xc0) == 0x80) {
|
|
cVar8 = 'E';
|
|
cVar5 = 'e';
|
|
}
|
|
else {
|
|
cVar8 = 'G';
|
|
cVar5 = 'g';
|
|
}
|
|
if ((param_2 & 0x4000) == 0) {
|
|
cVar8 = cVar5;
|
|
}
|
|
local_170[iVar7 + 2] = cVar8;
|
|
local_170[iVar7 + 3] = '\0';
|
|
snprintf(acStack_150,0x13a,local_170,param_3,param_5,param_6);
|
|
puVar1 = (undefined4 *)(param_1 + 0x118);
|
|
sVar2 = strlen(acStack_150);
|
|
pcVar3 = *(char **)(param_1 + 0x118);
|
|
pcVar9 = *(char **)(param_1 + 0x10);
|
|
if ((uint)((int)pcVar9 - (int)pcVar3) < sVar2) {
|
|
if (pcVar9 != pcVar3) {
|
|
__aeabi_memmove(pcVar3,acStack_150);
|
|
pcVar3 = (char *)*puVar1;
|
|
pcVar9 = *(char **)(param_1 + 0x10);
|
|
}
|
|
FUN_00051ae8(param_1,pcVar9 + (int)(acStack_150 + -(int)pcVar3),acStack_150 + sVar2);
|
|
pcVar9 = *(char **)(param_1 + 0x10);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(pcVar3,acStack_150,sVar2);
|
|
pcVar9 = *(char **)(param_1 + 0x10);
|
|
pcVar3 = (char *)*puVar1;
|
|
}
|
|
pcVar3 = pcVar3 + sVar2;
|
|
if (pcVar3 != pcVar9) {
|
|
__aeabi_memmove(pcVar3,pcVar9);
|
|
pcVar9 = pcVar3 + (*(int *)(param_1 + 0x10) - (int)pcVar9);
|
|
*(char **)(param_1 + 0x10) = pcVar9;
|
|
}
|
|
}
|
|
pcVar4 = (char *)*puVar1;
|
|
iVar7 = (int)pcVar9 - (int)pcVar4 >> 2;
|
|
pcVar3 = pcVar4;
|
|
if (0 < iVar7) {
|
|
iVar7 = iVar7 + 1;
|
|
do {
|
|
cVar8 = *pcVar3;
|
|
if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_00051636;
|
|
cVar8 = pcVar3[1];
|
|
pcVar6 = pcVar3 + 1;
|
|
if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_0005163c;
|
|
cVar8 = pcVar3[2];
|
|
pcVar6 = pcVar3 + 2;
|
|
if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_0005163c;
|
|
cVar8 = pcVar3[3];
|
|
pcVar6 = pcVar3 + 3;
|
|
if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_0005163c;
|
|
iVar7 = iVar7 + -1;
|
|
pcVar3 = pcVar3 + 4;
|
|
} while (1 < iVar7);
|
|
}
|
|
iVar7 = (int)pcVar9 - (int)pcVar3;
|
|
pcVar6 = pcVar9;
|
|
if (iVar7 == 1) {
|
|
LAB_00051624:
|
|
cVar8 = *pcVar3;
|
|
if (((cVar8 != '.') && (cVar8 != 'e')) && (cVar8 != 'E')) goto LAB_0005163c;
|
|
}
|
|
else if (iVar7 == 2) {
|
|
LAB_00051614:
|
|
cVar8 = *pcVar3;
|
|
if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) {
|
|
pcVar3 = pcVar3 + 1;
|
|
goto LAB_00051624;
|
|
}
|
|
}
|
|
else {
|
|
if (iVar7 != 3) goto LAB_0005163c;
|
|
cVar8 = *pcVar3;
|
|
if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) {
|
|
pcVar3 = pcVar3 + 1;
|
|
goto LAB_00051614;
|
|
}
|
|
}
|
|
LAB_00051636:
|
|
pcVar6 = pcVar3;
|
|
LAB_0005163c:
|
|
return (int)pcVar6 - (int)pcVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00051642 @ 00051642
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x0005174a) */
|
|
|
|
int FUN_00051642(int param_1,uint param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,
|
|
undefined4 param_6)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
size_t sVar2;
|
|
char *pcVar3;
|
|
char *pcVar4;
|
|
char cVar5;
|
|
char *pcVar6;
|
|
int iVar7;
|
|
char cVar8;
|
|
char *pcVar9;
|
|
char local_170 [32];
|
|
char acStack_150 [316];
|
|
|
|
local_170[0] = '%';
|
|
iVar7 = 1;
|
|
if ((int)(param_2 * 0x100000) < 0) {
|
|
local_170[1] = 0x2b;
|
|
iVar7 = 2;
|
|
}
|
|
if ((int)(param_2 << 0x15) < 0) {
|
|
local_170[iVar7] = '#';
|
|
iVar7 = iVar7 + 1;
|
|
}
|
|
local_170[iVar7] = '.';
|
|
local_170[iVar7 + 1] = '*';
|
|
local_170[iVar7 + 2] = 'L';
|
|
if ((param_2 & 0xc0) == 0x40) {
|
|
cVar8 = 'F';
|
|
cVar5 = 'f';
|
|
}
|
|
else if ((param_2 & 0xc0) == 0x80) {
|
|
cVar8 = 'E';
|
|
cVar5 = 'e';
|
|
}
|
|
else {
|
|
cVar8 = 'G';
|
|
cVar5 = 'g';
|
|
}
|
|
if ((param_2 & 0x4000) == 0) {
|
|
cVar8 = cVar5;
|
|
}
|
|
local_170[iVar7 + 3] = cVar8;
|
|
local_170[iVar7 + 4] = '\0';
|
|
snprintf(acStack_150,0x13a,local_170,param_3,param_5,param_6);
|
|
puVar1 = (undefined4 *)(param_1 + 0x118);
|
|
sVar2 = strlen(acStack_150);
|
|
pcVar3 = *(char **)(param_1 + 0x118);
|
|
pcVar9 = *(char **)(param_1 + 0x10);
|
|
if ((uint)((int)pcVar9 - (int)pcVar3) < sVar2) {
|
|
if (pcVar9 != pcVar3) {
|
|
__aeabi_memmove(pcVar3,acStack_150);
|
|
pcVar3 = (char *)*puVar1;
|
|
pcVar9 = *(char **)(param_1 + 0x10);
|
|
}
|
|
FUN_00051ae8(param_1,pcVar9 + (int)(acStack_150 + -(int)pcVar3),acStack_150 + sVar2);
|
|
pcVar9 = *(char **)(param_1 + 0x10);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(pcVar3,acStack_150,sVar2);
|
|
pcVar9 = *(char **)(param_1 + 0x10);
|
|
pcVar3 = (char *)*puVar1;
|
|
}
|
|
pcVar3 = pcVar3 + sVar2;
|
|
if (pcVar3 != pcVar9) {
|
|
__aeabi_memmove(pcVar3,pcVar9);
|
|
pcVar9 = pcVar3 + (*(int *)(param_1 + 0x10) - (int)pcVar9);
|
|
*(char **)(param_1 + 0x10) = pcVar9;
|
|
}
|
|
}
|
|
pcVar4 = (char *)*puVar1;
|
|
iVar7 = (int)pcVar9 - (int)pcVar4 >> 2;
|
|
pcVar3 = pcVar4;
|
|
if (0 < iVar7) {
|
|
iVar7 = iVar7 + 1;
|
|
do {
|
|
cVar8 = *pcVar3;
|
|
if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517ec;
|
|
cVar8 = pcVar3[1];
|
|
pcVar6 = pcVar3 + 1;
|
|
if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517f2;
|
|
cVar8 = pcVar3[2];
|
|
pcVar6 = pcVar3 + 2;
|
|
if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517f2;
|
|
cVar8 = pcVar3[3];
|
|
pcVar6 = pcVar3 + 3;
|
|
if (((cVar8 == '.') || (cVar8 == 'E')) || (cVar8 == 'e')) goto LAB_000517f2;
|
|
iVar7 = iVar7 + -1;
|
|
pcVar3 = pcVar3 + 4;
|
|
} while (1 < iVar7);
|
|
}
|
|
iVar7 = (int)pcVar9 - (int)pcVar3;
|
|
pcVar6 = pcVar9;
|
|
if (iVar7 == 1) {
|
|
LAB_000517da:
|
|
cVar8 = *pcVar3;
|
|
if (((cVar8 != '.') && (cVar8 != 'e')) && (cVar8 != 'E')) goto LAB_000517f2;
|
|
}
|
|
else if (iVar7 == 2) {
|
|
LAB_000517ca:
|
|
cVar8 = *pcVar3;
|
|
if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) {
|
|
pcVar3 = pcVar3 + 1;
|
|
goto LAB_000517da;
|
|
}
|
|
}
|
|
else {
|
|
if (iVar7 != 3) goto LAB_000517f2;
|
|
cVar8 = *pcVar3;
|
|
if (((cVar8 != '.') && (cVar8 != 'E')) && (cVar8 != 'e')) {
|
|
pcVar3 = pcVar3 + 1;
|
|
goto LAB_000517ca;
|
|
}
|
|
}
|
|
LAB_000517ec:
|
|
pcVar6 = pcVar3;
|
|
LAB_000517f2:
|
|
return (int)pcVar6 - (int)pcVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000517f8 @ 000517f8
|
|
|
|
void FUN_000517f8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
char *pcVar1;
|
|
size_t sVar2;
|
|
char acStack_150 [316];
|
|
undefined1 auStack_14 [4];
|
|
|
|
snprintf(acStack_150,0x13a,"%Lf",param_4,param_3,param_4);
|
|
pcVar1 = strchr(acStack_150,0x2e);
|
|
if (pcVar1 != (char *)0x0) {
|
|
FUN_00051c30(param_1,acStack_150,pcVar1,auStack_14);
|
|
return;
|
|
}
|
|
sVar2 = strlen(acStack_150);
|
|
FUN_00051ae8(param_1,acStack_150,acStack_150 + sVar2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00051848 @ 00051848
|
|
|
|
void FUN_00051848(int param_1,int *param_2,int *param_3,undefined4 param_4,int param_5)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 *puVar2;
|
|
uint uVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
char *pcVar8;
|
|
char *pcVar9;
|
|
uint local_24;
|
|
|
|
pcVar8 = *(char **)(param_1 + 0x118);
|
|
pcVar9 = *(char **)(param_1 + 0x10);
|
|
local_24 = 0x3ffffffe;
|
|
if (param_5 != 1) {
|
|
if (pcVar8 != pcVar9) {
|
|
uVar1 = (**(code **)(*param_3 + 0x28))(param_3,*pcVar8);
|
|
if ((int *)param_2[0x112] == param_2) {
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
iVar6 = 0x10 - ((int)puVar2 - (int)param_2 >> 2);
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
iVar6 = *param_2 - (int)puVar2 >> 2;
|
|
}
|
|
if (iVar6 == 1) {
|
|
uVar3 = (int)puVar2 - param_2[0x112] >> 2;
|
|
uVar7 = uVar3;
|
|
if (uVar3 < 2) {
|
|
uVar7 = 1;
|
|
}
|
|
uVar5 = uVar3 + uVar7 + 1;
|
|
uVar7 = 0x3ffffffe;
|
|
if (uVar3 <= uVar5) {
|
|
uVar7 = uVar5;
|
|
}
|
|
uVar3 = 0x3ffffffe;
|
|
if (uVar5 < 0x3fffffff) {
|
|
uVar3 = uVar7;
|
|
}
|
|
FUN_000506a4(param_2,uVar3);
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
}
|
|
*puVar2 = uVar1;
|
|
puVar2[1] = 0;
|
|
param_2[0x10] = (int)(puVar2 + 1);
|
|
}
|
|
goto joined_r0x00051a58;
|
|
}
|
|
if (pcVar8 == pcVar9) goto joined_r0x00051a58;
|
|
while (*pcVar8 != '.') {
|
|
uVar1 = (**(code **)(*param_3 + 0x28))();
|
|
pcVar8 = pcVar8 + 1;
|
|
piVar4 = (int *)param_2[0x112];
|
|
if (piVar4 == param_2) {
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
iVar6 = 0x10 - ((int)puVar2 - (int)param_2 >> 2);
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
iVar6 = *param_2 - (int)puVar2 >> 2;
|
|
}
|
|
if (iVar6 == 1) {
|
|
uVar3 = (int)puVar2 - (int)piVar4 >> 2;
|
|
uVar7 = uVar3;
|
|
if (uVar3 < 2) {
|
|
uVar7 = 1;
|
|
}
|
|
uVar5 = uVar3 + uVar7 + 1;
|
|
uVar7 = local_24;
|
|
if (uVar3 <= uVar5) {
|
|
uVar7 = uVar5;
|
|
}
|
|
uVar3 = local_24;
|
|
if (uVar5 < 0x3fffffff) {
|
|
uVar3 = uVar7;
|
|
}
|
|
FUN_000506a4(param_2,uVar3);
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
}
|
|
*puVar2 = uVar1;
|
|
puVar2[1] = 0;
|
|
param_2[0x10] = (int)(puVar2 + 1);
|
|
if (pcVar9 == pcVar8) {
|
|
return;
|
|
}
|
|
}
|
|
piVar4 = (int *)param_2[0x112];
|
|
if (piVar4 == param_2) {
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
if ((int)puVar2 - (int)param_2 >> 2 == 0xf) goto LAB_00051a1a;
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
if (*param_2 - (int)puVar2 >> 2 == 1) {
|
|
LAB_00051a1a:
|
|
uVar3 = (int)puVar2 - (int)piVar4 >> 2;
|
|
uVar7 = uVar3;
|
|
if (uVar3 < 2) {
|
|
uVar7 = 1;
|
|
}
|
|
uVar5 = uVar3 + uVar7 + 1;
|
|
uVar7 = local_24;
|
|
if (uVar3 <= uVar5) {
|
|
uVar7 = uVar5;
|
|
}
|
|
uVar3 = local_24;
|
|
if (uVar5 < 0x3fffffff) {
|
|
uVar3 = uVar7;
|
|
}
|
|
FUN_000506a4(param_2,uVar3);
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
}
|
|
}
|
|
*puVar2 = param_4;
|
|
puVar2[1] = 0;
|
|
param_2[0x10] = (int)(puVar2 + 1);
|
|
joined_r0x00051a58:
|
|
if ((pcVar8 != pcVar9) && (pcVar8 = pcVar8 + 1, pcVar8 != pcVar9)) {
|
|
do {
|
|
uVar1 = (**(code **)(*param_3 + 0x28))(param_3,*pcVar8);
|
|
if ((int *)param_2[0x112] == param_2) {
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
if ((int)puVar2 - (int)param_2 >> 2 == 0xf) goto LAB_000519c4;
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
if (*param_2 - (int)puVar2 >> 2 == 1) {
|
|
LAB_000519c4:
|
|
uVar3 = (int)puVar2 - param_2[0x112] >> 2;
|
|
uVar7 = uVar3;
|
|
if (uVar3 < 2) {
|
|
uVar7 = 1;
|
|
}
|
|
uVar5 = uVar3 + uVar7 + 1;
|
|
uVar7 = local_24;
|
|
if (uVar3 <= uVar5) {
|
|
uVar7 = uVar5;
|
|
}
|
|
uVar3 = local_24;
|
|
if (uVar5 < 0x3fffffff) {
|
|
uVar3 = uVar7;
|
|
}
|
|
FUN_000506a4(param_2,uVar3);
|
|
puVar2 = (undefined4 *)param_2[0x10];
|
|
}
|
|
}
|
|
*puVar2 = uVar1;
|
|
puVar2[1] = 0;
|
|
param_2[0x10] = (int)(puVar2 + 1);
|
|
pcVar8 = pcVar8 + 1;
|
|
} while (pcVar9 != pcVar8);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00051a60 @ 00051a60
|
|
|
|
void FUN_00051a60(int param_1,int param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char *pcVar2;
|
|
char *pcVar3;
|
|
int iVar4;
|
|
char *pcVar5;
|
|
|
|
if (param_2 == 0x2e) {
|
|
return;
|
|
}
|
|
pcVar3 = *(char **)(param_1 + 0x118);
|
|
pcVar2 = *(char **)(param_1 + 0x10);
|
|
if ((int)pcVar2 - (int)pcVar3 == 0) {
|
|
return;
|
|
}
|
|
iVar4 = (int)pcVar2 - (int)pcVar3 >> 2;
|
|
pcVar5 = pcVar3;
|
|
if (0 < iVar4) {
|
|
iVar4 = iVar4 + 1;
|
|
do {
|
|
pcVar1 = pcVar5;
|
|
if ((((*pcVar5 == '.') || (pcVar1 = pcVar5 + 1, pcVar5[1] == '.')) ||
|
|
(pcVar1 = pcVar5 + 2, pcVar5[2] == '.')) || (pcVar1 = pcVar5 + 3, pcVar5[3] == '.'))
|
|
goto joined_r0x00051ada;
|
|
iVar4 = iVar4 + -1;
|
|
pcVar5 = pcVar5 + 4;
|
|
} while (1 < iVar4);
|
|
}
|
|
iVar4 = (int)pcVar2 - (int)pcVar5;
|
|
if (iVar4 != 1) {
|
|
if (iVar4 != 2) {
|
|
if (iVar4 != 3) {
|
|
return;
|
|
}
|
|
pcVar1 = pcVar5;
|
|
if (*pcVar5 == '.') goto joined_r0x00051ada;
|
|
pcVar5 = pcVar5 + 1;
|
|
}
|
|
pcVar1 = pcVar5;
|
|
if (*pcVar5 == '.') goto joined_r0x00051ada;
|
|
pcVar5 = pcVar5 + 1;
|
|
}
|
|
pcVar1 = pcVar5;
|
|
if (*pcVar5 != '.') {
|
|
return;
|
|
}
|
|
joined_r0x00051ada:
|
|
if ((pcVar1 != pcVar2) && ((int)pcVar1 - (int)pcVar3 != -1)) {
|
|
pcVar3[(int)pcVar1 - (int)pcVar3] = (char)param_2;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00051ae8 @ 00051ae8
|
|
|
|
int * FUN_00051ae8(int *param_1,undefined1 *param_2,undefined1 *param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
undefined1 *puVar2;
|
|
int *piVar3;
|
|
undefined1 *puVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
int *piVar9;
|
|
uint uVar10;
|
|
int *piVar11;
|
|
|
|
if (param_2 != param_3) {
|
|
uVar10 = (int)param_3 - (int)param_2;
|
|
piVar9 = (int *)param_1[0x46];
|
|
piVar1 = param_1 + 0x46;
|
|
if (piVar9 == param_1) {
|
|
puVar4 = (undefined1 *)param_1[4];
|
|
uVar5 = (int)param_1 + (0x10 - (int)puVar4);
|
|
}
|
|
else {
|
|
puVar4 = (undefined1 *)param_1[4];
|
|
uVar5 = *param_1 - (int)puVar4;
|
|
}
|
|
if (uVar10 < uVar5) {
|
|
puVar2 = param_2 + 1;
|
|
if (0 < (int)param_3 - (int)puVar2) {
|
|
param_3 = param_3 + (1 - (int)puVar2);
|
|
do {
|
|
puVar4 = puVar4 + 1;
|
|
*puVar4 = *puVar2;
|
|
param_3 = param_3 + -1;
|
|
puVar2 = puVar2 + 1;
|
|
} while (1 < (int)param_3);
|
|
puVar4 = (undefined1 *)param_1[4];
|
|
}
|
|
puVar4[uVar10] = 0;
|
|
*(undefined1 *)param_1[4] = *param_2;
|
|
param_1[4] = param_1[4] + uVar10;
|
|
}
|
|
else {
|
|
uVar5 = (int)puVar4 - (int)piVar9;
|
|
if (-uVar5 - 2 < uVar10) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar7 = uVar5;
|
|
if (uVar5 <= uVar10) {
|
|
uVar7 = uVar10;
|
|
}
|
|
uVar8 = uVar5 + uVar7 + 1;
|
|
uVar6 = 0xfffffffe;
|
|
if (uVar5 <= uVar8) {
|
|
uVar6 = uVar8;
|
|
}
|
|
uVar8 = 0xfffffffe;
|
|
if (uVar5 + uVar7 != -2) {
|
|
uVar8 = uVar6;
|
|
}
|
|
if (uVar8 >> 1 < 0x81) {
|
|
piVar3 = param_1 + 5;
|
|
}
|
|
else {
|
|
piVar3 = (int *)operator_new(uVar8);
|
|
puVar4 = (undefined1 *)param_1[4];
|
|
piVar9 = (int *)*piVar1;
|
|
}
|
|
piVar11 = piVar3;
|
|
if (0 < (int)puVar4 - (int)piVar9) {
|
|
puVar4 = puVar4 + (1 - (int)piVar9);
|
|
do {
|
|
*(char *)piVar11 = (char)*piVar9;
|
|
puVar4 = puVar4 + -1;
|
|
piVar11 = (int *)((int)piVar11 + 1);
|
|
piVar9 = (int *)((int)piVar9 + 1);
|
|
} while (1 < (int)puVar4);
|
|
}
|
|
if (0 < (int)uVar10) {
|
|
param_3 = param_3 + (1 - (int)param_2);
|
|
do {
|
|
*(undefined1 *)piVar11 = *param_2;
|
|
param_3 = param_3 + -1;
|
|
piVar11 = (int *)((int)piVar11 + 1);
|
|
param_2 = param_2 + 1;
|
|
} while (1 < (int)param_3);
|
|
}
|
|
*(undefined1 *)piVar11 = 0;
|
|
piVar9 = (int *)*piVar1;
|
|
if (((piVar9 != param_1) && (piVar9 != (int *)0x0)) && (param_1 + 5 != piVar9)) {
|
|
if ((uint)(*param_1 - (int)piVar9) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar9,*param_1 - (int)piVar9);
|
|
}
|
|
else {
|
|
operator_delete(piVar9);
|
|
}
|
|
}
|
|
param_1[4] = (int)piVar11;
|
|
*param_1 = (int)((int)piVar3 + uVar8);
|
|
*piVar1 = (int)piVar3;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00051c30 @ 00051c30
|
|
|
|
int * FUN_00051c30(int *param_1,undefined1 *param_2,undefined1 *param_3)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
undefined1 *puVar5;
|
|
undefined1 *puVar6;
|
|
undefined1 *puVar7;
|
|
int *piVar8;
|
|
int *local_1c;
|
|
|
|
if (param_2 != param_3) {
|
|
puVar1 = param_3 + -(int)param_2;
|
|
piVar4 = (int *)param_1[0x46];
|
|
piVar2 = param_1 + 0x46;
|
|
if (piVar4 == param_1) {
|
|
local_1c = (int *)param_1[4];
|
|
puVar6 = (undefined1 *)((int)param_1 + (0x10 - (int)local_1c));
|
|
}
|
|
else {
|
|
local_1c = (int *)param_1[4];
|
|
puVar6 = (undefined1 *)(*param_1 - (int)local_1c);
|
|
}
|
|
piVar8 = param_1 + 4;
|
|
if (puVar1 < puVar6) {
|
|
*(undefined1 *)local_1c = *param_2;
|
|
param_2 = param_2 + 1;
|
|
if (param_2 != param_3) {
|
|
__aeabi_memcpy(*piVar8 + 1,param_2,(int)param_3 - (int)param_2);
|
|
}
|
|
puVar1[*piVar8] = 0;
|
|
*piVar8 = (int)(puVar1 + *piVar8);
|
|
}
|
|
else {
|
|
puVar6 = (undefined1 *)((int)local_1c - (int)piVar4);
|
|
if ((undefined1 *)(-2 - (int)puVar6) < puVar1) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
puVar7 = puVar6;
|
|
if (puVar6 <= puVar1) {
|
|
puVar7 = puVar1;
|
|
}
|
|
puVar7 = puVar6 + (int)puVar7;
|
|
puVar5 = (undefined1 *)0xfffffffe;
|
|
if (puVar6 <= puVar7 + 1) {
|
|
puVar5 = puVar7 + 1;
|
|
}
|
|
puVar6 = (undefined1 *)0xfffffffe;
|
|
if (puVar7 != (undefined1 *)0xfffffffe) {
|
|
puVar6 = puVar5;
|
|
}
|
|
if ((uint)puVar6 >> 1 < 0x81) {
|
|
piVar3 = param_1 + 5;
|
|
}
|
|
else {
|
|
piVar3 = (int *)operator_new((uint)puVar6);
|
|
local_1c = (int *)*piVar8;
|
|
piVar4 = (int *)*piVar2;
|
|
}
|
|
piVar8 = piVar3;
|
|
if (local_1c != piVar4) {
|
|
__aeabi_memcpy(piVar3,piVar4,(int)local_1c - (int)piVar4);
|
|
piVar8 = (int *)((int)piVar3 + ((int)local_1c - (int)piVar4));
|
|
}
|
|
__aeabi_memcpy(piVar8,param_2);
|
|
*(undefined1 *)((int)piVar8 + (int)puVar1) = 0;
|
|
piVar4 = (int *)*piVar2;
|
|
if (((piVar4 != param_1) && (piVar4 != (int *)0x0)) && (param_1 + 5 != piVar4)) {
|
|
if ((uint)(*param_1 - (int)piVar4) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar4,*param_1 - (int)piVar4);
|
|
}
|
|
else {
|
|
operator_delete(piVar4);
|
|
}
|
|
}
|
|
param_1[4] = (int)((int)piVar8 + (int)puVar1);
|
|
*param_1 = (int)((int)piVar3 + (int)puVar6);
|
|
*piVar2 = (int)piVar3;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 00051d58
|
|
|
|
/* std::numpunct<char>::do_decimal_point() const */
|
|
|
|
undefined4 std::numpunct<char>::do_decimal_point(void)
|
|
|
|
{
|
|
return 0x2e;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 00051d5c
|
|
|
|
/* std::numpunct<char>::do_thousands_sep() const */
|
|
|
|
undefined4 std::numpunct<char>::do_thousands_sep(void)
|
|
|
|
{
|
|
return 0x2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 00051d60
|
|
|
|
/* std::numpunct<char>::do_grouping() const */
|
|
|
|
void __thiscall std::numpunct<char>::do_grouping(numpunct<char> *this)
|
|
|
|
{
|
|
*this = (numpunct<char>)0x0;
|
|
*(numpunct<char> **)(this + 0x10) = this;
|
|
*(numpunct<char> **)(this + 0x14) = this;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_truename @ 00051d6c
|
|
|
|
/* std::numpunct<char>::do_truename() const */
|
|
|
|
void __thiscall std::numpunct<char>::do_truename(numpunct<char> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,&DAT_00051d84,auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_falsename @ 00051d8c
|
|
|
|
/* std::numpunct<char>::do_falsename() const */
|
|
|
|
void __thiscall std::numpunct<char>::do_falsename(numpunct<char> *this)
|
|
|
|
{
|
|
undefined1 auStack_c [4];
|
|
|
|
FUN_00031c38(this,"false",auStack_c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~numpunct @ 00051dac
|
|
|
|
/* std::numpunct<char>::~numpunct() */
|
|
|
|
void __thiscall std::numpunct<char>::~numpunct(numpunct<char> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~numpunct @ 00051db6
|
|
|
|
/* std::numpunct<char>::~numpunct() */
|
|
|
|
void __thiscall std::numpunct<char>::~numpunct(numpunct<char> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_decimal_point @ 00051dd6
|
|
|
|
/* std::numpunct<wchar_t>::do_decimal_point() const */
|
|
|
|
undefined4 std::numpunct<wchar_t>::do_decimal_point(void)
|
|
|
|
{
|
|
return 0x2e;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_thousands_sep @ 00051dda
|
|
|
|
/* std::numpunct<wchar_t>::do_thousands_sep() const */
|
|
|
|
undefined4 std::numpunct<wchar_t>::do_thousands_sep(void)
|
|
|
|
{
|
|
return 0x2c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_grouping @ 00051dde
|
|
|
|
/* std::numpunct<wchar_t>::do_grouping() const */
|
|
|
|
void __thiscall std::numpunct<wchar_t>::do_grouping(numpunct<wchar_t> *this)
|
|
|
|
{
|
|
*this = (numpunct<wchar_t>)0x0;
|
|
*(numpunct<wchar_t> **)(this + 0x10) = this;
|
|
*(numpunct<wchar_t> **)(this + 0x14) = this;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_truename @ 00051de8
|
|
|
|
/* std::numpunct<wchar_t>::do_truename() const */
|
|
|
|
void __thiscall std::numpunct<wchar_t>::do_truename(numpunct<wchar_t> *this)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
*(numpunct<wchar_t> **)(this + 0x40) = this;
|
|
*(numpunct<wchar_t> **)(this + 0x44) = this;
|
|
sVar1 = wcslen(L"true");
|
|
FUN_0004fe38(this,&DAT_00051e34,&DAT_00051e34 + sVar1 * 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_falsename @ 00051e48
|
|
|
|
/* std::numpunct<wchar_t>::do_falsename() const */
|
|
|
|
void __thiscall std::numpunct<wchar_t>::do_falsename(numpunct<wchar_t> *this)
|
|
|
|
{
|
|
size_t sVar1;
|
|
|
|
*(numpunct<wchar_t> **)(this + 0x40) = this;
|
|
*(numpunct<wchar_t> **)(this + 0x44) = this;
|
|
sVar1 = wcslen(L"false");
|
|
FUN_0004fe38(this,L"false",L"false" + sVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~numpunct @ 00051eac
|
|
|
|
/* std::numpunct<wchar_t>::~numpunct() */
|
|
|
|
void __thiscall std::numpunct<wchar_t>::~numpunct(numpunct<wchar_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~numpunct @ 00051eb6
|
|
|
|
/* std::numpunct<wchar_t>::~numpunct() */
|
|
|
|
void __thiscall std::numpunct<wchar_t>::~numpunct(numpunct<wchar_t> *this)
|
|
|
|
{
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __write_formatted_time @ 00051ed8
|
|
|
|
/* std::priv::__write_formatted_time(std::priv::__basic_iostring<char>&, std::ctype<char> const&,
|
|
char, char, std::priv::_Time_Info const&, tm const*) */
|
|
|
|
void std::priv::__write_formatted_time
|
|
(__basic_iostring *param_1,ctype *param_2,char param_3,char param_4,
|
|
_Time_Info *param_5,tm *param_6)
|
|
|
|
{
|
|
FUN_00051ef0(param_1,param_2,(int)param_3,(int)param_4,param_5,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00051ef0 @ 00051ef0
|
|
|
|
void FUN_00051ef0(undefined4 param_1,int *param_2,int param_3,int param_4,int param_5,tm *param_6)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
int extraout_r1;
|
|
int extraout_r1_00;
|
|
int extraout_r1_01;
|
|
int extraout_r1_02;
|
|
int extraout_r1_03;
|
|
uint extraout_r1_04;
|
|
int extraout_r1_05;
|
|
int *piVar6;
|
|
int extraout_r1_06;
|
|
time_t extraout_r1_07;
|
|
uint uVar7;
|
|
int extraout_r1_08;
|
|
int extraout_r1_09;
|
|
int extraout_r1_10;
|
|
int extraout_r1_11;
|
|
int extraout_r1_12;
|
|
char *pcVar8;
|
|
int iVar9;
|
|
int iVar10;
|
|
time_t tVar11;
|
|
code *pcVar12;
|
|
undefined1 uVar13;
|
|
int iVar14;
|
|
char *pcVar15;
|
|
char *pcVar16;
|
|
undefined1 auStack_a8 [4];
|
|
int local_a4 [4];
|
|
int *local_94;
|
|
int *local_90;
|
|
undefined1 auStack_8c [4];
|
|
int local_88 [4];
|
|
int *local_78;
|
|
int *local_74;
|
|
undefined1 auStack_70 [4];
|
|
int local_6c [4];
|
|
int *local_5c;
|
|
int *local_58;
|
|
char acStack_54 [64];
|
|
|
|
switch(param_3) {
|
|
case 0x25:
|
|
pcVar12 = *(code **)(*param_2 + 0x18);
|
|
uVar3 = 0x25;
|
|
goto LAB_00052440;
|
|
case 0x41:
|
|
param_5 = param_5 + param_6->tm_wday * 0x18;
|
|
uVar3 = *(undefined4 *)(param_5 + 0x130);
|
|
iVar2 = 0x4d;
|
|
goto LAB_000520c0;
|
|
case 0x42:
|
|
param_5 = param_5 + param_6->tm_mon * 0x18;
|
|
uVar3 = *(undefined4 *)(param_5 + 0x2f8);
|
|
iVar2 = 0xbf;
|
|
goto LAB_000520c0;
|
|
case 0x43:
|
|
iVar2 = param_6->tm_mday;
|
|
goto LAB_00052320;
|
|
case 0x44:
|
|
pcVar15 = *(char **)(param_5 + 0x28);
|
|
pcVar8 = *(char **)(param_5 + 0x2c);
|
|
while (pcVar15 != pcVar8) {
|
|
if (*pcVar8 == '%') {
|
|
pcVar16 = pcVar8 + 2;
|
|
if (pcVar8[1] != '#') {
|
|
pcVar16 = pcVar8 + 1;
|
|
}
|
|
uVar13 = 0;
|
|
if (pcVar8[1] == '#') {
|
|
uVar13 = 0x23;
|
|
}
|
|
FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6);
|
|
pcVar8 = pcVar16 + 1;
|
|
}
|
|
else {
|
|
FUN_00054550(param_1,1);
|
|
pcVar8 = pcVar8 + 1;
|
|
}
|
|
}
|
|
break;
|
|
case 0x47:
|
|
case 0x67:
|
|
iVar9 = param_6->tm_year;
|
|
iVar5 = param_6->tm_wday;
|
|
iVar14 = param_6->tm_yday;
|
|
uVar4 = iVar9 + 0x76c;
|
|
__aeabi_idivmod((iVar14 + 0x17e) - iVar5,7);
|
|
iVar2 = (iVar14 + 3) - extraout_r1;
|
|
if (iVar2 < 0) {
|
|
uVar7 = iVar9 + 0x76b;
|
|
iVar2 = 0x16d;
|
|
if ((uVar7 & 3) == 0) {
|
|
__aeabi_idivmod(uVar7,100);
|
|
iVar2 = 0x16e;
|
|
if (extraout_r1_08 == 0) {
|
|
__aeabi_idivmod(uVar7,400);
|
|
iVar2 = 0x16e;
|
|
if (extraout_r1_09 != 0) {
|
|
iVar2 = 0x16d;
|
|
}
|
|
}
|
|
}
|
|
__aeabi_idivmod((iVar2 + iVar14 + 0x17e) - iVar5,7);
|
|
iVar2 = (iVar2 + iVar14 + 3) - extraout_r1_10;
|
|
}
|
|
else {
|
|
iVar10 = 0x16d;
|
|
if ((uVar4 & 3) == 0) {
|
|
__aeabi_idivmod(uVar4,100);
|
|
iVar10 = 0x16e;
|
|
if (extraout_r1_00 == 0) {
|
|
__aeabi_idivmod(uVar4,400);
|
|
iVar10 = 0x16e;
|
|
if (extraout_r1_01 != 0) {
|
|
iVar10 = 0x16d;
|
|
}
|
|
}
|
|
}
|
|
__aeabi_idivmod(((iVar14 - iVar10) + 0x17e) - iVar5,7);
|
|
iVar5 = ((iVar14 - iVar10) + 3) - extraout_r1_02;
|
|
uVar7 = iVar9 + 0x76d;
|
|
if (iVar5 < 0) {
|
|
uVar7 = uVar4;
|
|
}
|
|
if (-1 < iVar5) {
|
|
iVar2 = iVar5;
|
|
}
|
|
}
|
|
if (param_3 != 0x47) {
|
|
if (param_3 == 0x67) {
|
|
__aeabi_idivmod(uVar7,100);
|
|
__aeabi_idivmod(extraout_r1_03 + 100,100);
|
|
uVar7 = extraout_r1_04;
|
|
}
|
|
else {
|
|
iVar2 = __divsi3(iVar2,7);
|
|
uVar7 = iVar2 + 1;
|
|
}
|
|
}
|
|
uVar4 = FUN_00050030(acStack_54,0,uVar7);
|
|
goto LAB_000525d2;
|
|
case 0x48:
|
|
if (param_4 == 0x23) {
|
|
pcVar8 = "%ld";
|
|
}
|
|
else {
|
|
pcVar8 = "%.2ld";
|
|
}
|
|
sprintf(acStack_54,pcVar8,param_6->tm_hour);
|
|
iVar2 = param_6->tm_hour;
|
|
goto LAB_000525ba;
|
|
case 0x49:
|
|
if (param_4 == 0x23) {
|
|
pcVar8 = "%ld";
|
|
}
|
|
else {
|
|
pcVar8 = "%.2ld";
|
|
}
|
|
__aeabi_idivmod(param_6->tm_hour,0xc);
|
|
iVar2 = 0xc;
|
|
if (extraout_r1_11 != 0) {
|
|
iVar2 = extraout_r1_11;
|
|
}
|
|
sprintf(acStack_54,pcVar8,iVar2);
|
|
__aeabi_idivmod(param_6->tm_hour,0xc);
|
|
uVar4 = 2;
|
|
if ((extraout_r1_12 != 0) && (uVar4 = 1, 9 < extraout_r1_12)) {
|
|
uVar4 = 2;
|
|
}
|
|
if (param_4 != 0x23) {
|
|
uVar4 = 2;
|
|
}
|
|
uVar4 = uVar4 | (uint)acStack_54;
|
|
goto LAB_000525d2;
|
|
case 0x4d:
|
|
if (param_4 == 0x23) {
|
|
pcVar8 = "%ld";
|
|
}
|
|
else {
|
|
pcVar8 = "%.2ld";
|
|
}
|
|
sprintf(acStack_54,pcVar8,param_6->tm_min);
|
|
iVar2 = param_6->tm_min;
|
|
goto LAB_000525ba;
|
|
case 0x52:
|
|
FUN_00031c38(local_6c,&DAT_000648a8,auStack_70);
|
|
piVar1 = local_58;
|
|
local_90 = local_58;
|
|
while (local_5c != piVar1) {
|
|
local_58 = local_90;
|
|
if ((char)*piVar1 == '%') {
|
|
piVar6 = (int *)((int)piVar1 + 2);
|
|
if (*(char *)((int)piVar1 + 1) != '#') {
|
|
piVar6 = (int *)((int)piVar1 + 1);
|
|
}
|
|
uVar13 = 0;
|
|
if (*(char *)((int)piVar1 + 1) == '#') {
|
|
uVar13 = 0x23;
|
|
}
|
|
FUN_00051ef0(param_1,param_2,(char)*piVar6,uVar13,param_5,param_6);
|
|
piVar1 = (int *)((int)piVar6 + 1);
|
|
local_90 = local_58;
|
|
}
|
|
else {
|
|
FUN_00054550(param_1,1);
|
|
piVar1 = (int *)((int)piVar1 + 1);
|
|
local_90 = local_58;
|
|
}
|
|
}
|
|
if ((local_90 != local_6c) && (local_90 != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_6c[0] - (int)local_90)) {
|
|
LAB_00052652:
|
|
operator_delete(local_90);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_90,local_6c[0] - (int)local_90);
|
|
}
|
|
break;
|
|
case 0x53:
|
|
if (param_4 == 0x23) {
|
|
pcVar8 = "%ld";
|
|
}
|
|
else {
|
|
pcVar8 = "%.2ld";
|
|
}
|
|
sprintf(acStack_54,pcVar8,param_6->tm_sec);
|
|
iVar2 = param_6->tm_sec;
|
|
goto LAB_000525ba;
|
|
case 0x54:
|
|
FUN_00031c38(local_a4,&DAT_00066294,auStack_a8);
|
|
piVar1 = local_90;
|
|
while (local_94 != piVar1) {
|
|
if ((char)*piVar1 == '%') {
|
|
piVar6 = (int *)((int)piVar1 + 2);
|
|
if (*(char *)((int)piVar1 + 1) != '#') {
|
|
piVar6 = (int *)((int)piVar1 + 1);
|
|
}
|
|
uVar13 = 0;
|
|
if (*(char *)((int)piVar1 + 1) == '#') {
|
|
uVar13 = 0x23;
|
|
}
|
|
FUN_00051ef0(param_1,param_2,(char)*piVar6,uVar13,param_5,param_6);
|
|
piVar1 = (int *)((int)piVar6 + 1);
|
|
}
|
|
else {
|
|
FUN_00054550(param_1,1);
|
|
piVar1 = (int *)((int)piVar1 + 1);
|
|
}
|
|
}
|
|
if ((local_90 != local_a4) && (local_90 != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_a4[0] - (int)local_90)) goto LAB_00052652;
|
|
std::__node_alloc::_M_deallocate(local_90,local_a4[0] - (int)local_90);
|
|
}
|
|
break;
|
|
case 0x55:
|
|
iVar2 = (param_6->tm_yday + 7) - param_6->tm_wday;
|
|
goto LAB_00052218;
|
|
case 0x57:
|
|
iVar2 = 1;
|
|
if (param_6->tm_wday != 0) {
|
|
iVar2 = 8 - param_6->tm_wday;
|
|
}
|
|
iVar2 = param_6->tm_yday + iVar2;
|
|
LAB_00052218:
|
|
tVar11 = __divsi3(iVar2,7);
|
|
goto LAB_00052482;
|
|
case 0x58:
|
|
pcVar15 = *(char **)(param_5 + 0x10);
|
|
pcVar8 = *(char **)(param_5 + 0x14);
|
|
while (pcVar15 != pcVar8) {
|
|
if (*pcVar8 == '%') {
|
|
pcVar16 = pcVar8 + 2;
|
|
if (pcVar8[1] != '#') {
|
|
pcVar16 = pcVar8 + 1;
|
|
}
|
|
uVar13 = 0;
|
|
if (pcVar8[1] == '#') {
|
|
uVar13 = 0x23;
|
|
}
|
|
FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6);
|
|
pcVar8 = pcVar16 + 1;
|
|
}
|
|
else {
|
|
FUN_00054550(param_1,1);
|
|
pcVar8 = pcVar8 + 1;
|
|
}
|
|
}
|
|
break;
|
|
case 0x59:
|
|
tVar11 = param_6->tm_year + 0x76c;
|
|
goto LAB_00052482;
|
|
case 0x61:
|
|
param_5 = param_5 + param_6->tm_wday * 0x18;
|
|
uVar3 = *(undefined4 *)(param_5 + 0x88);
|
|
iVar2 = 0x8c;
|
|
goto LAB_00052346;
|
|
case 0x62:
|
|
case 0x68:
|
|
param_5 = param_5 + param_6->tm_mon * 0x18;
|
|
uVar3 = *(undefined4 *)(param_5 + 0x1d8);
|
|
iVar2 = 0x77;
|
|
LAB_000520c0:
|
|
iVar2 = iVar2 << 2;
|
|
LAB_00052346:
|
|
FUN_0003dfb8(param_1,*(undefined4 *)(param_5 + iVar2),uVar3,local_6c);
|
|
return;
|
|
case 99:
|
|
iVar2 = param_5 + 0x30;
|
|
if (param_4 == 0x23) {
|
|
iVar2 = param_5 + 0x60;
|
|
}
|
|
pcVar15 = *(char **)(iVar2 + 0x10);
|
|
pcVar8 = *(char **)(iVar2 + 0x14);
|
|
while (pcVar15 != pcVar8) {
|
|
if (*pcVar8 == '%') {
|
|
pcVar16 = pcVar8 + 2;
|
|
if (pcVar8[1] != '#') {
|
|
pcVar16 = pcVar8 + 1;
|
|
}
|
|
uVar13 = 0;
|
|
if (pcVar8[1] == '#') {
|
|
uVar13 = 0x23;
|
|
}
|
|
FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6);
|
|
pcVar8 = pcVar16 + 1;
|
|
}
|
|
else {
|
|
FUN_00054550(param_1,1);
|
|
pcVar8 = pcVar8 + 1;
|
|
}
|
|
}
|
|
break;
|
|
case 100:
|
|
if (param_4 == 0x23) {
|
|
pcVar8 = "%ld";
|
|
}
|
|
else {
|
|
pcVar8 = "%.2ld";
|
|
}
|
|
sprintf(acStack_54,pcVar8,param_6->tm_mday);
|
|
iVar2 = param_6->tm_mday;
|
|
LAB_000525ba:
|
|
uVar4 = 1;
|
|
if (9 < iVar2) {
|
|
LAB_000525c2:
|
|
uVar4 = 2;
|
|
}
|
|
LAB_000525c4:
|
|
if (param_4 != 0x23) {
|
|
uVar4 = 2;
|
|
}
|
|
uVar4 = uVar4 | (uint)acStack_54;
|
|
goto LAB_000525d2;
|
|
case 0x65:
|
|
iVar2 = param_6->tm_mday;
|
|
goto LAB_00052320;
|
|
case 0x6a:
|
|
tVar11 = param_6->tm_yday + 1;
|
|
goto LAB_00052482;
|
|
case 0x6b:
|
|
iVar2 = param_6->tm_hour;
|
|
goto LAB_00052320;
|
|
case 0x6c:
|
|
__aeabi_idivmod(param_6->tm_hour,0xc);
|
|
iVar2 = extraout_r1_05;
|
|
LAB_00052320:
|
|
sprintf(acStack_54,"%2ld",iVar2);
|
|
uVar4 = (uint)acStack_54 | 2;
|
|
goto LAB_000525d2;
|
|
case 0x6d:
|
|
if (param_4 == 0x23) {
|
|
pcVar8 = "%ld";
|
|
}
|
|
else {
|
|
pcVar8 = "%.2ld";
|
|
}
|
|
sprintf(acStack_54,pcVar8,param_6->tm_mon + 1);
|
|
uVar4 = 1;
|
|
if (8 < param_6->tm_mon) goto LAB_000525c2;
|
|
goto LAB_000525c4;
|
|
case 0x6e:
|
|
pcVar12 = *(code **)(*param_2 + 0x18);
|
|
uVar3 = 10;
|
|
LAB_00052440:
|
|
uVar3 = (*pcVar12)(param_2,uVar3);
|
|
FUN_00054550(param_1,1,uVar3);
|
|
return;
|
|
case 0x70:
|
|
iVar2 = __divsi3(param_6->tm_hour,0xc);
|
|
param_5 = param_5 + iVar2 * 0x18;
|
|
uVar3 = *(undefined4 *)(param_5 + 0x418);
|
|
iVar2 = 0x41c;
|
|
goto LAB_00052346;
|
|
case 0x72:
|
|
FUN_00031c38(local_88,&DAT_000662a4,auStack_8c);
|
|
piVar1 = local_74;
|
|
local_90 = local_74;
|
|
while (local_78 != piVar1) {
|
|
local_74 = local_90;
|
|
if ((char)*piVar1 == '%') {
|
|
piVar6 = (int *)((int)piVar1 + 2);
|
|
if (*(char *)((int)piVar1 + 1) != '#') {
|
|
piVar6 = (int *)((int)piVar1 + 1);
|
|
}
|
|
uVar13 = 0;
|
|
if (*(char *)((int)piVar1 + 1) == '#') {
|
|
uVar13 = 0x23;
|
|
}
|
|
FUN_00051ef0(param_1,param_2,(char)*piVar6,uVar13,param_5,param_6);
|
|
piVar1 = (int *)((int)piVar6 + 1);
|
|
local_90 = local_74;
|
|
}
|
|
else {
|
|
FUN_00054550(param_1,1);
|
|
piVar1 = (int *)((int)piVar1 + 1);
|
|
local_90 = local_74;
|
|
}
|
|
}
|
|
if ((local_90 != local_88) && (local_90 != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_88[0] - (int)local_90)) goto LAB_00052652;
|
|
std::__node_alloc::_M_deallocate(local_90,local_88[0] - (int)local_90);
|
|
}
|
|
break;
|
|
case 0x73:
|
|
tVar11 = mktime(param_6);
|
|
goto LAB_00052482;
|
|
case 0x74:
|
|
uVar3 = (**(code **)(*param_2 + 0x18))(param_2,9);
|
|
FUN_00054550(param_1,1,uVar3);
|
|
goto LAB_00052452;
|
|
case 0x75:
|
|
LAB_00052452:
|
|
__aeabi_idivmod(param_6->tm_wday + 6,7);
|
|
uVar4 = FUN_00050030(acStack_54,0,extraout_r1_06 + 1);
|
|
goto LAB_000525d2;
|
|
case 0x77:
|
|
tVar11 = param_6->tm_wday;
|
|
goto LAB_00052482;
|
|
case 0x78:
|
|
iVar2 = param_5 + 0x18;
|
|
if (param_4 == 0x23) {
|
|
iVar2 = param_5 + 0x48;
|
|
}
|
|
pcVar15 = *(char **)(iVar2 + 0x10);
|
|
pcVar8 = *(char **)(iVar2 + 0x14);
|
|
while (pcVar15 != pcVar8) {
|
|
if (*pcVar8 == '%') {
|
|
pcVar16 = pcVar8 + 2;
|
|
if (pcVar8[1] != '#') {
|
|
pcVar16 = pcVar8 + 1;
|
|
}
|
|
uVar13 = 0;
|
|
if (pcVar8[1] == '#') {
|
|
uVar13 = 0x23;
|
|
}
|
|
FUN_00051ef0(param_1,param_2,*pcVar16,uVar13,param_5,param_6);
|
|
pcVar8 = pcVar16 + 1;
|
|
}
|
|
else {
|
|
FUN_00054550(param_1,1);
|
|
pcVar8 = pcVar8 + 1;
|
|
}
|
|
}
|
|
break;
|
|
case 0x79:
|
|
__aeabi_idivmod(param_6->tm_year + 0x76c,100);
|
|
tVar11 = extraout_r1_07;
|
|
LAB_00052482:
|
|
uVar4 = FUN_00050030(acStack_54,0,tVar11);
|
|
LAB_000525d2:
|
|
FUN_00051c30(param_1,acStack_54,uVar4,local_6c);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __write_formatted_time @ 0005271c
|
|
|
|
/* std::priv::__write_formatted_time(std::priv::__basic_iostring<wchar_t>&, std::ctype<wchar_t>
|
|
const&, char, char, std::priv::_WTime_Info const&, tm const*) */
|
|
|
|
void std::priv::__write_formatted_time
|
|
(__basic_iostring *param_1,ctype *param_2,char param_3,char param_4,
|
|
_WTime_Info *param_5,tm *param_6)
|
|
|
|
{
|
|
FUN_00052734(param_1,param_2,(int)param_3,(int)param_4,param_5,param_6);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00052734 @ 00052734
|
|
|
|
void FUN_00052734(int *param_1,int *param_2,int param_3,int param_4,int param_5,tm *param_6)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
int extraout_r1;
|
|
int extraout_r1_00;
|
|
int extraout_r1_01;
|
|
int extraout_r1_02;
|
|
int extraout_r1_03;
|
|
uint extraout_r1_04;
|
|
int extraout_r1_05;
|
|
undefined4 *puVar6;
|
|
time_t extraout_r1_06;
|
|
int extraout_r1_07;
|
|
int extraout_r1_08;
|
|
int extraout_r1_09;
|
|
int extraout_r1_10;
|
|
int extraout_r1_11;
|
|
char *pcVar7;
|
|
int extraout_r1_12;
|
|
int iVar8;
|
|
int iVar9;
|
|
time_t tVar10;
|
|
code *pcVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
int *piVar14;
|
|
undefined1 auStack_190 [4];
|
|
int local_18c [5];
|
|
int *local_178;
|
|
undefined1 auStack_174 [4];
|
|
int local_170 [5];
|
|
int *local_15c;
|
|
undefined1 auStack_158 [4];
|
|
char acStack_154 [64];
|
|
int local_114 [5];
|
|
int *local_100;
|
|
|
|
switch(param_3) {
|
|
case 0x25:
|
|
pcVar11 = *(code **)(*param_2 + 0x28);
|
|
uVar1 = 0x25;
|
|
goto LAB_00052b7e;
|
|
default:
|
|
goto switchD_0005275e_caseD_26;
|
|
case 0x41:
|
|
param_5 = param_5 + param_6->tm_wday * 0x48;
|
|
uVar1 = *(undefined4 *)(param_5 + 0x2b0);
|
|
iVar4 = 0x2b4;
|
|
goto LAB_00052b1e;
|
|
case 0x42:
|
|
param_5 = param_5 + param_6->tm_mon * 0x48;
|
|
uVar1 = *(undefined4 *)(param_5 + 0x808);
|
|
iVar4 = 0x80c;
|
|
goto LAB_00052b1e;
|
|
case 0x43:
|
|
iVar4 = param_6->tm_mday;
|
|
goto LAB_00052a90;
|
|
case 0x44:
|
|
iVar4 = param_5 + 0x18;
|
|
goto LAB_00052b6c;
|
|
case 0x47:
|
|
case 0x67:
|
|
iVar3 = param_6->tm_year;
|
|
iVar5 = param_6->tm_wday;
|
|
iVar8 = param_6->tm_yday;
|
|
uVar2 = iVar3 + 0x76c;
|
|
__aeabi_idivmod((iVar8 + 0x17e) - iVar5,7);
|
|
iVar4 = (iVar8 + 3) - extraout_r1;
|
|
if (iVar4 < 0) {
|
|
uVar12 = iVar3 + 0x76b;
|
|
iVar4 = 0x16d;
|
|
if ((uVar12 & 3) == 0) {
|
|
__aeabi_idivmod(uVar12,100);
|
|
iVar4 = 0x16e;
|
|
if (extraout_r1_07 == 0) {
|
|
__aeabi_idivmod(uVar12,400);
|
|
iVar4 = 0x16e;
|
|
if (extraout_r1_08 != 0) {
|
|
iVar4 = 0x16d;
|
|
}
|
|
}
|
|
}
|
|
__aeabi_idivmod((iVar4 + iVar8 + 0x17e) - iVar5,7);
|
|
iVar4 = (iVar4 + iVar8 + 3) - extraout_r1_09;
|
|
}
|
|
else {
|
|
iVar9 = 0x16d;
|
|
if ((uVar2 & 3) == 0) {
|
|
__aeabi_idivmod(uVar2,100);
|
|
iVar9 = 0x16e;
|
|
if (extraout_r1_00 == 0) {
|
|
__aeabi_idivmod(uVar2,400);
|
|
iVar9 = 0x16e;
|
|
if (extraout_r1_01 != 0) {
|
|
iVar9 = 0x16d;
|
|
}
|
|
}
|
|
}
|
|
__aeabi_idivmod(((iVar8 - iVar9) + 0x17e) - iVar5,7);
|
|
iVar5 = ((iVar8 - iVar9) + 3) - extraout_r1_02;
|
|
uVar12 = iVar3 + 0x76d;
|
|
if (iVar5 < 0) {
|
|
uVar12 = uVar2;
|
|
}
|
|
if (-1 < iVar5) {
|
|
iVar4 = iVar5;
|
|
}
|
|
}
|
|
if (param_3 != 0x47) {
|
|
if (param_3 == 0x67) {
|
|
__aeabi_idivmod(uVar12,100);
|
|
__aeabi_idivmod(extraout_r1_03 + 100,100);
|
|
uVar12 = extraout_r1_04;
|
|
}
|
|
else {
|
|
iVar4 = __divsi3(iVar4,7);
|
|
uVar12 = iVar4 + 1;
|
|
}
|
|
}
|
|
iVar4 = FUN_00050030(acStack_154,0,uVar12);
|
|
(**(code **)(*param_2 + 0x2c))(param_2,acStack_154,iVar4,local_114);
|
|
iVar4 = iVar4 - (int)acStack_154;
|
|
goto LAB_00052e3e;
|
|
case 0x48:
|
|
if (param_4 == 0x23) {
|
|
pcVar7 = "%ld";
|
|
}
|
|
else {
|
|
pcVar7 = "%.2ld";
|
|
}
|
|
sprintf(acStack_154,pcVar7,param_6->tm_hour);
|
|
iVar4 = param_6->tm_hour;
|
|
goto LAB_00052d1e;
|
|
case 0x49:
|
|
if (param_4 == 0x23) {
|
|
pcVar7 = "%ld";
|
|
}
|
|
else {
|
|
pcVar7 = "%.2ld";
|
|
}
|
|
__aeabi_idivmod(param_6->tm_hour,0xc);
|
|
iVar4 = 0xc;
|
|
if (extraout_r1_10 != 0) {
|
|
iVar4 = extraout_r1_10;
|
|
}
|
|
sprintf(acStack_154,pcVar7,iVar4);
|
|
__aeabi_idivmod(param_6->tm_hour,0xc);
|
|
uVar2 = 1;
|
|
if (extraout_r1_11 == 0) {
|
|
uVar2 = 2;
|
|
}
|
|
if (9 < extraout_r1_11) {
|
|
uVar2 = 2;
|
|
}
|
|
if (param_4 != 0x23) {
|
|
uVar2 = 2;
|
|
}
|
|
uVar12 = (uint)acStack_154 | uVar2;
|
|
pcVar11 = *(code **)(*param_2 + 0x2c);
|
|
goto LAB_00052d44;
|
|
case 0x4d:
|
|
if (param_4 == 0x23) {
|
|
pcVar7 = "%ld";
|
|
}
|
|
else {
|
|
pcVar7 = "%.2ld";
|
|
}
|
|
sprintf(acStack_154,pcVar7,param_6->tm_min);
|
|
iVar4 = param_6->tm_min;
|
|
goto LAB_00052d1e;
|
|
case 0x52:
|
|
FUN_00031c38(local_114,&DAT_000648a8,auStack_158);
|
|
FUN_0005467c(param_1,param_2,local_114,param_5,param_6);
|
|
if (local_100 == local_114) {
|
|
return;
|
|
}
|
|
if (local_100 == (int *)0x0) {
|
|
return;
|
|
}
|
|
if ((uint)(local_114[0] - (int)local_100) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_100,local_114[0] - (int)local_100);
|
|
return;
|
|
}
|
|
operator_delete(local_100);
|
|
return;
|
|
case 0x53:
|
|
if (param_4 == 0x23) {
|
|
pcVar7 = "%ld";
|
|
}
|
|
else {
|
|
pcVar7 = "%.2ld";
|
|
}
|
|
sprintf(acStack_154,pcVar7,param_6->tm_sec);
|
|
iVar4 = param_6->tm_sec;
|
|
goto LAB_00052d1e;
|
|
case 0x54:
|
|
FUN_00031c38(local_18c,&DAT_00066294,auStack_190);
|
|
FUN_0005467c(param_1,param_2,local_18c,param_5,param_6);
|
|
if (local_178 == local_18c) {
|
|
return;
|
|
}
|
|
if (local_178 == (int *)0x0) {
|
|
return;
|
|
}
|
|
if ((uint)(local_18c[0] - (int)local_178) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_178,local_18c[0] - (int)local_178);
|
|
return;
|
|
}
|
|
operator_delete(local_178);
|
|
return;
|
|
case 0x55:
|
|
iVar4 = (param_6->tm_yday + 7) - param_6->tm_wday;
|
|
goto LAB_00052ac8;
|
|
case 0x57:
|
|
iVar4 = 1;
|
|
if (param_6->tm_wday != 0) {
|
|
iVar4 = 8 - param_6->tm_wday;
|
|
}
|
|
iVar4 = param_6->tm_yday + iVar4;
|
|
LAB_00052ac8:
|
|
tVar10 = __divsi3(iVar4,7);
|
|
break;
|
|
case 0x58:
|
|
iVar4 = param_5;
|
|
goto LAB_00052b6c;
|
|
case 0x59:
|
|
iVar4 = FUN_00050030(acStack_154,0,param_6->tm_year + 0x76c);
|
|
goto LAB_00052e2a;
|
|
case 0x61:
|
|
param_5 = param_5 + param_6->tm_wday * 0x48;
|
|
uVar1 = *(undefined4 *)(param_5 + 0xb8);
|
|
iVar4 = 0xbc;
|
|
goto LAB_00052b1e;
|
|
case 0x62:
|
|
case 0x68:
|
|
param_5 = param_5 + param_6->tm_mon * 0x48;
|
|
uVar1 = *(undefined4 *)(param_5 + 0x4a8);
|
|
iVar4 = 0x4ac;
|
|
goto LAB_00052b1e;
|
|
case 99:
|
|
iVar4 = param_5 + 0x30;
|
|
iVar3 = param_5 + 0x60;
|
|
goto LAB_00052b62;
|
|
case 100:
|
|
if (param_4 == 0x23) {
|
|
pcVar7 = "%ld";
|
|
}
|
|
else {
|
|
pcVar7 = "%.2ld";
|
|
}
|
|
sprintf(acStack_154,pcVar7,param_6->tm_mday);
|
|
iVar4 = param_6->tm_mday;
|
|
LAB_00052d1e:
|
|
uVar2 = 1;
|
|
if (9 < iVar4) {
|
|
LAB_00052d26:
|
|
uVar2 = 2;
|
|
}
|
|
LAB_00052d28:
|
|
if (param_4 != 0x23) {
|
|
uVar2 = 2;
|
|
}
|
|
uVar12 = (uint)acStack_154 | uVar2;
|
|
pcVar11 = *(code **)(*param_2 + 0x2c);
|
|
LAB_00052d44:
|
|
(*pcVar11)(param_2,acStack_154,uVar12,local_114);
|
|
piVar14 = local_114 + uVar2;
|
|
goto LAB_00052e48;
|
|
case 0x65:
|
|
iVar4 = param_6->tm_mday;
|
|
goto LAB_00052a90;
|
|
case 0x6a:
|
|
tVar10 = param_6->tm_yday + 1;
|
|
break;
|
|
case 0x6b:
|
|
iVar4 = param_6->tm_hour;
|
|
goto LAB_00052a90;
|
|
case 0x6c:
|
|
__aeabi_idivmod(param_6->tm_hour,0xc);
|
|
iVar4 = extraout_r1_05;
|
|
LAB_00052a90:
|
|
sprintf(acStack_154,"%2ld",iVar4);
|
|
(**(code **)(*param_2 + 0x2c))(param_2,acStack_154,(uint)acStack_154 | 2,local_114);
|
|
piVar14 = local_114 + 2;
|
|
goto LAB_00052e48;
|
|
case 0x6d:
|
|
if (param_4 == 0x23) {
|
|
pcVar7 = "%ld";
|
|
}
|
|
else {
|
|
pcVar7 = "%.2ld";
|
|
}
|
|
sprintf(acStack_154,pcVar7,param_6->tm_mon + 1);
|
|
uVar2 = 1;
|
|
if (8 < param_6->tm_mon) goto LAB_00052d26;
|
|
goto LAB_00052d28;
|
|
case 0x6e:
|
|
pcVar11 = *(code **)(*param_2 + 0x28);
|
|
uVar1 = 10;
|
|
LAB_00052b7e:
|
|
uVar1 = (*pcVar11)(param_2,uVar1);
|
|
puVar6 = (undefined4 *)param_1[0x10];
|
|
uVar2 = (int)puVar6 - param_1[0x112] >> 2;
|
|
if (param_1 == (int *)param_1[0x112]) {
|
|
uVar12 = 0x10 - ((int)puVar6 - (int)param_1 >> 2);
|
|
}
|
|
else {
|
|
uVar12 = *param_1 - (int)puVar6 >> 2;
|
|
}
|
|
if (uVar12 < 2) {
|
|
uVar12 = uVar2;
|
|
if (uVar2 < 2) {
|
|
uVar12 = 1;
|
|
}
|
|
uVar13 = uVar2 + uVar12 + 1;
|
|
uVar12 = 0x3ffffffe;
|
|
if (uVar2 <= uVar13) {
|
|
uVar12 = uVar13;
|
|
}
|
|
uVar2 = 0x3ffffffe;
|
|
if (uVar13 < 0x3fffffff) {
|
|
uVar2 = uVar12;
|
|
}
|
|
FUN_000506a4(param_1,uVar2);
|
|
puVar6 = (undefined4 *)param_1[0x10];
|
|
}
|
|
*puVar6 = uVar1;
|
|
puVar6[1] = 0;
|
|
param_1[0x10] = (int)(puVar6 + 1);
|
|
return;
|
|
case 0x70:
|
|
iVar4 = __divsi3(param_6->tm_hour,0xc);
|
|
param_5 = param_5 + iVar4 * 0x48;
|
|
uVar1 = *(undefined4 *)(param_5 + 0xb68);
|
|
iVar4 = 0xb6c;
|
|
LAB_00052b1e:
|
|
FUN_00045484(param_1,*(undefined4 *)(param_5 + iVar4),uVar1,local_114);
|
|
return;
|
|
case 0x72:
|
|
FUN_00031c38(local_170,&DAT_000662a4,auStack_174);
|
|
FUN_0005467c(param_1,param_2,local_170,param_5,param_6);
|
|
if (local_15c == local_170) {
|
|
return;
|
|
}
|
|
if (local_15c == (int *)0x0) {
|
|
return;
|
|
}
|
|
if ((uint)(local_170[0] - (int)local_15c) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(local_15c,local_170[0] - (int)local_15c);
|
|
return;
|
|
}
|
|
operator_delete(local_15c);
|
|
return;
|
|
case 0x73:
|
|
tVar10 = mktime(param_6);
|
|
break;
|
|
case 0x74:
|
|
uVar1 = (**(code **)(*param_2 + 0x28))(param_2,9);
|
|
puVar6 = (undefined4 *)param_1[0x10];
|
|
uVar2 = (int)puVar6 - param_1[0x112] >> 2;
|
|
if (param_1 == (int *)param_1[0x112]) {
|
|
uVar12 = 0x10 - ((int)puVar6 - (int)param_1 >> 2);
|
|
}
|
|
else {
|
|
uVar12 = *param_1 - (int)puVar6 >> 2;
|
|
}
|
|
if (uVar12 < 2) {
|
|
uVar12 = uVar2;
|
|
if (uVar2 < 2) {
|
|
uVar12 = 1;
|
|
}
|
|
uVar13 = uVar2 + uVar12 + 1;
|
|
uVar12 = 0x3ffffffe;
|
|
if (uVar2 <= uVar13) {
|
|
uVar12 = uVar13;
|
|
}
|
|
uVar2 = 0x3ffffffe;
|
|
if (uVar13 < 0x3fffffff) {
|
|
uVar2 = uVar12;
|
|
}
|
|
FUN_000506a4(param_1,uVar2);
|
|
puVar6 = (undefined4 *)param_1[0x10];
|
|
}
|
|
*puVar6 = uVar1;
|
|
puVar6[1] = 0;
|
|
param_1[0x10] = (int)(puVar6 + 1);
|
|
goto LAB_00052e0e;
|
|
case 0x75:
|
|
LAB_00052e0e:
|
|
__aeabi_idivmod(param_6->tm_wday + 6,7);
|
|
tVar10 = extraout_r1_12 + 1;
|
|
break;
|
|
case 0x77:
|
|
tVar10 = param_6->tm_wday;
|
|
break;
|
|
case 0x78:
|
|
iVar4 = param_5 + 0x18;
|
|
iVar3 = param_5 + 0x48;
|
|
LAB_00052b62:
|
|
if (param_4 == 0x23) {
|
|
iVar4 = iVar3;
|
|
}
|
|
LAB_00052b6c:
|
|
FUN_0005467c(param_1,param_2,iVar4,param_5,param_6);
|
|
return;
|
|
case 0x79:
|
|
__aeabi_idivmod(param_6->tm_year + 0x76c,100);
|
|
tVar10 = extraout_r1_06;
|
|
}
|
|
iVar4 = FUN_00050030(acStack_154,0,tVar10);
|
|
LAB_00052e2a:
|
|
(**(code **)(*param_2 + 0x2c))(param_2,acStack_154,iVar4,local_114);
|
|
iVar4 = iVar4 - (int)acStack_154;
|
|
LAB_00052e3e:
|
|
piVar14 = local_114 + iVar4;
|
|
LAB_00052e48:
|
|
FUN_0005473c(param_1,local_114,piVar14,local_170);
|
|
switchD_0005275e_caseD_26:
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC time_init @ 00052f04
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00052fb4) */
|
|
/* WARNING: Removing unreachable block (ram,0x00053050) */
|
|
/* std::priv::time_init<char>::time_init() */
|
|
|
|
int std::priv::time_init<char>::time_init(void)
|
|
|
|
{
|
|
int iVar1;
|
|
char *pcVar2;
|
|
size_t sVar3;
|
|
int iVar4;
|
|
undefined1 *puVar5;
|
|
int iVar6;
|
|
undefined1 *puVar7;
|
|
int *piVar8;
|
|
int iVar9;
|
|
|
|
iVar1 = FUN_00053160();
|
|
iVar9 = 0;
|
|
*(undefined4 *)(iVar1 + 0x438) = 0;
|
|
piVar8 = (int *)(iVar1 + 0x8c);
|
|
do {
|
|
pcVar2 = &DAT_000665ee + iVar9;
|
|
sVar3 = strlen(pcVar2);
|
|
iVar6 = piVar8[-1];
|
|
iVar4 = *piVar8;
|
|
if ((uint)(iVar6 - iVar4) < sVar3) {
|
|
if (iVar6 != iVar4) {
|
|
__aeabi_memmove(iVar4,pcVar2);
|
|
iVar6 = piVar8[-1];
|
|
iVar4 = *piVar8;
|
|
}
|
|
FUN_00037294(piVar8 + -5,&DAT_000665ee + iVar9 + (iVar6 - iVar4),&DAT_000665ee + sVar3 + iVar9
|
|
);
|
|
}
|
|
else {
|
|
if (sVar3 != 0) {
|
|
__aeabi_memmove(iVar4,pcVar2,sVar3);
|
|
iVar6 = piVar8[-1];
|
|
iVar4 = *piVar8;
|
|
}
|
|
iVar4 = iVar4 + sVar3;
|
|
if (iVar4 != iVar6) {
|
|
__aeabi_memmove(iVar4,iVar6);
|
|
piVar8[-1] = piVar8[-1] + (iVar4 - iVar6);
|
|
}
|
|
}
|
|
iVar9 = iVar9 + 0xe;
|
|
piVar8 = piVar8 + 6;
|
|
} while (iVar9 != 0xc4);
|
|
piVar8 = (int *)(iVar1 + 0x1dc);
|
|
pcVar2 = "Jan";
|
|
iVar9 = 0x18;
|
|
do {
|
|
sVar3 = strlen(pcVar2);
|
|
iVar6 = piVar8[-1];
|
|
iVar4 = *piVar8;
|
|
if ((uint)(iVar6 - iVar4) < sVar3) {
|
|
if (iVar6 != iVar4) {
|
|
__aeabi_memmove(iVar4,pcVar2);
|
|
iVar6 = piVar8[-1];
|
|
iVar4 = *piVar8;
|
|
}
|
|
FUN_00037294(piVar8 + -5,pcVar2 + (iVar6 - iVar4),pcVar2 + sVar3);
|
|
}
|
|
else {
|
|
if (sVar3 != 0) {
|
|
__aeabi_memmove(iVar4,pcVar2,sVar3);
|
|
iVar6 = piVar8[-1];
|
|
iVar4 = *piVar8;
|
|
}
|
|
iVar4 = iVar4 + sVar3;
|
|
if (iVar4 != iVar6) {
|
|
__aeabi_memmove(iVar4,iVar6);
|
|
piVar8[-1] = piVar8[-1] + (iVar4 - iVar6);
|
|
}
|
|
}
|
|
iVar9 = iVar9 + -1;
|
|
pcVar2 = pcVar2 + 0x18;
|
|
piVar8 = piVar8 + 6;
|
|
} while (iVar9 != 0);
|
|
puVar5 = *(undefined1 **)(iVar1 + 0x41c);
|
|
puVar7 = *(undefined1 **)(iVar1 + 0x418);
|
|
piVar8 = (int *)(iVar1 + 0x418);
|
|
if ((uint)((int)puVar7 - (int)puVar5) < 2) {
|
|
if (puVar7 != puVar5) {
|
|
__aeabi_memcpy(puVar5,&DAT_00053148);
|
|
puVar5 = *(undefined1 **)(iVar1 + 0x41c);
|
|
puVar7 = (undefined1 *)*piVar8;
|
|
}
|
|
FUN_00037294(iVar1 + 0x408,&DAT_00053148 + ((int)puVar7 - (int)puVar5),&DAT_0005314a);
|
|
}
|
|
else {
|
|
*puVar5 = 0x41;
|
|
puVar5[1] = 0x4d;
|
|
puVar5 = (undefined1 *)*piVar8;
|
|
puVar7 = (undefined1 *)(*(int *)(iVar1 + 0x41c) + 2);
|
|
if (puVar7 != puVar5) {
|
|
*puVar7 = *puVar5;
|
|
*piVar8 = (int)(puVar7 + (*piVar8 - (int)puVar5));
|
|
}
|
|
}
|
|
puVar5 = *(undefined1 **)(iVar1 + 0x434);
|
|
puVar7 = *(undefined1 **)(iVar1 + 0x430);
|
|
piVar8 = (int *)(iVar1 + 0x430);
|
|
if ((uint)((int)puVar7 - (int)puVar5) < 2) {
|
|
if (puVar7 != puVar5) {
|
|
__aeabi_memcpy(puVar5,&DAT_00053150);
|
|
puVar5 = *(undefined1 **)(iVar1 + 0x434);
|
|
puVar7 = (undefined1 *)*piVar8;
|
|
}
|
|
FUN_00037294(iVar1 + 0x420,&DAT_00053150 + ((int)puVar7 - (int)puVar5),&DAT_00053152);
|
|
}
|
|
else {
|
|
*puVar5 = 0x50;
|
|
puVar5[1] = 0x4d;
|
|
puVar5 = (undefined1 *)*piVar8;
|
|
puVar7 = (undefined1 *)(*(int *)(iVar1 + 0x434) + 2);
|
|
if (puVar7 != puVar5) {
|
|
*puVar7 = *puVar5;
|
|
*piVar8 = (int)(puVar7 + (*piVar8 - (int)puVar5));
|
|
}
|
|
}
|
|
FUN_0005404c(iVar1);
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00053160 @ 00053160
|
|
|
|
void FUN_00053160(undefined1 *param_1)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
int iVar2;
|
|
|
|
param_1[0x30] = 0;
|
|
param_1[0x48] = 0;
|
|
param_1[0x60] = 0;
|
|
*(undefined1 **)(param_1 + 0x8c) = param_1 + 0x78;
|
|
*(undefined1 **)(param_1 + 0x88) = param_1 + 0x78;
|
|
*param_1 = 0;
|
|
param_1[0x18] = 0;
|
|
*(undefined1 **)(param_1 + 0x28) = param_1 + 0x18;
|
|
*(undefined1 **)(param_1 + 0x2c) = param_1 + 0x18;
|
|
*(undefined1 **)(param_1 + 0x40) = param_1 + 0x30;
|
|
*(undefined1 **)(param_1 + 0x44) = param_1 + 0x30;
|
|
*(undefined1 **)(param_1 + 0x58) = param_1 + 0x48;
|
|
*(undefined1 **)(param_1 + 0x5c) = param_1 + 0x48;
|
|
*(undefined1 **)(param_1 + 0x70) = param_1 + 0x60;
|
|
*(undefined1 **)(param_1 + 0x74) = param_1 + 0x60;
|
|
*(undefined1 **)(param_1 + 0x10) = param_1;
|
|
*(undefined1 **)(param_1 + 0x14) = param_1;
|
|
*(undefined1 **)(param_1 + 0xa4) = param_1 + 0x90;
|
|
*(undefined1 **)(param_1 + 0xa0) = param_1 + 0x90;
|
|
param_1[0x78] = 0;
|
|
param_1[0x90] = 0;
|
|
*(undefined1 **)(param_1 + 0xbc) = param_1 + 0xa8;
|
|
*(undefined1 **)(param_1 + 0xb8) = param_1 + 0xa8;
|
|
param_1[0xa8] = 0;
|
|
*(undefined1 **)(param_1 + 0xd4) = param_1 + 0xc0;
|
|
*(undefined1 **)(param_1 + 0xd0) = param_1 + 0xc0;
|
|
param_1[0xc0] = 0;
|
|
*(undefined1 **)(param_1 + 0xec) = param_1 + 0xd8;
|
|
*(undefined1 **)(param_1 + 0xe8) = param_1 + 0xd8;
|
|
param_1[0xd8] = 0;
|
|
*(undefined1 **)(param_1 + 0x104) = param_1 + 0xf0;
|
|
*(undefined1 **)(param_1 + 0x100) = param_1 + 0xf0;
|
|
param_1[0xf0] = 0;
|
|
*(undefined1 **)(param_1 + 0x11c) = param_1 + 0x108;
|
|
*(undefined1 **)(param_1 + 0x118) = param_1 + 0x108;
|
|
param_1[0x108] = 0;
|
|
*(undefined1 **)(param_1 + 0x134) = param_1 + 0x120;
|
|
*(undefined1 **)(param_1 + 0x130) = param_1 + 0x120;
|
|
param_1[0x120] = 0;
|
|
*(undefined1 **)(param_1 + 0x14c) = param_1 + 0x138;
|
|
*(undefined1 **)(param_1 + 0x148) = param_1 + 0x138;
|
|
param_1[0x138] = 0;
|
|
*(undefined1 **)(param_1 + 0x164) = param_1 + 0x150;
|
|
*(undefined1 **)(param_1 + 0x160) = param_1 + 0x150;
|
|
param_1[0x150] = 0;
|
|
*(undefined1 **)(param_1 + 0x17c) = param_1 + 0x168;
|
|
*(undefined1 **)(param_1 + 0x178) = param_1 + 0x168;
|
|
param_1[0x168] = 0;
|
|
*(undefined1 **)(param_1 + 0x194) = param_1 + 0x180;
|
|
*(undefined1 **)(param_1 + 400) = param_1 + 0x180;
|
|
param_1[0x180] = 0;
|
|
*(undefined1 **)(param_1 + 0x1ac) = param_1 + 0x198;
|
|
*(undefined1 **)(param_1 + 0x1a8) = param_1 + 0x198;
|
|
param_1[0x198] = 0;
|
|
*(undefined1 **)(param_1 + 0x1c4) = param_1 + 0x1b0;
|
|
*(undefined1 **)(param_1 + 0x1c0) = param_1 + 0x1b0;
|
|
param_1[0x1b0] = 0;
|
|
puVar1 = param_1 + 0x1c8;
|
|
iVar2 = 0x18;
|
|
do {
|
|
*puVar1 = 0;
|
|
*(undefined1 **)(puVar1 + 0x10) = puVar1;
|
|
*(undefined1 **)(puVar1 + 0x14) = puVar1;
|
|
iVar2 = iVar2 + -1;
|
|
puVar1 = puVar1 + 0x18;
|
|
} while (iVar2 != 0);
|
|
*(undefined1 **)(param_1 + 0x41c) = param_1 + 0x408;
|
|
*(undefined1 **)(param_1 + 0x418) = param_1 + 0x408;
|
|
param_1[0x408] = 0;
|
|
param_1[0x420] = 0;
|
|
*(undefined1 **)(param_1 + 0x434) = param_1 + 0x420;
|
|
*(undefined1 **)(param_1 + 0x430) = param_1 + 0x420;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC time_init @ 000532e0
|
|
|
|
/* std::priv::time_init<char>::time_init(char const*) */
|
|
|
|
time_init<char> * __thiscall
|
|
std::priv::time_init<char>::time_init(time_init<char> *this,char *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
local_14 = param_1;
|
|
FUN_00053160();
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a3cc(&local_14,auStack_118,0,&local_18);
|
|
if (iVar1 != 0) {
|
|
FUN_00053350(this,iVar1);
|
|
uVar2 = FUN_000536e8(iVar1);
|
|
*(undefined4 *)(this + 0x438) = uVar2;
|
|
FUN_0004a698(iVar1);
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"time");
|
|
FUN_00039fc0(this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00053350 @ 00053350
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00053630) */
|
|
/* WARNING: Removing unreachable block (ram,0x000534f4) */
|
|
/* WARNING: Removing unreachable block (ram,0x000533ce) */
|
|
/* WARNING: Removing unreachable block (ram,0x0005346a) */
|
|
/* WARNING: Removing unreachable block (ram,0x0005358c) */
|
|
/* WARNING: Removing unreachable block (ram,0x000536ca) */
|
|
|
|
void FUN_00053350(int param_1,undefined4 param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
size_t sVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int *piVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
|
|
iVar7 = param_1 + 0x78;
|
|
iVar6 = 0;
|
|
do {
|
|
pcVar1 = (char *)FUN_0004de78(param_2,iVar6);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar4 = *(int *)(iVar7 + 0x10);
|
|
iVar3 = *(int *)(iVar7 + 0x14);
|
|
if ((uint)(iVar4 - iVar3) < sVar2) {
|
|
if (iVar4 != iVar3) {
|
|
__aeabi_memmove(iVar3,pcVar1);
|
|
iVar4 = *(int *)(iVar7 + 0x10);
|
|
iVar3 = *(int *)(iVar7 + 0x14);
|
|
}
|
|
FUN_00037294(iVar7,pcVar1 + (iVar4 - iVar3),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar3,pcVar1,sVar2);
|
|
iVar4 = *(int *)(iVar7 + 0x10);
|
|
iVar3 = *(int *)(iVar7 + 0x14);
|
|
}
|
|
iVar3 = iVar3 + sVar2;
|
|
if (iVar3 != iVar4) {
|
|
__aeabi_memmove(iVar3,iVar4);
|
|
*(int *)(iVar7 + 0x10) = *(int *)(iVar7 + 0x10) + (iVar3 - iVar4);
|
|
}
|
|
}
|
|
iVar7 = iVar7 + 0x18;
|
|
iVar6 = iVar6 + 1;
|
|
} while (iVar6 != 7);
|
|
piVar5 = (int *)(param_1 + 0x134);
|
|
iVar6 = 0;
|
|
do {
|
|
pcVar1 = (char *)FUN_0004de68(param_2);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar3 = piVar5[-1];
|
|
iVar7 = *piVar5;
|
|
if ((uint)(iVar3 - iVar7) < sVar2) {
|
|
if (iVar3 != iVar7) {
|
|
__aeabi_memmove(iVar7,pcVar1);
|
|
iVar3 = piVar5[-1];
|
|
iVar7 = *piVar5;
|
|
}
|
|
FUN_00037294(piVar5 + -5,pcVar1 + (iVar3 - iVar7),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar7,pcVar1,sVar2);
|
|
iVar3 = piVar5[-1];
|
|
iVar7 = *piVar5;
|
|
}
|
|
iVar7 = iVar7 + sVar2;
|
|
if (iVar7 != iVar3) {
|
|
__aeabi_memmove(iVar7);
|
|
piVar5[-1] = piVar5[-1] + (iVar7 - iVar3);
|
|
}
|
|
}
|
|
piVar5 = piVar5 + 6;
|
|
iVar6 = iVar6 + 1;
|
|
} while (iVar6 != 7);
|
|
iVar7 = param_1 + 0x1c8;
|
|
iVar6 = 0;
|
|
do {
|
|
pcVar1 = (char *)FUN_0004de58(param_2,iVar6);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar4 = *(int *)(iVar7 + 0x10);
|
|
iVar3 = *(int *)(iVar7 + 0x14);
|
|
if ((uint)(iVar4 - iVar3) < sVar2) {
|
|
if (iVar4 != iVar3) {
|
|
__aeabi_memmove(iVar3,pcVar1);
|
|
iVar4 = *(int *)(iVar7 + 0x10);
|
|
iVar3 = *(int *)(iVar7 + 0x14);
|
|
}
|
|
FUN_00037294(iVar7,pcVar1 + (iVar4 - iVar3),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar3,pcVar1,sVar2);
|
|
iVar4 = *(int *)(iVar7 + 0x10);
|
|
iVar3 = *(int *)(iVar7 + 0x14);
|
|
}
|
|
iVar3 = iVar3 + sVar2;
|
|
if (iVar3 != iVar4) {
|
|
__aeabi_memmove(iVar3,iVar4);
|
|
*(int *)(iVar7 + 0x10) = *(int *)(iVar7 + 0x10) + (iVar3 - iVar4);
|
|
}
|
|
}
|
|
iVar7 = iVar7 + 0x18;
|
|
iVar6 = iVar6 + 1;
|
|
} while (iVar6 != 0xc);
|
|
piVar5 = (int *)(param_1 + 0x2fc);
|
|
iVar6 = 0;
|
|
do {
|
|
pcVar1 = (char *)FUN_0004de48(param_2);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar3 = piVar5[-1];
|
|
iVar7 = *piVar5;
|
|
if ((uint)(iVar3 - iVar7) < sVar2) {
|
|
if (iVar3 != iVar7) {
|
|
__aeabi_memmove(iVar7,pcVar1);
|
|
iVar3 = piVar5[-1];
|
|
iVar7 = *piVar5;
|
|
}
|
|
FUN_00037294(piVar5 + -5,pcVar1 + (iVar3 - iVar7),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar7,pcVar1,sVar2);
|
|
iVar3 = piVar5[-1];
|
|
iVar7 = *piVar5;
|
|
}
|
|
iVar7 = iVar7 + sVar2;
|
|
if (iVar7 != iVar3) {
|
|
__aeabi_memmove(iVar7,iVar3);
|
|
piVar5[-1] = piVar5[-1] + (iVar7 - iVar3);
|
|
}
|
|
}
|
|
piVar5 = piVar5 + 6;
|
|
iVar6 = iVar6 + 1;
|
|
} while (iVar6 != 0xc);
|
|
pcVar1 = (char *)FUN_0004dec8(param_2);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar6 = *(int *)(param_1 + 0x41c);
|
|
iVar7 = *(int *)(param_1 + 0x418);
|
|
piVar5 = (int *)(param_1 + 0x418);
|
|
if ((uint)(iVar7 - iVar6) < sVar2) {
|
|
if (iVar7 != iVar6) {
|
|
__aeabi_memmove(iVar6,pcVar1);
|
|
iVar6 = *(int *)(param_1 + 0x41c);
|
|
iVar7 = *piVar5;
|
|
}
|
|
FUN_00037294(param_1 + 0x408,pcVar1 + (iVar7 - iVar6),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar6,pcVar1,sVar2);
|
|
iVar7 = *piVar5;
|
|
iVar6 = *(int *)(param_1 + 0x41c);
|
|
}
|
|
iVar6 = iVar6 + sVar2;
|
|
if (iVar6 != iVar7) {
|
|
__aeabi_memmove(iVar6);
|
|
*piVar5 = *piVar5 + (iVar6 - iVar7);
|
|
}
|
|
}
|
|
pcVar1 = (char *)FUN_0004ded0(param_2);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar6 = *(int *)(param_1 + 0x434);
|
|
iVar7 = *(int *)(param_1 + 0x430);
|
|
piVar5 = (int *)(param_1 + 0x430);
|
|
if ((uint)(iVar7 - iVar6) < sVar2) {
|
|
if (iVar7 != iVar6) {
|
|
__aeabi_memmove(iVar6,pcVar1);
|
|
iVar6 = *(int *)(param_1 + 0x434);
|
|
iVar7 = *piVar5;
|
|
}
|
|
FUN_00037294(param_1 + 0x420,pcVar1 + (iVar7 - iVar6),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar6,pcVar1,sVar2);
|
|
iVar7 = *piVar5;
|
|
iVar6 = *(int *)(param_1 + 0x434);
|
|
}
|
|
iVar6 = iVar6 + sVar2;
|
|
if (iVar6 != iVar7) {
|
|
__aeabi_memmove(iVar6);
|
|
*piVar5 = *piVar5 + (iVar6 - iVar7);
|
|
}
|
|
}
|
|
FUN_00054198(param_1,param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000536e8 @ 000536e8
|
|
|
|
undefined4 FUN_000536e8(void)
|
|
|
|
{
|
|
char cVar1;
|
|
char cVar2;
|
|
char cVar3;
|
|
int iVar4;
|
|
undefined4 uVar5;
|
|
char *pcVar6;
|
|
char *pcVar7;
|
|
bool bVar8;
|
|
|
|
iVar4 = FUN_0004de94();
|
|
pcVar6 = (char *)(iVar4 + -1);
|
|
do {
|
|
pcVar7 = pcVar6;
|
|
cVar1 = pcVar7[1];
|
|
pcVar6 = pcVar7 + 1;
|
|
if (cVar1 == '%') break;
|
|
} while (cVar1 != '\0');
|
|
uVar5 = 0;
|
|
if (cVar1 != '\0') {
|
|
cVar1 = pcVar7[2];
|
|
bVar8 = cVar1 == '\0';
|
|
if ((cVar1 != '%') && (pcVar7 = pcVar7 + 3, !bVar8)) {
|
|
do {
|
|
pcVar6 = pcVar7;
|
|
bVar8 = *pcVar6 == '\0';
|
|
if (*pcVar6 == '%') break;
|
|
pcVar7 = pcVar6 + 1;
|
|
} while (!bVar8);
|
|
pcVar6 = pcVar6 + -1;
|
|
}
|
|
uVar5 = 0;
|
|
if (!bVar8) {
|
|
pcVar7 = pcVar6 + 2;
|
|
cVar2 = pcVar6[2];
|
|
cVar3 = cVar2;
|
|
while ((cVar3 != '%' && (cVar3 != '\0'))) {
|
|
pcVar6 = pcVar7 + 1;
|
|
pcVar7 = pcVar7 + 1;
|
|
cVar3 = *pcVar6;
|
|
}
|
|
uVar5 = 0;
|
|
if (cVar3 != '\0') {
|
|
cVar3 = pcVar7[1];
|
|
if (cVar1 == 'y') {
|
|
if (cVar2 == 'm') {
|
|
uVar5 = 3;
|
|
if (cVar3 != 'd') {
|
|
return 0;
|
|
}
|
|
}
|
|
else if ((cVar2 == 'd') && (uVar5 = 4, cVar3 != 'm')) {
|
|
return 0;
|
|
}
|
|
}
|
|
else if (cVar1 == 'm') {
|
|
uVar5 = 2;
|
|
if (cVar2 != 'd' || cVar3 != 'y') {
|
|
return 0;
|
|
}
|
|
}
|
|
else if ((cVar1 == 'd') && (uVar5 = 1, cVar2 != 'm' || cVar3 != 'y')) {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
### FUNC time_init @ 000537f2
|
|
|
|
/* std::priv::time_init<char>::time_init(_Locale_time*) */
|
|
|
|
time_init<char> * __thiscall
|
|
std::priv::time_init<char>::time_init(time_init<char> *this,_Locale_time *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = FUN_00053160();
|
|
FUN_00053350(uVar1,param_1);
|
|
uVar1 = FUN_000536e8(param_1);
|
|
*(undefined4 *)(this + 0x438) = uVar1;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC time_init @ 00053828
|
|
|
|
/* std::priv::time_init<wchar_t>::time_init() */
|
|
|
|
int std::priv::time_init<wchar_t>::time_init(void)
|
|
|
|
{
|
|
int iVar1;
|
|
size_t sVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
wchar_t *__s;
|
|
|
|
iVar1 = FUN_00053b3c();
|
|
*(undefined4 *)(iVar1 + 3000) = 0;
|
|
sVar2 = wcslen(L"Sun");
|
|
FUN_0004413c(iVar1 + 0x78,&DAT_000668f4,&DAT_000668f4 + sVar2 * 4);
|
|
sVar2 = wcslen(L"Mon");
|
|
FUN_0004413c(iVar1 + 0xc0,&DAT_0006692c,&DAT_0006692c + sVar2 * 4);
|
|
sVar2 = wcslen(L"Tue");
|
|
FUN_0004413c(iVar1 + 0x108,&DAT_00066964,&DAT_00066964 + sVar2 * 4);
|
|
sVar2 = wcslen(L"Wed");
|
|
FUN_0004413c(iVar1 + 0x150,&DAT_0006699c,&DAT_0006699c + sVar2 * 4);
|
|
sVar2 = wcslen(L"Thu");
|
|
FUN_0004413c(iVar1 + 0x198,&DAT_000669d4,&DAT_000669d4 + sVar2 * 4);
|
|
sVar2 = wcslen(L"Fri");
|
|
FUN_0004413c(iVar1 + 0x1e0,&DAT_00066a0c,&DAT_00066a0c + sVar2 * 4);
|
|
sVar2 = wcslen(L"Sat");
|
|
FUN_0004413c(iVar1 + 0x228,&DAT_00066a44,&DAT_00066a44 + sVar2 * 4);
|
|
sVar2 = wcslen(L"Sunday");
|
|
FUN_0004413c(iVar1 + 0x270,L"Sunday",L"Sunday" + sVar2);
|
|
sVar2 = wcslen(L"Monday");
|
|
FUN_0004413c(iVar1 + 0x2b8,L"Monday",L"Monday" + sVar2);
|
|
sVar2 = wcslen(L"Tuesday");
|
|
FUN_0004413c(iVar1 + 0x300,L"Tuesday",L"Tuesday" + sVar2);
|
|
sVar2 = wcslen(L"Wednesday");
|
|
FUN_0004413c(iVar1 + 0x348,L"Wednesday",L"Wednesday" + sVar2);
|
|
sVar2 = wcslen(L"Thursday");
|
|
FUN_0004413c(iVar1 + 0x390,L"Thursday",L"Thursday" + sVar2);
|
|
sVar2 = wcslen(L"Friday");
|
|
FUN_0004413c(iVar1 + 0x3d8,L"Friday",L"Friday" + sVar2);
|
|
sVar2 = wcslen(L"Saturday");
|
|
FUN_0004413c(iVar1 + 0x420,L"Saturday",L"Saturday" + sVar2);
|
|
iVar4 = iVar1 + 0x468;
|
|
iVar3 = 0x18;
|
|
__s = L"Jan";
|
|
do {
|
|
sVar2 = wcslen(__s);
|
|
FUN_0004413c(iVar4,__s,__s + sVar2);
|
|
__s = __s + 0x18;
|
|
iVar3 = iVar3 + -1;
|
|
iVar4 = iVar4 + 0x48;
|
|
} while (iVar3 != 0);
|
|
sVar2 = wcslen(L"AM");
|
|
FUN_0004413c(iVar1 + 0xb28,&DAT_00053b20,&DAT_00053b20 + sVar2 * 4);
|
|
sVar2 = wcslen(L"PM");
|
|
FUN_0004413c(iVar1 + 0xb70,&DAT_00053b30,&DAT_00053b30 + sVar2 * 4);
|
|
FUN_0005404c(iVar1);
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00053b3c @ 00053b3c
|
|
|
|
void FUN_00053b3c(undefined1 *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
|
|
param_1[0x30] = 0;
|
|
param_1[0x48] = 0;
|
|
param_1[0x60] = 0;
|
|
*(undefined1 **)(param_1 + 0xbc) = param_1 + 0x78;
|
|
*(undefined1 **)(param_1 + 0xb8) = param_1 + 0x78;
|
|
*param_1 = 0;
|
|
param_1[0x18] = 0;
|
|
*(undefined1 **)(param_1 + 0x28) = param_1 + 0x18;
|
|
*(undefined1 **)(param_1 + 0x2c) = param_1 + 0x18;
|
|
*(undefined1 **)(param_1 + 0x40) = param_1 + 0x30;
|
|
*(undefined1 **)(param_1 + 0x44) = param_1 + 0x30;
|
|
*(undefined1 **)(param_1 + 0x58) = param_1 + 0x48;
|
|
*(undefined1 **)(param_1 + 0x5c) = param_1 + 0x48;
|
|
*(undefined1 **)(param_1 + 0x74) = param_1 + 0x60;
|
|
*(undefined1 **)(param_1 + 0x70) = param_1 + 0x60;
|
|
*(undefined1 **)(param_1 + 0x10) = param_1;
|
|
*(undefined1 **)(param_1 + 0x14) = param_1;
|
|
*(undefined1 **)(param_1 + 0x104) = param_1 + 0xc0;
|
|
*(undefined1 **)(param_1 + 0x100) = param_1 + 0xc0;
|
|
*(undefined4 *)(param_1 + 0xc0) = 0;
|
|
*(undefined1 **)(param_1 + 0x14c) = param_1 + 0x108;
|
|
*(undefined1 **)(param_1 + 0x148) = param_1 + 0x108;
|
|
*(undefined4 *)(param_1 + 0x108) = 0;
|
|
*(undefined1 **)(param_1 + 0x194) = param_1 + 0x150;
|
|
*(undefined1 **)(param_1 + 400) = param_1 + 0x150;
|
|
*(undefined4 *)(param_1 + 0x150) = 0;
|
|
*(undefined1 **)(param_1 + 0x1dc) = param_1 + 0x198;
|
|
*(undefined1 **)(param_1 + 0x1d8) = param_1 + 0x198;
|
|
*(undefined4 *)(param_1 + 0x198) = 0;
|
|
*(undefined1 **)(param_1 + 0x224) = param_1 + 0x1e0;
|
|
*(undefined1 **)(param_1 + 0x220) = param_1 + 0x1e0;
|
|
*(undefined4 *)(param_1 + 0x1e0) = 0;
|
|
*(undefined1 **)(param_1 + 0x26c) = param_1 + 0x228;
|
|
*(undefined1 **)(param_1 + 0x268) = param_1 + 0x228;
|
|
*(undefined4 *)(param_1 + 0x228) = 0;
|
|
*(undefined4 *)(param_1 + 0x78) = 0;
|
|
*(undefined1 **)(param_1 + 0x2b4) = param_1 + 0x270;
|
|
*(undefined1 **)(param_1 + 0x2b0) = param_1 + 0x270;
|
|
*(undefined4 *)(param_1 + 0x270) = 0;
|
|
*(undefined1 **)(param_1 + 0x2fc) = param_1 + 0x2b8;
|
|
*(undefined1 **)(param_1 + 0x2f8) = param_1 + 0x2b8;
|
|
*(undefined4 *)(param_1 + 0x2b8) = 0;
|
|
*(undefined1 **)(param_1 + 0x344) = param_1 + 0x300;
|
|
*(undefined1 **)(param_1 + 0x340) = param_1 + 0x300;
|
|
*(undefined4 *)(param_1 + 0x300) = 0;
|
|
*(undefined1 **)(param_1 + 0x38c) = param_1 + 0x348;
|
|
*(undefined1 **)(param_1 + 0x388) = param_1 + 0x348;
|
|
*(undefined4 *)(param_1 + 0x348) = 0;
|
|
*(undefined1 **)(param_1 + 0x3d4) = param_1 + 0x390;
|
|
*(undefined1 **)(param_1 + 0x3d0) = param_1 + 0x390;
|
|
*(undefined4 *)(param_1 + 0x390) = 0;
|
|
*(undefined1 **)(param_1 + 0x41c) = param_1 + 0x3d8;
|
|
*(undefined1 **)(param_1 + 0x418) = param_1 + 0x3d8;
|
|
*(undefined4 *)(param_1 + 0x3d8) = 0;
|
|
*(undefined1 **)(param_1 + 0x464) = param_1 + 0x420;
|
|
*(undefined1 **)(param_1 + 0x460) = param_1 + 0x420;
|
|
*(undefined4 *)(param_1 + 0x420) = 0;
|
|
puVar1 = (undefined4 *)(param_1 + 0x468);
|
|
iVar2 = 0x18;
|
|
do {
|
|
*puVar1 = 0;
|
|
puVar1[0x10] = puVar1;
|
|
puVar1[0x11] = puVar1;
|
|
iVar2 = iVar2 + -1;
|
|
puVar1 = puVar1 + 0x12;
|
|
} while (iVar2 != 0);
|
|
*(undefined1 **)(param_1 + 0xb6c) = param_1 + 0xb28;
|
|
*(undefined1 **)(param_1 + 0xb68) = param_1 + 0xb28;
|
|
*(undefined4 *)(param_1 + 0xb28) = 0;
|
|
*(undefined4 *)(param_1 + 0xb70) = 0;
|
|
*(undefined1 **)(param_1 + 0xbb4) = param_1 + 0xb70;
|
|
*(undefined1 **)(param_1 + 0xbb0) = param_1 + 0xb70;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC time_init @ 00053cd4
|
|
|
|
/* std::priv::time_init<wchar_t>::time_init(char const*) */
|
|
|
|
time_init<wchar_t> * __thiscall
|
|
std::priv::time_init<wchar_t>::time_init(time_init<wchar_t> *this,char *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
undefined1 auStack_118 [256];
|
|
int local_18;
|
|
char *local_14;
|
|
|
|
local_14 = param_1;
|
|
FUN_00053b3c();
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a3cc(&local_14,auStack_118,0,&local_18);
|
|
if (iVar1 != 0) {
|
|
FUN_00053d48(this,iVar1);
|
|
uVar2 = FUN_000536e8(iVar1);
|
|
*(undefined4 *)(this + 3000) = uVar2;
|
|
FUN_0004a698(iVar1);
|
|
return this;
|
|
}
|
|
}
|
|
uVar2 = locale::_M_throw_on_creation_failure(local_18,local_14,"time");
|
|
FUN_0003b28c(this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar2);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00053d48 @ 00053d48
|
|
|
|
void FUN_00053d48(int param_1,undefined4 param_2)
|
|
|
|
{
|
|
wchar_t *pwVar1;
|
|
size_t sVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
undefined1 auStack_214 [512];
|
|
|
|
iVar4 = 0;
|
|
pwVar1 = (wchar_t *)FUN_0004df08(param_2,0);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x78,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004df08(param_2,1,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0xc0,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004df08(param_2,2,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x108,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004df08(param_2,3,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x150,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004df08(param_2,4,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x198,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004df08(param_2,5,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x1e0,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004df08(param_2,6,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x228,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004def8(param_2,0,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x270,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004def8(param_2,1,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x2b8,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004def8(param_2,2,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x300,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004def8(param_2,3,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x348,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004def8(param_2,4,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x390,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004def8(param_2,5,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x3d8,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004def8(param_2,6,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0x420,pwVar1,pwVar1 + sVar2);
|
|
iVar3 = param_1 + 0x468;
|
|
do {
|
|
pwVar1 = (wchar_t *)FUN_0004dee8(param_2,iVar4,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(iVar3,pwVar1,pwVar1 + sVar2);
|
|
iVar3 = iVar3 + 0x48;
|
|
iVar4 = iVar4 + 1;
|
|
} while (iVar4 != 0xc);
|
|
iVar3 = param_1 + 0x7c8;
|
|
iVar4 = 0;
|
|
do {
|
|
pwVar1 = (wchar_t *)FUN_0004ded8(param_2,iVar4,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(iVar3,pwVar1,pwVar1 + sVar2);
|
|
iVar3 = iVar3 + 0x48;
|
|
iVar4 = iVar4 + 1;
|
|
} while (iVar4 != 0xc);
|
|
pwVar1 = (wchar_t *)FUN_0004df18(param_2);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0xb28,pwVar1,pwVar1 + sVar2);
|
|
pwVar1 = (wchar_t *)FUN_0004df28(param_2,auStack_214,0x80);
|
|
sVar2 = wcslen(pwVar1);
|
|
FUN_0004413c(param_1 + 0xb70,pwVar1,pwVar1 + sVar2);
|
|
FUN_00054198(param_1,param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC time_init @ 00054014
|
|
|
|
/* std::priv::time_init<wchar_t>::time_init(_Locale_time*) */
|
|
|
|
time_init<wchar_t> * __thiscall
|
|
std::priv::time_init<wchar_t>::time_init(time_init<wchar_t> *this,_Locale_time *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = FUN_00053b3c();
|
|
FUN_00053d48(uVar1,param_1);
|
|
uVar1 = FUN_000536e8(param_1);
|
|
*(undefined4 *)(this + 3000) = uVar1;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005404c @ 0005404c
|
|
|
|
void FUN_0005404c(int param_1)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
undefined1 *puVar2;
|
|
|
|
puVar2 = *(undefined1 **)(param_1 + 0x10);
|
|
puVar1 = *(undefined1 **)(param_1 + 0x14);
|
|
if ((uint)((int)puVar2 - (int)puVar1) < 8) {
|
|
if (puVar2 != puVar1) {
|
|
__aeabi_memcpy(puVar1,&DAT_00066294);
|
|
puVar2 = *(undefined1 **)(param_1 + 0x10);
|
|
puVar1 = *(undefined1 **)(param_1 + 0x14);
|
|
}
|
|
FUN_00037294(param_1,&DAT_00066294 + ((int)puVar2 - (int)puVar1),&DAT_0006629c);
|
|
}
|
|
else {
|
|
puVar1[7] = 0x53;
|
|
puVar1[6] = 0x25;
|
|
puVar1[5] = 0x3a;
|
|
puVar1[4] = 0x4d;
|
|
puVar1[3] = 0x25;
|
|
puVar1[2] = 0x3a;
|
|
puVar1[1] = 0x48;
|
|
*puVar1 = 0x25;
|
|
puVar1 = *(undefined1 **)(param_1 + 0x10);
|
|
puVar2 = (undefined1 *)(*(int *)(param_1 + 0x14) + 8);
|
|
if (puVar2 != puVar1) {
|
|
*puVar2 = *puVar1;
|
|
*(undefined1 **)(param_1 + 0x10) = puVar2 + (*(int *)(param_1 + 0x10) - (int)puVar1);
|
|
}
|
|
}
|
|
puVar2 = *(undefined1 **)(param_1 + 0x28);
|
|
puVar1 = *(undefined1 **)(param_1 + 0x2c);
|
|
if ((uint)((int)puVar2 - (int)puVar1) < 8) {
|
|
if (puVar2 != puVar1) {
|
|
__aeabi_memcpy(puVar1,&DAT_0005418c);
|
|
puVar2 = *(undefined1 **)(param_1 + 0x28);
|
|
puVar1 = *(undefined1 **)(param_1 + 0x2c);
|
|
}
|
|
FUN_00037294(param_1 + 0x18,&DAT_0005418c + ((int)puVar2 - (int)puVar1),&DAT_00054194);
|
|
}
|
|
else {
|
|
*puVar1 = 0x25;
|
|
puVar1[4] = 100;
|
|
puVar1[3] = 0x25;
|
|
puVar1[2] = 0x2f;
|
|
puVar1[1] = 0x6d;
|
|
puVar1[7] = 0x79;
|
|
puVar1[6] = 0x25;
|
|
puVar1[5] = 0x2f;
|
|
puVar1 = *(undefined1 **)(param_1 + 0x28);
|
|
puVar2 = (undefined1 *)(*(int *)(param_1 + 0x2c) + 8);
|
|
if (puVar2 != puVar1) {
|
|
*puVar2 = *puVar1;
|
|
*(undefined1 **)(param_1 + 0x28) = puVar2 + (*(int *)(param_1 + 0x28) - (int)puVar1);
|
|
}
|
|
}
|
|
puVar2 = *(undefined1 **)(param_1 + 0x40);
|
|
puVar1 = *(undefined1 **)(param_1 + 0x44);
|
|
if ((uint)((int)puVar2 - (int)puVar1) < 8) {
|
|
if (puVar2 != puVar1) {
|
|
__aeabi_memcpy(puVar1,&DAT_0005418c);
|
|
puVar2 = *(undefined1 **)(param_1 + 0x40);
|
|
puVar1 = *(undefined1 **)(param_1 + 0x44);
|
|
}
|
|
FUN_00037294(param_1 + 0x30,&DAT_0005418c + ((int)puVar2 - (int)puVar1),&DAT_00054194);
|
|
}
|
|
else {
|
|
*puVar1 = 0x25;
|
|
puVar1[4] = 100;
|
|
puVar1[3] = 0x25;
|
|
puVar1[2] = 0x2f;
|
|
puVar1[1] = 0x6d;
|
|
puVar1[7] = 0x79;
|
|
puVar1[6] = 0x25;
|
|
puVar1[5] = 0x2f;
|
|
puVar1 = *(undefined1 **)(param_1 + 0x40);
|
|
puVar2 = (undefined1 *)(*(int *)(param_1 + 0x44) + 8);
|
|
if (puVar2 != puVar1) {
|
|
*puVar2 = *puVar1;
|
|
*(undefined1 **)(param_1 + 0x40) = puVar2 + (*(int *)(param_1 + 0x40) - (int)puVar1);
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00054198 @ 00054198
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00054452) */
|
|
/* WARNING: Removing unreachable block (ram,0x00054362) */
|
|
/* WARNING: Removing unreachable block (ram,0x00054218) */
|
|
/* WARNING: Removing unreachable block (ram,0x000543d8) */
|
|
/* WARNING: Removing unreachable block (ram,0x000544cc) */
|
|
/* WARNING: Removing unreachable block (ram,0x000542c4) */
|
|
/* WARNING: Removing unreachable block (ram,0x000542a0) */
|
|
/* WARNING: Removing unreachable block (ram,0x00054508) */
|
|
/* WARNING: Removing unreachable block (ram,0x00054506) */
|
|
/* WARNING: Removing unreachable block (ram,0x0005425e) */
|
|
/* WARNING: Removing unreachable block (ram,0x00054528) */
|
|
/* WARNING: Removing unreachable block (ram,0x00054526) */
|
|
/* WARNING: Removing unreachable block (ram,0x000542e8) */
|
|
|
|
void FUN_00054198(int param_1,undefined4 param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
size_t sVar2;
|
|
int iVar3;
|
|
short *psVar4;
|
|
int iVar5;
|
|
undefined *puVar6;
|
|
undefined *puVar7;
|
|
|
|
pcVar1 = (char *)FUN_0004dea0(param_2);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x10);
|
|
iVar3 = *(int *)(param_1 + 0x14);
|
|
if ((uint)(iVar5 - iVar3) < sVar2) {
|
|
if (iVar5 != iVar3) {
|
|
__aeabi_memmove(iVar3,pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x10);
|
|
iVar3 = *(int *)(param_1 + 0x14);
|
|
}
|
|
FUN_00037294(param_1,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2);
|
|
iVar5 = *(int *)(param_1 + 0x10);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar3,pcVar1,sVar2);
|
|
iVar5 = *(int *)(param_1 + 0x10);
|
|
iVar3 = *(int *)(param_1 + 0x14);
|
|
}
|
|
iVar3 = iVar3 + sVar2;
|
|
if (iVar3 != iVar5) {
|
|
__aeabi_memmove(iVar3,iVar5);
|
|
iVar5 = *(int *)(param_1 + 0x10) + (iVar3 - iVar5);
|
|
*(int *)(param_1 + 0x10) = iVar5;
|
|
}
|
|
}
|
|
psVar4 = *(short **)(param_1 + 0x14);
|
|
iVar5 = iVar5 - (int)psVar4;
|
|
if ((iVar5 == 2) && (*psVar4 == 0x5425)) {
|
|
__aeabi_memcpy(psVar4,&DAT_00066294);
|
|
puVar6 = &DAT_00066294 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x14));
|
|
puVar7 = &DAT_0006629c;
|
|
}
|
|
else if ((iVar5 == 2) && (*psVar4 == 0x7225)) {
|
|
__aeabi_memcpy(psVar4,&DAT_000662a4);
|
|
puVar6 = &DAT_000662a4 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x14));
|
|
puVar7 = &DAT_000662af;
|
|
}
|
|
else {
|
|
if ((iVar5 != 2) || (*psVar4 != 0x5225)) goto LAB_000542f4;
|
|
__aeabi_memcpy(psVar4,&DAT_000648a8);
|
|
puVar6 = &DAT_000648a8 + (*(int *)(param_1 + 0x10) - *(int *)(param_1 + 0x14));
|
|
puVar7 = &DAT_000648ad;
|
|
}
|
|
FUN_00037294(param_1,puVar6,puVar7);
|
|
LAB_000542f4:
|
|
pcVar1 = (char *)FUN_0004de94(param_2);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x28);
|
|
iVar3 = *(int *)(param_1 + 0x2c);
|
|
if ((uint)(iVar5 - iVar3) < sVar2) {
|
|
if (iVar5 != iVar3) {
|
|
__aeabi_memmove(iVar3,pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x28);
|
|
iVar3 = *(int *)(param_1 + 0x2c);
|
|
}
|
|
FUN_00037294(param_1 + 0x18,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar3,pcVar1,sVar2);
|
|
iVar5 = *(int *)(param_1 + 0x28);
|
|
iVar3 = *(int *)(param_1 + 0x2c);
|
|
}
|
|
iVar3 = iVar3 + sVar2;
|
|
if (iVar3 != iVar5) {
|
|
__aeabi_memmove(iVar3);
|
|
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + (iVar3 - iVar5);
|
|
}
|
|
}
|
|
pcVar1 = (char *)FUN_0004de88(param_2);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x40);
|
|
iVar3 = *(int *)(param_1 + 0x44);
|
|
if ((uint)(iVar5 - iVar3) < sVar2) {
|
|
if (iVar5 != iVar3) {
|
|
__aeabi_memmove(iVar3,pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x40);
|
|
iVar3 = *(int *)(param_1 + 0x44);
|
|
}
|
|
FUN_00037294(param_1 + 0x30,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar3,pcVar1,sVar2);
|
|
iVar5 = *(int *)(param_1 + 0x40);
|
|
iVar3 = *(int *)(param_1 + 0x44);
|
|
}
|
|
iVar3 = iVar3 + sVar2;
|
|
if (iVar3 != iVar5) {
|
|
__aeabi_memmove(iVar3);
|
|
*(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + (iVar3 - iVar5);
|
|
}
|
|
}
|
|
pcVar1 = (char *)FUN_0004debc(param_2);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x58);
|
|
iVar3 = *(int *)(param_1 + 0x5c);
|
|
if ((uint)(iVar5 - iVar3) < sVar2) {
|
|
if (iVar5 != iVar3) {
|
|
__aeabi_memmove(iVar3,pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x58);
|
|
iVar3 = *(int *)(param_1 + 0x5c);
|
|
}
|
|
FUN_00037294(param_1 + 0x48,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar3,pcVar1,sVar2);
|
|
iVar5 = *(int *)(param_1 + 0x58);
|
|
iVar3 = *(int *)(param_1 + 0x5c);
|
|
}
|
|
iVar3 = iVar3 + sVar2;
|
|
if (iVar3 != iVar5) {
|
|
__aeabi_memmove(iVar3);
|
|
*(int *)(param_1 + 0x58) = *(int *)(param_1 + 0x58) + (iVar3 - iVar5);
|
|
}
|
|
}
|
|
pcVar1 = (char *)FUN_0004deb0(param_2);
|
|
sVar2 = strlen(pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x70);
|
|
iVar3 = *(int *)(param_1 + 0x74);
|
|
if ((uint)(iVar5 - iVar3) < sVar2) {
|
|
if (iVar5 != iVar3) {
|
|
__aeabi_memmove(iVar3,pcVar1);
|
|
iVar5 = *(int *)(param_1 + 0x70);
|
|
iVar3 = *(int *)(param_1 + 0x74);
|
|
}
|
|
FUN_00037294(param_1 + 0x60,pcVar1 + (iVar5 - iVar3),pcVar1 + sVar2);
|
|
}
|
|
else {
|
|
if (sVar2 != 0) {
|
|
__aeabi_memmove(iVar3,pcVar1,sVar2);
|
|
iVar5 = *(int *)(param_1 + 0x70);
|
|
iVar3 = *(int *)(param_1 + 0x74);
|
|
}
|
|
iVar3 = iVar3 + sVar2;
|
|
if (iVar3 != iVar5) {
|
|
__aeabi_memmove(iVar3);
|
|
*(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) + (iVar3 - iVar5);
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00054550 @ 00054550
|
|
|
|
int * FUN_00054550(int *param_1,uint param_2,undefined4 param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
undefined1 *puVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
int *piVar9;
|
|
int *piVar10;
|
|
int *piVar11;
|
|
|
|
if (param_2 != 0) {
|
|
piVar9 = (int *)param_1[0x46];
|
|
piVar10 = (int *)param_1[4];
|
|
piVar2 = param_1 + 0x46;
|
|
if ((uint)((-2 - (int)piVar10) + (int)piVar9) < param_2) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
if (piVar9 == param_1) {
|
|
piVar3 = param_1 + 4;
|
|
}
|
|
else {
|
|
piVar3 = (int *)*param_1;
|
|
}
|
|
piVar11 = piVar10;
|
|
if ((uint)((int)piVar3 - (int)piVar10) <= param_2) {
|
|
uVar4 = (int)piVar10 - (int)piVar9;
|
|
if (-uVar4 - 2 < param_2) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar7 = uVar4;
|
|
if (uVar4 <= param_2) {
|
|
uVar7 = param_2;
|
|
}
|
|
uVar8 = uVar4 + uVar7 + 1;
|
|
uVar5 = 0xfffffffe;
|
|
if (uVar4 <= uVar8) {
|
|
uVar5 = uVar8;
|
|
}
|
|
uVar8 = 0xfffffffe;
|
|
if (uVar4 + uVar7 != -2) {
|
|
uVar8 = uVar5;
|
|
}
|
|
if (uVar8 >> 1 < 0x81) {
|
|
piVar3 = param_1 + 5;
|
|
}
|
|
else {
|
|
piVar3 = (int *)operator_new(uVar8);
|
|
piVar10 = (int *)param_1[4];
|
|
piVar9 = (int *)*piVar2;
|
|
}
|
|
piVar11 = piVar3;
|
|
if (0 < (int)piVar10 - (int)piVar9) {
|
|
puVar6 = (undefined1 *)((int)piVar10 + (1 - (int)piVar9));
|
|
do {
|
|
*(char *)piVar11 = (char)*piVar9;
|
|
puVar6 = puVar6 + -1;
|
|
piVar11 = (int *)((int)piVar11 + 1);
|
|
piVar9 = (int *)((int)piVar9 + 1);
|
|
} while (1 < (int)puVar6);
|
|
}
|
|
*(undefined1 *)piVar11 = 0;
|
|
piVar10 = (int *)*piVar2;
|
|
if (((piVar10 != param_1) && (piVar10 != (int *)0x0)) && (param_1 + 5 != piVar10)) {
|
|
if ((uint)(*param_1 - (int)piVar10) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar10,*param_1 - (int)piVar10);
|
|
}
|
|
else {
|
|
operator_delete(piVar10);
|
|
}
|
|
}
|
|
param_1[4] = (int)piVar11;
|
|
*param_1 = (int)((int)piVar3 + uVar8);
|
|
*piVar2 = (int)piVar3;
|
|
}
|
|
if (0 < (int)(param_2 - 1)) {
|
|
iVar1 = -param_2;
|
|
if (param_2 == 2 || iVar1 < -2) {
|
|
iVar1 = -2;
|
|
}
|
|
__aeabi_memset((undefined1 *)((int)piVar11 + 1),iVar1 + param_2 + 1,param_3);
|
|
piVar11 = (int *)param_1[4];
|
|
}
|
|
*(undefined1 *)((int)piVar11 + param_2) = 0;
|
|
*(char *)param_1[4] = (char)param_3;
|
|
param_1[4] = param_1[4] + param_2;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005467c @ 0005467c
|
|
|
|
void FUN_0005467c(int *param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined4 param_5)
|
|
|
|
{
|
|
byte *pbVar1;
|
|
byte bVar2;
|
|
byte *pbVar3;
|
|
uint uVar4;
|
|
byte *pbVar5;
|
|
uint *puVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
undefined1 uVar9;
|
|
byte *pbVar10;
|
|
|
|
pbVar3 = *(byte **)(param_3 + 0x10);
|
|
pbVar10 = *(byte **)(param_3 + 0x14);
|
|
if (pbVar3 != pbVar10) {
|
|
do {
|
|
bVar2 = *pbVar10;
|
|
if (bVar2 == 0x25) {
|
|
pbVar1 = pbVar10 + 1;
|
|
pbVar5 = pbVar10 + 1;
|
|
pbVar10 = pbVar10 + 2;
|
|
if (*pbVar1 != 0x23) {
|
|
pbVar10 = pbVar5;
|
|
}
|
|
uVar9 = 0;
|
|
if (*pbVar1 == 0x23) {
|
|
uVar9 = 0x23;
|
|
}
|
|
FUN_00052734(param_1,param_2,*pbVar10,uVar9,param_4,param_5);
|
|
}
|
|
else {
|
|
puVar6 = (uint *)param_1[0x10];
|
|
uVar4 = (int)puVar6 - param_1[0x112] >> 2;
|
|
if (param_1 == (int *)param_1[0x112]) {
|
|
uVar7 = 0x10 - ((int)puVar6 - (int)param_1 >> 2);
|
|
}
|
|
else {
|
|
uVar7 = *param_1 - (int)puVar6 >> 2;
|
|
}
|
|
if (uVar7 < 2) {
|
|
uVar7 = uVar4;
|
|
if (uVar4 < 2) {
|
|
uVar7 = 1;
|
|
}
|
|
uVar8 = uVar4 + uVar7 + 1;
|
|
uVar7 = 0x3ffffffe;
|
|
if (uVar4 <= uVar8) {
|
|
uVar7 = uVar8;
|
|
}
|
|
uVar4 = 0x3ffffffe;
|
|
if (uVar8 < 0x3fffffff) {
|
|
uVar4 = uVar7;
|
|
}
|
|
FUN_000506a4(param_1,uVar4);
|
|
puVar6 = (uint *)param_1[0x10];
|
|
}
|
|
*puVar6 = (uint)bVar2;
|
|
puVar6[1] = 0;
|
|
param_1[0x10] = (int)(puVar6 + 1);
|
|
}
|
|
pbVar10 = pbVar10 + 1;
|
|
} while (pbVar10 != pbVar3);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005473c @ 0005473c
|
|
|
|
int * FUN_0005473c(int *param_1,int *param_2,int *param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
undefined4 uVar5;
|
|
int *piVar6;
|
|
uint uVar7;
|
|
int *piVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
int *piVar11;
|
|
uint local_18;
|
|
|
|
if (param_2 != param_3) {
|
|
piVar6 = (int *)param_1[0x112];
|
|
piVar1 = param_1 + 0x112;
|
|
iVar2 = (int)param_3 - (int)param_2;
|
|
uVar9 = iVar2 >> 2;
|
|
if (piVar6 == param_1) {
|
|
piVar3 = (int *)param_1[0x10];
|
|
uVar7 = 0x10 - ((int)piVar3 - (int)param_1 >> 2);
|
|
}
|
|
else {
|
|
piVar3 = (int *)param_1[0x10];
|
|
uVar7 = *param_1 - (int)piVar3 >> 2;
|
|
}
|
|
piVar8 = param_1 + 0x10;
|
|
if (uVar9 < uVar7) {
|
|
piVar1 = param_2 + 1;
|
|
*piVar3 = *param_2;
|
|
if (piVar1 != param_3) {
|
|
__aeabi_memcpy(piVar3 + 1,piVar1,(int)param_3 - (int)piVar1);
|
|
piVar3 = (int *)*piVar8;
|
|
}
|
|
piVar3[uVar9] = 0;
|
|
*piVar8 = (int)(piVar3 + uVar9);
|
|
}
|
|
else {
|
|
uVar7 = (int)piVar3 - (int)piVar6 >> 2;
|
|
if (0x3ffffffe - uVar7 < uVar9) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
uVar10 = uVar7;
|
|
if (uVar7 <= uVar9) {
|
|
uVar10 = uVar9;
|
|
}
|
|
uVar10 = uVar7 + uVar10 + 1;
|
|
uVar9 = 0x3ffffffe;
|
|
if (uVar7 <= uVar10) {
|
|
uVar9 = uVar10;
|
|
}
|
|
uVar7 = 0x3ffffffe;
|
|
if (uVar10 < 0x3fffffff) {
|
|
uVar7 = uVar9;
|
|
}
|
|
if (uVar7 >> 1 < 0x81) {
|
|
piVar4 = param_1 + 0x11;
|
|
}
|
|
else {
|
|
if (0x3fffffff < uVar7) {
|
|
FUN_00030824(4);
|
|
uVar5 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar5,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
local_18 = uVar7 << 2;
|
|
if (local_18 < 0x81) {
|
|
piVar4 = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
}
|
|
else {
|
|
piVar4 = (int *)operator_new(local_18);
|
|
}
|
|
piVar3 = (int *)*piVar8;
|
|
piVar6 = (int *)*piVar1;
|
|
}
|
|
piVar11 = piVar4;
|
|
if (piVar3 != piVar6) {
|
|
__aeabi_memcpy(piVar4,piVar6,(int)piVar3 - (int)piVar6);
|
|
piVar11 = (int *)((int)piVar4 + ((int)piVar3 - (int)piVar6));
|
|
}
|
|
__aeabi_memcpy(piVar11,param_2,iVar2);
|
|
*(undefined4 *)((int)piVar11 + iVar2) = 0;
|
|
piVar6 = (int *)*piVar1;
|
|
if (((piVar6 != param_1) && (piVar6 != (int *)0x0)) && (param_1 + 0x11 != piVar6)) {
|
|
if ((uint)(*param_1 - (int)piVar6) < 0x81) {
|
|
std::__node_alloc::_M_deallocate(piVar6,*param_1 - (int)piVar6);
|
|
}
|
|
else {
|
|
operator_delete(piVar6);
|
|
}
|
|
}
|
|
*param_1 = (int)(piVar4 + uVar7);
|
|
*piVar8 = (int)piVar11 + iVar2;
|
|
*piVar1 = (int)piVar4;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005489c @ 0005489c
|
|
|
|
void FUN_0005489c(undefined4 *param_1,undefined4 param_2,locale *param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
void *pvVar3;
|
|
undefined1 auStack_28 [8];
|
|
undefined4 local_20;
|
|
locale alStack_1c [4];
|
|
undefined1 auStack_18 [4];
|
|
|
|
piVar1 = (int *)std::locale::_M_use_facet(param_3,(id *)&std::ctype<wchar_t>::id);
|
|
iVar2 = FUN_00031886(*(undefined4 *)(*piVar1 + -4),&std::ctype<wchar_t>::typeinfo);
|
|
if (iVar2 == 1) {
|
|
pvVar3 = (void *)*param_1;
|
|
if (pvVar3 == (void *)0x0) {
|
|
pvVar3 = operator_new(0x1c);
|
|
FUN_0005529c(pvVar3,0,&local_20,auStack_28,auStack_18);
|
|
*param_1 = pvVar3;
|
|
}
|
|
local_20 = param_2;
|
|
std::locale::locale(alStack_1c,param_3);
|
|
FUN_0005536c(auStack_28,pvVar3,&local_20);
|
|
std::locale::~locale(alStack_1c);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00054940 @ 00054940
|
|
|
|
void FUN_00054940(int *param_1,undefined4 param_2)
|
|
|
|
{
|
|
undefined4 local_c;
|
|
|
|
if (*param_1 != 0) {
|
|
local_c = param_2;
|
|
FUN_00055706(*param_1,&local_c);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00054958 @ 00054958
|
|
|
|
void FUN_00054958(locale *param_1,int *param_2,int param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
locale *plVar2;
|
|
int extraout_r1;
|
|
int *piVar3;
|
|
int iVar4;
|
|
|
|
iVar1 = *param_2;
|
|
if (iVar1 != 0) {
|
|
iVar4 = *(int *)(iVar1 + 8);
|
|
__aeabi_uidivmod(param_3,(*(int *)(iVar1 + 0xc) - iVar4 >> 2) + -1);
|
|
for (piVar3 = *(int **)(iVar4 + extraout_r1 * 4);
|
|
(int *)*(int *)(iVar4 + extraout_r1 * 4 + 4) != piVar3; piVar3 = (int *)*piVar3) {
|
|
if (piVar3[1] == param_3) {
|
|
if (piVar3 != (int *)0x0) {
|
|
plVar2 = (locale *)(piVar3 + 2);
|
|
goto LAB_000549a0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
plVar2 = (locale *)std::locale::classic();
|
|
LAB_000549a0:
|
|
std::locale::locale(param_1,plVar2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000549ac @ 000549ac
|
|
|
|
int * FUN_000549ac(int *param_1,int param_2,char *param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
undefined1 auStack_11c [256];
|
|
int local_1c;
|
|
char *local_18;
|
|
|
|
*param_1 = 0;
|
|
param_1[1] = 0;
|
|
local_18 = param_3;
|
|
if (param_3 == (char *)0x0) {
|
|
std::locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar1 = FUN_0004a4bc(&local_18,auStack_11c,0,&local_1c);
|
|
*param_1 = iVar1;
|
|
if (iVar1 != 0) {
|
|
if (param_2 == 1) {
|
|
puVar2 = (undefined4 *)operator_new(4);
|
|
*puVar2 = 0;
|
|
param_1[1] = (int)puVar2;
|
|
}
|
|
return param_1;
|
|
}
|
|
}
|
|
std::locale::_M_throw_on_creation_failure(local_1c,local_18,"messages");
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00054a08 @ 00054a08
|
|
|
|
undefined4 * FUN_00054a08(undefined4 *param_1,int param_2,undefined4 param_3)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
*param_1 = param_3;
|
|
puVar1 = (undefined4 *)0x0;
|
|
if (param_2 == 1) {
|
|
puVar1 = (undefined4 *)operator_new(4);
|
|
*puVar1 = 0;
|
|
}
|
|
param_1[1] = puVar1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00054a26 @ 00054a26
|
|
|
|
undefined4 * FUN_00054a26(undefined4 *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
void *pvVar2;
|
|
|
|
FUN_0004a824(*param_1);
|
|
puVar1 = (undefined4 *)param_1[1];
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
pvVar2 = (void *)*puVar1;
|
|
if (pvVar2 != (void *)0x0) {
|
|
FUN_000551be(pvVar2);
|
|
operator_delete(pvVar2);
|
|
}
|
|
operator_delete(puVar1);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00054aa6 @ 00054aa6
|
|
|
|
void FUN_00054aa6(undefined4 param_1,int *param_2,int param_3,undefined4 param_4,undefined4 param_5,
|
|
int param_6)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined1 auStack_18 [4];
|
|
|
|
if ((-1 < param_3) && (*param_2 != 0)) {
|
|
uVar1 = FUN_0004df40(*param_2,param_3,param_4,param_5,*(undefined4 *)(param_6 + 0x14));
|
|
FUN_00031c38(param_1,uVar1,auStack_18);
|
|
return;
|
|
}
|
|
FUN_00036f1c(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00054aec @ 00054aec
|
|
|
|
void FUN_00054aec(undefined4 param_1,undefined4 *param_2,int param_3,undefined4 param_4,
|
|
undefined4 param_5,undefined4 param_6)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
locale *plVar3;
|
|
char *__s;
|
|
size_t sVar4;
|
|
char *pcVar5;
|
|
int extraout_r1;
|
|
int *piVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
int *piVar9;
|
|
int local_60 [16];
|
|
int *local_20;
|
|
int *local_1c;
|
|
uint local_18;
|
|
|
|
iVar2 = *(int *)param_2[1];
|
|
if (iVar2 != 0) {
|
|
iVar7 = *(int *)(iVar2 + 8);
|
|
__aeabi_uidivmod(param_3,(*(int *)(iVar2 + 0xc) - iVar7 >> 2) + -1);
|
|
for (piVar6 = *(int **)(iVar7 + extraout_r1 * 4);
|
|
(int *)*(int *)(iVar7 + extraout_r1 * 4 + 4) != piVar6; piVar6 = (int *)*piVar6) {
|
|
if (piVar6[1] == param_3) {
|
|
if (piVar6 != (int *)0x0) {
|
|
plVar3 = (locale *)(piVar6 + 2);
|
|
goto LAB_00054b3c;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
plVar3 = (locale *)std::locale::classic();
|
|
LAB_00054b3c:
|
|
std::locale::locale((locale *)local_60,plVar3);
|
|
piVar6 = (int *)std::locale::_M_use_facet((locale *)local_60,(id *)&std::ctype<wchar_t>::id);
|
|
std::locale::~locale((locale *)local_60);
|
|
__s = (char *)FUN_0004df40(*param_2,param_3,param_4,param_5,&DAT_0006478a);
|
|
if ((__s == (char *)0x0) ||
|
|
((*__s == '\0' &&
|
|
((pcVar5 = (char *)FUN_0004df40(*param_2,param_3,param_4,param_5,&LAB_00054cb4),
|
|
pcVar5 == (char *)0x0 || ((*pcVar5 == '*' && (pcVar5[1] == '\0')))))))) {
|
|
FUN_0004bac8(param_1,param_6);
|
|
}
|
|
else {
|
|
sVar4 = strlen(__s);
|
|
local_20 = local_60;
|
|
local_1c = local_20;
|
|
if (0x3ffffffe < sVar4) {
|
|
/* WARNING: Subroutine does not return */
|
|
std::__stl_throw_length_error("basic_string");
|
|
}
|
|
if (0x10 < sVar4 + 1) {
|
|
uVar8 = (sVar4 + 1) * 4;
|
|
local_18 = uVar8;
|
|
if (uVar8 < 0x81) {
|
|
local_1c = (int *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar8 = local_18;
|
|
}
|
|
else {
|
|
local_1c = (int *)operator_new(uVar8);
|
|
}
|
|
local_60[0] = (int)local_1c + (uVar8 & 0xfffffffc);
|
|
}
|
|
piVar9 = local_1c + sVar4;
|
|
if (0 < (int)(sVar4 * 4)) {
|
|
uVar8 = sVar4 ^ 0xffffffff;
|
|
if ((int)(sVar4 ^ 0xffffffff) < -1) {
|
|
uVar8 = 0xfffffffe;
|
|
}
|
|
local_20 = local_1c;
|
|
__aeabi_memclr4(local_1c,(sVar4 + uVar8) * 4 + 8);
|
|
}
|
|
piVar1 = local_1c;
|
|
local_20 = piVar9;
|
|
*piVar9 = 0;
|
|
(**(code **)(*piVar6 + 0x2c))(piVar6,__s,__s + sVar4,piVar1);
|
|
FUN_0004bac8(param_1,local_60);
|
|
if ((local_1c != local_60) && (local_1c != (int *)0x0)) {
|
|
if (0x80 < (uint)(local_60[0] - (int)local_1c)) {
|
|
operator_delete(local_1c);
|
|
return;
|
|
}
|
|
std::__node_alloc::_M_deallocate(local_1c,local_60[0] - (int)local_1c);
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00054cc0 @ 00054cc0
|
|
|
|
void FUN_00054cc0(int *param_1,undefined4 param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 local_14;
|
|
|
|
if (*param_1 != 0) {
|
|
FUN_0004df3e(*param_1,param_2);
|
|
}
|
|
if ((int *)param_1[1] != (int *)0x0) {
|
|
iVar1 = *(int *)param_1[1];
|
|
if (iVar1 != 0) {
|
|
local_14 = param_2;
|
|
FUN_00055706(iVar1,&local_14);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC messages @ 00054cf0
|
|
|
|
/* std::messages<char>::messages(unsigned int) */
|
|
|
|
messages<char> * __thiscall std::messages<char>::messages(messages<char> *this,uint param_1)
|
|
|
|
{
|
|
*(uint *)(this + 4) = (uint)(param_1 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__facet_0006a268;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC messages_byname @ 00054d1c
|
|
|
|
/* std::messages_byname<char>::messages_byname(char const*, unsigned int) */
|
|
|
|
void __thiscall
|
|
std::messages_byname<char>::messages_byname(messages_byname<char> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
undefined1 auStack_11c [256];
|
|
int local_1c;
|
|
char *local_18;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_2 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__messages_byname_0006a284;
|
|
piVar1 = (int *)operator_new(0xc);
|
|
*piVar1 = 0;
|
|
piVar1[1] = 0;
|
|
local_18 = param_1;
|
|
if (param_1 == (char *)0x0) {
|
|
locale::_M_throw_on_null_name();
|
|
}
|
|
else {
|
|
iVar2 = FUN_0004a4bc(&local_18,auStack_11c,0,&local_1c);
|
|
*piVar1 = iVar2;
|
|
if (iVar2 != 0) {
|
|
*(int **)(this + 0xc) = piVar1;
|
|
return;
|
|
}
|
|
}
|
|
uVar3 = locale::_M_throw_on_creation_failure(local_1c,local_18,"messages");
|
|
operator_delete(piVar1);
|
|
locale::facet::~facet((facet *)this);
|
|
/* WARNING: Subroutine does not return */
|
|
___Unwind_Resume(uVar3);
|
|
}
|
|
|
|
|
|
|
|
### FUNC messages_byname @ 00054dac
|
|
|
|
/* std::messages_byname<char>::messages_byname(_Locale_messages*) */
|
|
|
|
messages_byname<char> * __thiscall
|
|
std::messages_byname<char>::messages_byname(messages_byname<char> *this,_Locale_messages *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
*(undefined4 *)(this + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__messages_byname_0006a284;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
*puVar1 = param_1;
|
|
puVar1[1] = 0;
|
|
*(undefined4 **)(this + 0xc) = puVar1;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~messages_byname @ 00054df0
|
|
|
|
/* std::messages_byname<char>::~messages_byname() */
|
|
|
|
void __thiscall std::messages_byname<char>::~messages_byname(messages_byname<char> *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR__messages_byname_0006a284;
|
|
pvVar1 = *(void **)(this + 0xc);
|
|
if (pvVar1 != (void *)0x0) {
|
|
FUN_00054a26(pvVar1);
|
|
operator_delete(pvVar1);
|
|
}
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~messages_byname @ 00054e3c
|
|
|
|
/* std::messages_byname<char>::~messages_byname() */
|
|
|
|
void __thiscall std::messages_byname<char>::~messages_byname(messages_byname<char> *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR__messages_byname_0006a284;
|
|
pvVar1 = *(void **)(this + 0xc);
|
|
if (pvVar1 != (void *)0x0) {
|
|
FUN_00054a26(pvVar1);
|
|
operator_delete(pvVar1);
|
|
}
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_open @ 00054e98
|
|
|
|
/* std::messages_byname<char>::do_open(std::string const&, std::locale const&) const */
|
|
|
|
int __thiscall
|
|
std::messages_byname<char>::do_open(messages_byname<char> *this,string *param_1,locale *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
|
|
piVar3 = *(int **)(this + 0xc);
|
|
iVar1 = *piVar3;
|
|
iVar4 = -1;
|
|
if (((iVar1 != 0) && (iVar1 = FUN_0004df38(iVar1,*(undefined4 *)(param_1 + 0x14)), iVar1 != -1))
|
|
&& (iVar2 = piVar3[1], iVar4 = iVar1, iVar2 != 0)) {
|
|
FUN_0005489c(iVar2,iVar1,param_2);
|
|
}
|
|
return iVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_get @ 00054ece
|
|
|
|
/* std::messages_byname<char>::do_get(int, int, int, std::string const&) const */
|
|
|
|
void std::messages_byname<char>::do_get(int param_1,int param_2,int param_3,string *param_4)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 in_stack_00000000;
|
|
int in_stack_00000004;
|
|
undefined1 auStack_18 [4];
|
|
|
|
if ((-1 < param_3) && (**(int **)(param_2 + 0xc) != 0)) {
|
|
uVar1 = FUN_0004df40(**(int **)(param_2 + 0xc),param_3,param_4,in_stack_00000000,
|
|
*(undefined4 *)(in_stack_00000004 + 0x14));
|
|
FUN_00031c38(param_1,uVar1,auStack_18);
|
|
return;
|
|
}
|
|
FUN_00036f1c(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_close @ 00054f14
|
|
|
|
/* std::messages_byname<char>::do_close(int) const */
|
|
|
|
void __thiscall std::messages_byname<char>::do_close(messages_byname<char> *this,int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
int local_14;
|
|
|
|
piVar2 = *(int **)(this + 0xc);
|
|
iVar1 = *piVar2;
|
|
if (iVar1 != 0) {
|
|
FUN_0004df3e(iVar1,param_1);
|
|
}
|
|
piVar2 = (int *)piVar2[1];
|
|
if (piVar2 != (int *)0x0) {
|
|
iVar1 = *piVar2;
|
|
if (iVar1 != 0) {
|
|
local_14 = param_1;
|
|
FUN_00055706(iVar1,&local_14);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC messages @ 00054f44
|
|
|
|
/* std::messages<wchar_t>::messages(unsigned int) */
|
|
|
|
messages<wchar_t> * __thiscall
|
|
std::messages<wchar_t>::messages(messages<wchar_t> *this,uint param_1)
|
|
|
|
{
|
|
*(uint *)(this + 4) = (uint)(param_1 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__facet_0006a2a0;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC messages_byname @ 00054f70
|
|
|
|
/* std::messages_byname<wchar_t>::messages_byname(char const*, unsigned int) */
|
|
|
|
messages_byname<wchar_t> * __thiscall
|
|
std::messages_byname<wchar_t>::messages_byname
|
|
(messages_byname<wchar_t> *this,char *param_1,uint param_2)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(uint *)(this + 4) = (uint)(param_2 != 0);
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__messages_byname_0006a2bc;
|
|
pvVar1 = operator_new(0xc);
|
|
FUN_000549ac(pvVar1,1,param_1);
|
|
*(void **)(this + 0xc) = pvVar1;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC messages_byname @ 00054fd4
|
|
|
|
/* std::messages_byname<wchar_t>::messages_byname(_Locale_messages*) */
|
|
|
|
messages_byname<wchar_t> * __thiscall
|
|
std::messages_byname<wchar_t>::messages_byname
|
|
(messages_byname<wchar_t> *this,_Locale_messages *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
undefined4 *puVar2;
|
|
|
|
*(undefined4 *)(this + 4) = 0;
|
|
pthread_mutex_init((pthread_mutex_t *)(this + 8),(pthread_mutexattr_t *)0x0);
|
|
*(undefined ***)this = &PTR__messages_byname_0006a2bc;
|
|
puVar1 = (undefined4 *)operator_new(0xc);
|
|
*puVar1 = param_1;
|
|
puVar2 = (undefined4 *)operator_new(4);
|
|
*puVar2 = 0;
|
|
puVar1[1] = puVar2;
|
|
*(undefined4 **)(this + 0xc) = puVar1;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~messages_byname @ 00055030
|
|
|
|
/* std::messages_byname<wchar_t>::~messages_byname() */
|
|
|
|
void __thiscall std::messages_byname<wchar_t>::~messages_byname(messages_byname<wchar_t> *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR__messages_byname_0006a2bc;
|
|
pvVar1 = *(void **)(this + 0xc);
|
|
if (pvVar1 != (void *)0x0) {
|
|
FUN_00054a26(pvVar1);
|
|
operator_delete(pvVar1);
|
|
}
|
|
locale::facet::~facet((facet *)this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ~messages_byname @ 0005507c
|
|
|
|
/* std::messages_byname<wchar_t>::~messages_byname() */
|
|
|
|
void __thiscall std::messages_byname<wchar_t>::~messages_byname(messages_byname<wchar_t> *this)
|
|
|
|
{
|
|
void *pvVar1;
|
|
|
|
*(undefined ***)this = &PTR__messages_byname_0006a2bc;
|
|
pvVar1 = *(void **)(this + 0xc);
|
|
if (pvVar1 != (void *)0x0) {
|
|
FUN_00054a26(pvVar1);
|
|
operator_delete(pvVar1);
|
|
}
|
|
locale::facet::~facet((facet *)this);
|
|
operator_delete(this);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_open @ 000550d8
|
|
|
|
/* std::messages_byname<wchar_t>::do_open(std::string const&, std::locale const&) const */
|
|
|
|
int __thiscall
|
|
std::messages_byname<wchar_t>::do_open
|
|
(messages_byname<wchar_t> *this,string *param_1,locale *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
|
|
piVar3 = *(int **)(this + 0xc);
|
|
iVar1 = *piVar3;
|
|
iVar4 = -1;
|
|
if (((iVar1 != 0) && (iVar1 = FUN_0004df38(iVar1,*(undefined4 *)(param_1 + 0x14)), iVar1 != -1))
|
|
&& (iVar2 = piVar3[1], iVar4 = iVar1, iVar2 != 0)) {
|
|
FUN_0005489c(iVar2,iVar1,param_2);
|
|
}
|
|
return iVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_get @ 0005510e
|
|
|
|
/* std::messages_byname<wchar_t>::do_get(int, int, int, std::wstring const&) const */
|
|
|
|
void std::messages_byname<wchar_t>::do_get(int param_1,int param_2,int param_3,wstring *param_4)
|
|
|
|
{
|
|
FUN_00054aec(param_1,*(undefined4 *)(param_2 + 0xc));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC do_close @ 00055128
|
|
|
|
/* std::messages_byname<wchar_t>::do_close(int) const */
|
|
|
|
void __thiscall std::messages_byname<wchar_t>::do_close(messages_byname<wchar_t> *this,int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
int local_14;
|
|
|
|
piVar2 = *(int **)(this + 0xc);
|
|
iVar1 = *piVar2;
|
|
if (iVar1 != 0) {
|
|
FUN_0004df3e(iVar1,param_1);
|
|
}
|
|
piVar2 = (int *)piVar2[1];
|
|
if (piVar2 != (int *)0x0) {
|
|
iVar1 = *piVar2;
|
|
if (iVar1 != 0) {
|
|
local_14 = param_1;
|
|
FUN_00055706(iVar1,&local_14);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00055156 @ 00055156
|
|
|
|
void FUN_00055156(facet *param_1)
|
|
|
|
{
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005517c @ 0005517c
|
|
|
|
void FUN_0005517c(undefined4 param_1)
|
|
|
|
{
|
|
undefined4 in_stack_00000004;
|
|
|
|
FUN_00036f1c(param_1,in_stack_00000004);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005518a @ 0005518a
|
|
|
|
void FUN_0005518a(facet *param_1)
|
|
|
|
{
|
|
std::locale::facet::~facet(param_1);
|
|
operator_delete(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000551b0 @ 000551b0
|
|
|
|
void FUN_000551b0(undefined4 param_1)
|
|
|
|
{
|
|
undefined4 in_stack_00000004;
|
|
|
|
FUN_0004bac8(param_1,in_stack_00000004);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000551be @ 000551be
|
|
|
|
int FUN_000551be(int param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
uint uVar2;
|
|
void *pvVar3;
|
|
undefined4 local_18;
|
|
|
|
puVar1 = (undefined4 *)*(void **)(param_1 + 4);
|
|
while (puVar1 != (undefined4 *)0x0) {
|
|
pvVar3 = (void *)*puVar1;
|
|
std::locale::~locale((locale *)(puVar1 + 2));
|
|
std::__node_alloc::_M_deallocate(puVar1,0xc);
|
|
puVar1 = (undefined4 *)pvVar3;
|
|
}
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
local_18 = 0;
|
|
FUN_0004aa50(param_1 + 8,*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2,&local_18);
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
pvVar3 = *(void **)(param_1 + 8);
|
|
if (pvVar3 != (void *)0x0) {
|
|
uVar2 = *(int *)(param_1 + 0x10) - (int)pvVar3;
|
|
if (uVar2 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar3,uVar2);
|
|
}
|
|
else {
|
|
operator_delete(pvVar3);
|
|
}
|
|
}
|
|
puVar1 = (undefined4 *)*(void **)(param_1 + 4);
|
|
while (puVar1 != (undefined4 *)0x0) {
|
|
pvVar3 = (void *)*puVar1;
|
|
std::locale::~locale((locale *)(puVar1 + 2));
|
|
std::__node_alloc::_M_deallocate(puVar1,0xc);
|
|
puVar1 = (undefined4 *)pvVar3;
|
|
}
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005529c @ 0005529c
|
|
|
|
int FUN_0005529c(int param_1,uint param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
undefined4 local_18;
|
|
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
*(undefined4 *)(param_1 + 0x18) = 0x3f800000;
|
|
piVar1 = &DAT_0006537c;
|
|
uVar5 = 0x1e;
|
|
while (uVar4 = uVar5, 0 < (int)uVar4) {
|
|
uVar5 = uVar4 >> 1;
|
|
if ((uint)piVar1[uVar5] < param_2) {
|
|
piVar1 = piVar1 + uVar5 + 1;
|
|
uVar5 = (uVar4 - 1) - uVar5;
|
|
}
|
|
}
|
|
piVar3 = &DAT_000653f0;
|
|
if (piVar1 != (int *)&DAT_000653f4) {
|
|
piVar3 = piVar1;
|
|
}
|
|
iVar2 = *piVar3;
|
|
FUN_0004a990(param_1 + 8,iVar2 + 1);
|
|
local_18 = 0;
|
|
FUN_0004aa50(param_1 + 8,iVar2 + 1,&local_18);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005536c @ 0005536c
|
|
|
|
void FUN_0005536c(undefined4 param_1,int param_2,undefined4 param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
uint uVar3;
|
|
undefined4 *puVar4;
|
|
int iVar5;
|
|
undefined4 *puVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
|
|
iVar1 = *(int *)(param_2 + 8);
|
|
iVar5 = *(int *)(param_2 + 0xc);
|
|
uVar2 = __floatunsisf(*(int *)(param_2 + 0x14) + 1);
|
|
__divsf3(uVar2,*(undefined4 *)(param_2 + 0x18));
|
|
uVar3 = __fixunssfsi();
|
|
if ((iVar5 - iVar1 >> 2) - 1U < uVar3) {
|
|
puVar6 = &DAT_0006537c;
|
|
uVar8 = 0x1e;
|
|
while (uVar7 = uVar8, 0 < (int)uVar7) {
|
|
uVar8 = uVar7 >> 1;
|
|
if ((uint)puVar6[uVar8] < uVar3) {
|
|
puVar6 = puVar6 + uVar8 + 1;
|
|
uVar8 = (uVar7 - 1) - uVar8;
|
|
}
|
|
}
|
|
puVar4 = &DAT_000653f0;
|
|
if (puVar6 != (undefined4 *)&DAT_000653f4) {
|
|
puVar4 = puVar6;
|
|
}
|
|
FUN_00055480(param_2,*puVar4);
|
|
}
|
|
FUN_000553e8(param_1,param_2,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000553e8 @ 000553e8
|
|
|
|
void FUN_000553e8(undefined4 *param_1,int param_2,int *param_3)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int extraout_r1;
|
|
undefined4 *puVar2;
|
|
undefined4 *puVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
undefined4 local_1c;
|
|
uint local_18;
|
|
|
|
iVar5 = *(int *)(param_2 + 8);
|
|
iVar4 = *param_3;
|
|
__aeabi_uidivmod(iVar4,(*(int *)(param_2 + 0xc) - iVar5 >> 2) + -1);
|
|
puVar3 = *(undefined4 **)(iVar5 + extraout_r1 * 4);
|
|
puVar1 = *(undefined4 **)(iVar5 + extraout_r1 * 4 + 4);
|
|
puVar2 = puVar3;
|
|
if (puVar3 == puVar1) {
|
|
FUN_0005564c(&local_1c,param_2,extraout_r1,param_3);
|
|
*(undefined1 *)(param_1 + 1) = 1;
|
|
*param_1 = local_1c;
|
|
return;
|
|
}
|
|
do {
|
|
if (puVar2[1] == iVar4) {
|
|
*(undefined1 *)(param_1 + 1) = 0;
|
|
*param_1 = puVar2;
|
|
return;
|
|
}
|
|
puVar2 = (undefined4 *)*puVar2;
|
|
} while (puVar1 != puVar2);
|
|
local_18 = 0xc;
|
|
puVar2 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18);
|
|
puVar2[1] = *param_3;
|
|
std::locale::locale((locale *)(puVar2 + 2),(locale *)(param_3 + 1));
|
|
*puVar2 = 0;
|
|
*puVar2 = *puVar3;
|
|
*puVar3 = puVar2;
|
|
*(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1;
|
|
*(undefined1 *)(param_1 + 1) = 1;
|
|
*param_1 = puVar2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00055480 @ 00055480
|
|
|
|
void FUN_00055480(int param_1,int param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
void *pvVar3;
|
|
int *****pppppiVar4;
|
|
void *pvVar5;
|
|
undefined4 uVar6;
|
|
int extraout_r1;
|
|
int *****pppppiVar7;
|
|
int *****pppppiVar8;
|
|
undefined4 *puVar9;
|
|
int iVar10;
|
|
int *****pppppiVar11;
|
|
int ****ppppiVar12;
|
|
int *****pppppiVar13;
|
|
int ****ppppiVar14;
|
|
int *****pppppiVar15;
|
|
int *****pppppiVar16;
|
|
void *local_3c;
|
|
int local_38;
|
|
void *local_20;
|
|
int ****local_1c;
|
|
uint local_18;
|
|
|
|
local_20 = (void *)0x0;
|
|
local_1c = (int ****)0x0;
|
|
pppppiVar13 = (int *****)(param_1 + 4);
|
|
uVar1 = param_2 + 1;
|
|
if (uVar1 >> 0x1e == 0) {
|
|
if (uVar1 == 0) {
|
|
local_38 = 0;
|
|
local_3c = (void *)0x0;
|
|
}
|
|
else {
|
|
uVar1 = uVar1 * 4;
|
|
local_18 = uVar1;
|
|
if (uVar1 < 0x81) {
|
|
local_20 = (void *)std::__node_alloc::_M_allocate(&local_18);
|
|
uVar2 = local_18;
|
|
}
|
|
else {
|
|
local_20 = operator_new(uVar1);
|
|
uVar2 = uVar1;
|
|
}
|
|
local_3c = (void *)((int)local_20 + uVar1);
|
|
local_38 = (int)local_20 + (uVar2 & 0xfffffffc);
|
|
if (0 < (int)uVar1) {
|
|
iVar10 = -2 - param_2;
|
|
if (-2 - param_2 < -1) {
|
|
iVar10 = -2;
|
|
}
|
|
__aeabi_memclr4(local_20,(iVar10 + param_2) * 4 + 0xc);
|
|
}
|
|
}
|
|
while (pppppiVar16 = (int *****)*pppppiVar13, pppppiVar16 != (int *****)0x0) {
|
|
ppppiVar14 = pppppiVar16[1];
|
|
__aeabi_uidivmod(ppppiVar14,param_2);
|
|
pppppiVar11 = pppppiVar16;
|
|
for (ppppiVar12 = *pppppiVar16;
|
|
(ppppiVar12 != (int ****)0x0 && (ppppiVar14 == (int ****)ppppiVar12[1]));
|
|
ppppiVar12 = (int ****)*ppppiVar12) {
|
|
pppppiVar11 = (int *****)*pppppiVar11;
|
|
}
|
|
pppppiVar15 = *(int ******)((int)local_20 + extraout_r1 * 4);
|
|
pvVar3 = (void *)((int)local_20 + extraout_r1 * 4);
|
|
iVar10 = 0;
|
|
pvVar5 = pvVar3;
|
|
pppppiVar7 = &local_1c;
|
|
if (pppppiVar15 != (int *****)local_1c) {
|
|
do {
|
|
pppppiVar7 = *(int ******)((int)pvVar5 + -4);
|
|
pvVar5 = (void *)((int)pvVar5 + -4);
|
|
} while (pppppiVar15 == pppppiVar7);
|
|
iVar10 = ((int)pvVar5 - (int)local_20 >> 2) + 1;
|
|
pppppiVar4 = (int *****)*pppppiVar7;
|
|
if ((pppppiVar15 != pppppiVar4) &&
|
|
(pppppiVar8 = (int *****)*pppppiVar4, pppppiVar7 = pppppiVar4, pppppiVar15 != pppppiVar8)
|
|
) {
|
|
for (pppppiVar4 = (int *****)*pppppiVar8; pppppiVar7 = pppppiVar8,
|
|
pppppiVar15 != pppppiVar4; pppppiVar4 = (int *****)*pppppiVar4) {
|
|
pppppiVar8 = (int *****)*pppppiVar8;
|
|
}
|
|
}
|
|
}
|
|
if (((pppppiVar13 != pppppiVar11) && (pppppiVar13 != pppppiVar7)) &&
|
|
(pppppiVar7 != pppppiVar11)) {
|
|
ppppiVar12 = *pppppiVar7;
|
|
*pppppiVar13 = *pppppiVar11;
|
|
*pppppiVar7 = (int ****)pppppiVar16;
|
|
*pppppiVar11 = ppppiVar12;
|
|
}
|
|
puVar9 = (undefined4 *)((int)local_20 + iVar10 * 4);
|
|
uVar1 = (int)pvVar3 + (4 - (int)puVar9);
|
|
if (0 < (int)uVar1) {
|
|
iVar10 = (uVar1 >> 2) + 1;
|
|
do {
|
|
*puVar9 = pppppiVar16;
|
|
puVar9 = puVar9 + 1;
|
|
iVar10 = iVar10 + -1;
|
|
} while (1 < iVar10);
|
|
}
|
|
}
|
|
*(int *****)(param_1 + 4) = local_1c;
|
|
*(void **)(param_1 + 0xc) = local_3c;
|
|
pvVar5 = *(void **)(param_1 + 8);
|
|
*(void **)(param_1 + 8) = local_20;
|
|
iVar10 = *(int *)(param_1 + 0x10);
|
|
*(int *)(param_1 + 0x10) = local_38;
|
|
local_1c = (int ****)pppppiVar16;
|
|
if (pvVar5 != (void *)0x0) {
|
|
uVar1 = iVar10 - (int)pvVar5;
|
|
if (uVar1 < 0x81) {
|
|
std::__node_alloc::_M_deallocate(pvVar5,uVar1);
|
|
pppppiVar16 = (int *****)local_1c;
|
|
}
|
|
else {
|
|
operator_delete(pvVar5);
|
|
pppppiVar16 = (int *****)local_1c;
|
|
}
|
|
}
|
|
while (pppppiVar16 != (int *****)0x0) {
|
|
pppppiVar13 = (int *****)*pppppiVar16;
|
|
std::locale::~locale((locale *)(pppppiVar16 + 2));
|
|
std::__node_alloc::_M_deallocate(pppppiVar16,0xc);
|
|
pppppiVar16 = pppppiVar13;
|
|
}
|
|
return;
|
|
}
|
|
FUN_00030824(4);
|
|
uVar6 = FUN_00031390();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar6,&PTR_PTR_FUN_00031728_1_00068d90,0x313a9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005564c @ 0005564c
|
|
|
|
void FUN_0005564c(undefined4 *param_1,int param_2,int param_3,undefined4 *param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
undefined4 *puVar5;
|
|
undefined4 *puVar6;
|
|
undefined4 *puVar7;
|
|
int local_30;
|
|
uint local_18;
|
|
|
|
param_3 = param_3 * 4;
|
|
iVar4 = *(int *)(param_2 + 8);
|
|
puVar5 = *(undefined4 **)(iVar4 + param_3);
|
|
iVar1 = iVar4 + param_3;
|
|
if (puVar5 == *(undefined4 **)(param_2 + 4)) {
|
|
local_30 = 0;
|
|
puVar6 = (undefined4 *)(param_2 + 4);
|
|
}
|
|
else {
|
|
do {
|
|
puVar6 = *(undefined4 **)(iVar1 + -4);
|
|
iVar1 = iVar1 + -4;
|
|
} while (puVar5 == puVar6);
|
|
local_30 = (iVar1 - iVar4 >> 2) + 1;
|
|
puVar2 = (undefined4 *)*puVar6;
|
|
if (((puVar5 != puVar2) && (puVar7 = (undefined4 *)*puVar2, puVar6 = puVar2, puVar5 != puVar7))
|
|
&& (puVar2 = (undefined4 *)*puVar7, puVar6 = puVar7, puVar5 != puVar2)) {
|
|
puVar6 = puVar2;
|
|
for (puVar7 = (undefined4 *)*puVar2; puVar5 != puVar7; puVar7 = (undefined4 *)*puVar7) {
|
|
puVar6 = (undefined4 *)*puVar6;
|
|
}
|
|
}
|
|
}
|
|
local_18 = 0xc;
|
|
puVar5 = (undefined4 *)std::__node_alloc::_M_allocate(&local_18);
|
|
puVar5[1] = *param_4;
|
|
std::locale::locale((locale *)(puVar5 + 2),(locale *)(param_4 + 1));
|
|
*puVar5 = 0;
|
|
*puVar5 = *puVar6;
|
|
*puVar6 = puVar5;
|
|
puVar6 = (undefined4 *)(iVar4 + local_30 * 4);
|
|
uVar3 = (iVar4 + param_3 + 4) - (int)puVar6;
|
|
if (0 < (int)uVar3) {
|
|
iVar1 = (uVar3 >> 2) + 1;
|
|
do {
|
|
*puVar6 = puVar5;
|
|
puVar6 = puVar6 + 1;
|
|
iVar1 = iVar1 + -1;
|
|
} while (1 < iVar1);
|
|
}
|
|
*(int *)(param_2 + 0x14) = *(int *)(param_2 + 0x14) + 1;
|
|
*param_1 = *(undefined4 *)(*(int *)(param_2 + 8) + param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00055706 @ 00055706
|
|
|
|
int FUN_00055706(int param_1,int *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
int extraout_r1;
|
|
int *piVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
undefined4 *puVar8;
|
|
int *piVar9;
|
|
int iVar10;
|
|
int *piVar11;
|
|
int *piVar12;
|
|
int local_2c;
|
|
|
|
iVar10 = *(int *)(param_1 + 8);
|
|
iVar7 = *param_2;
|
|
__aeabi_uidivmod(iVar7,(*(int *)(param_1 + 0xc) - iVar10 >> 2) + -1);
|
|
iVar5 = extraout_r1 * 4;
|
|
piVar9 = *(int **)(iVar10 + iVar5);
|
|
iVar6 = iVar10 + iVar5;
|
|
piVar3 = *(int **)(iVar6 + 4);
|
|
iVar1 = 0;
|
|
if (piVar9 != piVar3) {
|
|
if (piVar9[1] != iVar7) {
|
|
piVar11 = (int *)*piVar9;
|
|
iVar1 = 0;
|
|
LAB_00055790:
|
|
if (piVar3 != piVar11) {
|
|
if (piVar11[1] != iVar7) goto LAB_0005578c;
|
|
iVar5 = 1;
|
|
do {
|
|
iVar1 = iVar5;
|
|
puVar8 = (undefined4 *)*piVar9;
|
|
piVar11 = (int *)*puVar8;
|
|
*piVar9 = (int)piVar11;
|
|
std::locale::~locale((locale *)(puVar8 + 2));
|
|
if (puVar8 != (undefined4 *)0x0) {
|
|
std::__node_alloc::_M_deallocate(puVar8,0xc);
|
|
}
|
|
} while ((piVar3 != piVar11) && (iVar5 = iVar1 + 1, piVar11[1] == *param_2));
|
|
}
|
|
goto LAB_0005582c;
|
|
}
|
|
if (piVar9 == *(int **)(param_1 + 4)) {
|
|
local_2c = 0;
|
|
piVar11 = (int *)(param_1 + 4);
|
|
}
|
|
else {
|
|
do {
|
|
piVar11 = *(int **)(iVar6 + -4);
|
|
iVar6 = iVar6 + -4;
|
|
} while (piVar9 == piVar11);
|
|
local_2c = (iVar6 - iVar10 >> 2) + 1;
|
|
piVar2 = (int *)*piVar11;
|
|
if (((piVar9 != piVar2) && (piVar12 = (int *)*piVar2, piVar11 = piVar2, piVar9 != piVar12)) &&
|
|
(piVar2 = (int *)*piVar12, piVar11 = piVar12, piVar9 != piVar2)) {
|
|
piVar11 = piVar2;
|
|
for (piVar12 = (int *)*piVar2; piVar9 != piVar12; piVar12 = (int *)*piVar12) {
|
|
piVar11 = (int *)*piVar11;
|
|
}
|
|
}
|
|
}
|
|
iVar6 = 1;
|
|
do {
|
|
iVar1 = iVar6;
|
|
puVar8 = (undefined4 *)*piVar11;
|
|
piVar9 = (int *)*puVar8;
|
|
*piVar11 = (int)piVar9;
|
|
std::locale::~locale((locale *)(puVar8 + 2));
|
|
if (puVar8 != (undefined4 *)0x0) {
|
|
std::__node_alloc::_M_deallocate(puVar8,0xc);
|
|
}
|
|
} while ((piVar3 != piVar9) && (iVar6 = iVar1 + 1, piVar9[1] == *param_2));
|
|
puVar8 = (undefined4 *)(*(int *)(param_1 + 8) + local_2c * 4);
|
|
uVar4 = (*(int *)(param_1 + 8) + iVar5 + 4) - (int)puVar8;
|
|
if (0 < (int)uVar4) {
|
|
iVar5 = (uVar4 >> 2) + 1;
|
|
do {
|
|
*puVar8 = piVar9;
|
|
puVar8 = puVar8 + 1;
|
|
iVar5 = iVar5 + -1;
|
|
} while (1 < iVar5);
|
|
}
|
|
LAB_0005582c:
|
|
*(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) - iVar1;
|
|
FUN_00055840();
|
|
}
|
|
return iVar1;
|
|
LAB_0005578c:
|
|
piVar11 = (int *)*piVar11;
|
|
piVar9 = (int *)*piVar9;
|
|
goto LAB_00055790;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00055840 @ 00055840
|
|
|
|
void FUN_00055840(int param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
char *pcVar8;
|
|
uint uVar9;
|
|
char *pcVar10;
|
|
|
|
uVar9 = (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) >> 2) - 1;
|
|
uVar1 = __floatunsisf(*(undefined4 *)(param_1 + 0x14));
|
|
uVar2 = __floatunsisf(uVar9);
|
|
uVar2 = __divsf3(uVar1,uVar2);
|
|
uVar3 = *(undefined4 *)(param_1 + 0x18);
|
|
uVar4 = __mulsf3(uVar3,0x3e800000);
|
|
iVar5 = __aeabi_fcmpgt(uVar2,uVar4);
|
|
if (iVar5 == 0) {
|
|
iVar5 = 0;
|
|
uVar7 = 0x1e;
|
|
while (uVar6 = uVar7, 0 < (int)uVar6) {
|
|
uVar7 = uVar6 >> 1;
|
|
if ((uint)(&DAT_0006537c)[uVar7 + iVar5] < uVar9) {
|
|
iVar5 = uVar7 + iVar5 + 1;
|
|
uVar7 = (uVar6 - 1) - uVar7;
|
|
}
|
|
}
|
|
pcVar8 = (char *)(&DAT_0006537c + iVar5);
|
|
if ((iVar5 * 4 == 0x78) || ((iVar5 != 0 && ((&DAT_0006537c)[iVar5] == uVar9)))) {
|
|
pcVar8 = "St7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE" + iVar5 * 4 + 0x38;
|
|
}
|
|
if (pcVar8 == "\a") {
|
|
if (uVar9 < 8) {
|
|
return;
|
|
}
|
|
pcVar8 = "\a";
|
|
}
|
|
else {
|
|
uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -4));
|
|
uVar2 = __divsf3(uVar1,uVar2);
|
|
iVar5 = __aeabi_fcmpgt(uVar2,uVar3);
|
|
if (iVar5 != 0) {
|
|
return;
|
|
}
|
|
if (pcVar8 != "\x17") {
|
|
do {
|
|
pcVar10 = pcVar8 + -4;
|
|
uVar2 = __floatunsisf(*(undefined4 *)(pcVar8 + -8));
|
|
uVar2 = __divsf3(uVar1,uVar2);
|
|
iVar5 = __aeabi_fcmpgt(uVar2,uVar3);
|
|
if (iVar5 != 0) break;
|
|
pcVar8 = pcVar10;
|
|
} while (pcVar10 != "\x17");
|
|
}
|
|
}
|
|
FUN_00055480(param_1,*(undefined4 *)pcVar8);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00055958 @ 00055958
|
|
|
|
void FUN_00055958(void)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
FUN_00030824(4);
|
|
uVar1 = FUN_000318b0();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar1,&PTR_PTR_FUN_00031728_1_00068e38,0x318c9);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00055980 @ 00055980
|
|
|
|
void FUN_00055980(void)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
FUN_00030824(4);
|
|
uVar1 = FUN_000318f4();
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_000309e0(uVar1,&PTR_PTR_FUN_00031728_1_00068e44,0x3190d);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __udivsi3 @ 000559a8
|
|
|
|
uint __udivsi3(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
bool bVar4;
|
|
|
|
if (param_2 - 1 == 0) {
|
|
return param_1;
|
|
}
|
|
if (param_2 == 0) {
|
|
if (param_1 != 0) {
|
|
param_1 = 0xffffffff;
|
|
}
|
|
uVar1 = __aeabi_ldiv0(param_1);
|
|
return uVar1;
|
|
}
|
|
if (param_1 <= param_2) {
|
|
return (uint)(param_1 == param_2);
|
|
}
|
|
if ((param_2 & param_2 - 1) == 0) {
|
|
return param_1 >> (0x1fU - LZCOUNT(param_2) & 0xff);
|
|
}
|
|
uVar2 = param_2 << (LZCOUNT(param_2) - LZCOUNT(param_1) & 0xffU);
|
|
uVar1 = 1 << (LZCOUNT(param_2) - LZCOUNT(param_1) & 0xffU);
|
|
uVar3 = 0;
|
|
while( true ) {
|
|
if (uVar2 <= param_1) {
|
|
param_1 = param_1 - uVar2;
|
|
uVar3 = uVar3 | uVar1;
|
|
}
|
|
if (uVar2 >> 1 <= param_1) {
|
|
param_1 = param_1 - (uVar2 >> 1);
|
|
uVar3 = uVar3 | uVar1 >> 1;
|
|
}
|
|
if (uVar2 >> 2 <= param_1) {
|
|
param_1 = param_1 - (uVar2 >> 2);
|
|
uVar3 = uVar3 | uVar1 >> 2;
|
|
}
|
|
if (uVar2 >> 3 <= param_1) {
|
|
param_1 = param_1 - (uVar2 >> 3);
|
|
uVar3 = uVar3 | uVar1 >> 3;
|
|
}
|
|
bVar4 = param_1 == 0;
|
|
if (!bVar4) {
|
|
uVar1 = uVar1 >> 4;
|
|
bVar4 = uVar1 == 0;
|
|
}
|
|
if (bVar4) break;
|
|
uVar2 = uVar2 >> 4;
|
|
}
|
|
return uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_uidivmod @ 00055a50
|
|
|
|
void __aeabi_uidivmod(int param_1,int param_2)
|
|
|
|
{
|
|
if (param_2 != 0) {
|
|
__udivsi3();
|
|
return;
|
|
}
|
|
if (param_1 != 0) {
|
|
param_1 = -1;
|
|
}
|
|
__aeabi_ldiv0(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __divsi3 @ 00055a70
|
|
|
|
uint __divsi3(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
bool bVar6;
|
|
|
|
if (param_2 == 0) {
|
|
bVar6 = (int)param_1 < 0;
|
|
if (0 < (int)param_1) {
|
|
param_1 = 0x7fffffff;
|
|
}
|
|
if (bVar6) {
|
|
param_1 = 0x80000000;
|
|
}
|
|
uVar1 = __aeabi_ldiv0(param_1);
|
|
return uVar1;
|
|
}
|
|
uVar5 = param_1 ^ param_2;
|
|
uVar1 = param_2;
|
|
if ((int)param_2 < 0) {
|
|
uVar1 = -param_2;
|
|
}
|
|
if (uVar1 - 1 == 0) {
|
|
if ((int)param_2 < 0) {
|
|
param_1 = -param_1;
|
|
}
|
|
return param_1;
|
|
}
|
|
uVar4 = param_1;
|
|
if ((int)param_1 < 0) {
|
|
uVar4 = -param_1;
|
|
}
|
|
if (uVar4 <= uVar1) {
|
|
if (uVar4 < uVar1) {
|
|
param_1 = 0;
|
|
}
|
|
if (uVar4 == uVar1) {
|
|
param_1 = (int)uVar5 >> 0x1f | 1;
|
|
}
|
|
return param_1;
|
|
}
|
|
if ((uVar1 & uVar1 - 1) == 0) {
|
|
uVar4 = uVar4 >> (0x1fU - LZCOUNT(uVar1) & 0xff);
|
|
if ((int)uVar5 < 0) {
|
|
uVar4 = -uVar4;
|
|
}
|
|
return uVar4;
|
|
}
|
|
uVar3 = uVar1 << (LZCOUNT(uVar1) - LZCOUNT(uVar4) & 0xffU);
|
|
uVar1 = 1 << (LZCOUNT(uVar1) - LZCOUNT(uVar4) & 0xffU);
|
|
uVar2 = 0;
|
|
while( true ) {
|
|
if (uVar3 <= uVar4) {
|
|
uVar4 = uVar4 - uVar3;
|
|
uVar2 = uVar2 | uVar1;
|
|
}
|
|
if (uVar3 >> 1 <= uVar4) {
|
|
uVar4 = uVar4 - (uVar3 >> 1);
|
|
uVar2 = uVar2 | uVar1 >> 1;
|
|
}
|
|
if (uVar3 >> 2 <= uVar4) {
|
|
uVar4 = uVar4 - (uVar3 >> 2);
|
|
uVar2 = uVar2 | uVar1 >> 2;
|
|
}
|
|
if (uVar3 >> 3 <= uVar4) {
|
|
uVar4 = uVar4 - (uVar3 >> 3);
|
|
uVar2 = uVar2 | uVar1 >> 3;
|
|
}
|
|
bVar6 = uVar4 == 0;
|
|
if (!bVar6) {
|
|
uVar1 = uVar1 >> 4;
|
|
bVar6 = uVar1 == 0;
|
|
}
|
|
if (bVar6) break;
|
|
uVar3 = uVar3 >> 4;
|
|
}
|
|
if ((int)uVar5 < 0) {
|
|
uVar2 = -uVar2;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00055a78 @ 00055a78
|
|
|
|
uint FUN_00055a78(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
bool in_NG;
|
|
bool bVar6;
|
|
|
|
uVar5 = param_1 ^ param_2;
|
|
uVar2 = param_2;
|
|
if (in_NG) {
|
|
uVar2 = -param_2;
|
|
}
|
|
if (uVar2 - 1 == 0) {
|
|
if ((int)param_2 < 0) {
|
|
param_1 = -param_1;
|
|
}
|
|
return param_1;
|
|
}
|
|
uVar4 = param_1;
|
|
if ((int)param_1 < 0) {
|
|
uVar4 = -param_1;
|
|
}
|
|
if (uVar4 <= uVar2) {
|
|
if (uVar4 < uVar2) {
|
|
param_1 = 0;
|
|
}
|
|
if (uVar4 == uVar2) {
|
|
param_1 = (int)uVar5 >> 0x1f | 1;
|
|
}
|
|
return param_1;
|
|
}
|
|
if ((uVar2 & uVar2 - 1) == 0) {
|
|
uVar4 = uVar4 >> (0x1fU - LZCOUNT(uVar2) & 0xff);
|
|
if ((int)uVar5 < 0) {
|
|
uVar4 = -uVar4;
|
|
}
|
|
return uVar4;
|
|
}
|
|
uVar3 = uVar2 << (LZCOUNT(uVar2) - LZCOUNT(uVar4) & 0xffU);
|
|
uVar2 = 1 << (LZCOUNT(uVar2) - LZCOUNT(uVar4) & 0xffU);
|
|
uVar1 = 0;
|
|
while( true ) {
|
|
if (uVar3 <= uVar4) {
|
|
uVar4 = uVar4 - uVar3;
|
|
uVar1 = uVar1 | uVar2;
|
|
}
|
|
if (uVar3 >> 1 <= uVar4) {
|
|
uVar4 = uVar4 - (uVar3 >> 1);
|
|
uVar1 = uVar1 | uVar2 >> 1;
|
|
}
|
|
if (uVar3 >> 2 <= uVar4) {
|
|
uVar4 = uVar4 - (uVar3 >> 2);
|
|
uVar1 = uVar1 | uVar2 >> 2;
|
|
}
|
|
if (uVar3 >> 3 <= uVar4) {
|
|
uVar4 = uVar4 - (uVar3 >> 3);
|
|
uVar1 = uVar1 | uVar2 >> 3;
|
|
}
|
|
bVar6 = uVar4 == 0;
|
|
if (!bVar6) {
|
|
uVar2 = uVar2 >> 4;
|
|
bVar6 = uVar2 == 0;
|
|
}
|
|
if (bVar6) break;
|
|
uVar3 = uVar3 >> 4;
|
|
}
|
|
if ((int)uVar5 < 0) {
|
|
uVar1 = -uVar1;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_idivmod @ 00055b4c
|
|
|
|
void __aeabi_idivmod(int param_1,int param_2)
|
|
|
|
{
|
|
bool bVar1;
|
|
|
|
if (param_2 != 0) {
|
|
FUN_00055a78();
|
|
return;
|
|
}
|
|
bVar1 = param_1 < 0;
|
|
if (0 < param_1) {
|
|
param_1 = 0x7fffffff;
|
|
}
|
|
if (bVar1) {
|
|
param_1 = -0x80000000;
|
|
}
|
|
__aeabi_ldiv0(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_drsub @ 00055b6c
|
|
|
|
void __aeabi_drsub(undefined4 param_1,uint param_2)
|
|
|
|
{
|
|
__adddf3(param_1,param_2 ^ 0x80000000);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __subdf3 @ 00055b74
|
|
|
|
ulonglong __subdf3(uint param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
byte bVar3;
|
|
byte bVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
int iVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
bool bVar14;
|
|
bool bVar15;
|
|
bool bVar16;
|
|
|
|
uVar8 = param_4 ^ 0x80000000;
|
|
uVar11 = param_2 << 1;
|
|
param_4 = param_4 << 1;
|
|
iVar10 = (int)uVar11 >> 0x15;
|
|
iVar1 = (int)param_4 >> 0x15;
|
|
if ((((uVar11 == param_4 && param_1 == param_3 || uVar11 == 0 && param_1 == 0) ||
|
|
param_4 == 0 && param_3 == 0) || iVar10 == -1) || iVar1 == -1) {
|
|
if (iVar10 == -1 || iVar1 == -1) {
|
|
uVar11 = uVar8;
|
|
uVar12 = param_3;
|
|
if (iVar10 == -1) {
|
|
uVar11 = param_2;
|
|
uVar12 = param_1;
|
|
}
|
|
if (iVar10 != -1 || iVar1 != -1) {
|
|
param_3 = uVar12;
|
|
uVar8 = uVar11;
|
|
}
|
|
bVar14 = (uVar11 & 0xfffff) == 0;
|
|
bVar15 = uVar12 == 0 && bVar14;
|
|
if (uVar12 == 0 && bVar14) {
|
|
bVar15 = param_3 == 0 && (uVar8 & 0xfffff) == 0;
|
|
}
|
|
if (bVar15) {
|
|
bVar15 = uVar11 == uVar8;
|
|
}
|
|
if (!bVar15) {
|
|
uVar11 = uVar11 | 0x80000;
|
|
}
|
|
return CONCAT44(uVar11,uVar12);
|
|
}
|
|
if (uVar11 != param_4 || param_1 != param_3) {
|
|
if (uVar11 == 0 && param_1 == 0) {
|
|
param_1 = param_3;
|
|
param_2 = uVar8;
|
|
}
|
|
return CONCAT44(param_2,param_1);
|
|
}
|
|
if (param_2 != uVar8) {
|
|
return 0;
|
|
}
|
|
if (uVar11 >> 0x15 == 0) {
|
|
bVar3 = (byte)(param_1 >> 0x1f);
|
|
uVar11 = param_2 * 2 + (uint)bVar3;
|
|
if (CARRY4(param_2,param_2) || CARRY4(param_2 * 2,(uint)bVar3)) {
|
|
uVar11 = uVar11 | 0x80000000;
|
|
}
|
|
return CONCAT44(uVar11,param_1 << 1);
|
|
}
|
|
if (uVar11 < 0xffc00000) {
|
|
return CONCAT44(param_2 + 0x100000,param_1);
|
|
}
|
|
param_2 = param_2 & 0x80000000;
|
|
LAB_00055de8:
|
|
return (ulonglong)(param_2 | 0x7ff00000) << 0x20;
|
|
}
|
|
uVar11 = uVar11 >> 0x15;
|
|
param_4 = param_4 >> 0x15;
|
|
uVar12 = param_4 - uVar11;
|
|
bVar14 = uVar12 != 0;
|
|
if (param_4 < uVar11) {
|
|
uVar12 = -uVar12;
|
|
}
|
|
uVar7 = param_1;
|
|
uVar9 = param_2;
|
|
if (bVar14 && uVar11 <= param_4) {
|
|
uVar11 = uVar11 + uVar12;
|
|
uVar7 = param_3;
|
|
uVar9 = uVar8;
|
|
param_3 = param_1;
|
|
uVar8 = param_2;
|
|
}
|
|
if (0x36 < uVar12) {
|
|
return CONCAT44(uVar9,uVar7);
|
|
}
|
|
uVar6 = uVar9 & 0xfffff | 0x100000;
|
|
if ((uVar9 & 0x80000000) != 0) {
|
|
bVar14 = uVar7 != 0;
|
|
uVar7 = -uVar7;
|
|
uVar6 = -(uVar6 + bVar14);
|
|
}
|
|
uVar9 = uVar8 & 0xfffff | 0x100000;
|
|
if ((uVar8 & 0x80000000) != 0) {
|
|
bVar14 = param_3 != 0;
|
|
param_3 = -param_3;
|
|
uVar9 = -(uVar9 + bVar14);
|
|
}
|
|
if (uVar11 == uVar12) {
|
|
uVar9 = uVar9 ^ 0x100000;
|
|
if (uVar11 == 0) {
|
|
uVar6 = uVar6 ^ 0x100000;
|
|
uVar11 = 1;
|
|
}
|
|
else {
|
|
uVar12 = uVar12 - 1;
|
|
}
|
|
}
|
|
uVar8 = -uVar12 + 0x20;
|
|
if ((int)uVar12 < 0x21) {
|
|
uVar13 = param_3 << (uVar8 & 0xff);
|
|
param_3 = param_3 >> (uVar12 & 0xff);
|
|
uVar5 = uVar7 + param_3;
|
|
uVar2 = uVar9 << (uVar8 & 0xff);
|
|
uVar8 = uVar5 + uVar2;
|
|
uVar12 = uVar6 + CARRY4(uVar7,param_3) + ((int)uVar9 >> (uVar12 & 0xff)) +
|
|
(uint)CARRY4(uVar5,uVar2);
|
|
}
|
|
else {
|
|
uVar13 = uVar9 << (-uVar12 + 0x40 & 0xff);
|
|
if (param_3 != 0) {
|
|
uVar13 = uVar13 | 2;
|
|
}
|
|
uVar12 = (int)uVar9 >> (uVar12 - 0x20 & 0xff);
|
|
uVar8 = uVar7 + uVar12;
|
|
uVar12 = uVar6 + ((int)uVar9 >> 0x1f) + (uint)CARRY4(uVar7,uVar12);
|
|
}
|
|
param_2 = uVar12 & 0x80000000;
|
|
uVar7 = uVar12;
|
|
if ((int)uVar12 < 0) {
|
|
bVar14 = uVar13 == 0;
|
|
uVar13 = -uVar13;
|
|
uVar7 = -uVar8;
|
|
uVar8 = -(uVar8 + !bVar14);
|
|
uVar7 = -(uVar12 + (bVar14 <= uVar7));
|
|
}
|
|
if (0xfffff < uVar7) {
|
|
uVar9 = uVar11 - 1;
|
|
if (0x1fffff < uVar7) {
|
|
bVar3 = (byte)uVar7;
|
|
uVar7 = uVar7 >> 1;
|
|
bVar4 = (byte)uVar8;
|
|
uVar8 = (uint)(bVar3 & 1) << 0x1f | uVar8 >> 1;
|
|
uVar13 = (uint)(bVar4 & 1) << 0x1f | uVar13 >> 1;
|
|
uVar9 = uVar11;
|
|
if (0xffbfffff < uVar11 * 0x200000) goto LAB_00055de8;
|
|
}
|
|
LAB_00055c90:
|
|
bVar14 = 0x7fffffff < uVar13;
|
|
if (uVar13 == 0x80000000) {
|
|
bVar14 = (bool)((byte)uVar8 & 1);
|
|
}
|
|
return CONCAT44(uVar7 + uVar9 * 0x100000 + (uint)CARRY4(uVar8,(uint)bVar14) | param_2,
|
|
uVar8 + bVar14);
|
|
}
|
|
bVar3 = (byte)(uVar13 >> 0x1f);
|
|
uVar13 = uVar13 << 1;
|
|
uVar9 = uVar8 * 2;
|
|
bVar14 = CARRY4(uVar8,uVar8);
|
|
uVar8 = uVar8 * 2 + (uint)bVar3;
|
|
uVar7 = uVar7 * 2 + (uint)(bVar14 || CARRY4(uVar9,(uint)bVar3));
|
|
uVar9 = uVar11 - 2;
|
|
if ((uVar7 & 0x100000) != 0) goto LAB_00055c90;
|
|
uVar11 = uVar8;
|
|
uVar6 = uVar7;
|
|
if (uVar7 == 0) {
|
|
uVar11 = 0;
|
|
uVar6 = uVar8;
|
|
}
|
|
iVar10 = LZCOUNT(uVar6);
|
|
if (uVar7 == 0) {
|
|
iVar10 = iVar10 + 0x20;
|
|
}
|
|
uVar7 = iVar10 - 0xb;
|
|
bVar16 = SBORROW4(uVar7,0x20);
|
|
uVar8 = iVar10 - 0x2b;
|
|
bVar14 = (int)uVar8 < 0;
|
|
bVar15 = uVar8 == 0;
|
|
if ((int)uVar7 < 0x20) {
|
|
bVar16 = SCARRY4(uVar8,0xc);
|
|
iVar10 = iVar10 + -0x1f;
|
|
bVar14 = iVar10 < 0;
|
|
bVar15 = iVar10 == 0;
|
|
uVar8 = uVar7;
|
|
if (!bVar15 && bVar14 == bVar16) {
|
|
uVar11 = uVar6 << (uVar7 & 0xff);
|
|
uVar6 = uVar6 >> (0xcU - iVar10 & 0xff);
|
|
goto LAB_00055d10;
|
|
}
|
|
}
|
|
if (bVar15 || bVar14 != bVar16) {
|
|
uVar13 = 0x20 - uVar8;
|
|
}
|
|
uVar6 = uVar6 << (uVar8 & 0xff);
|
|
if (bVar15 || bVar14 != bVar16) {
|
|
uVar6 = uVar6 | uVar11 >> (uVar13 & 0xff);
|
|
uVar11 = uVar11 << (uVar8 & 0xff);
|
|
}
|
|
LAB_00055d10:
|
|
if ((int)uVar7 <= (int)uVar9) {
|
|
return CONCAT44(uVar6 + (uVar9 - uVar7) * 0x100000 | param_2,uVar11);
|
|
}
|
|
uVar8 = ~(uVar9 - uVar7);
|
|
if ((int)uVar8 < 0x1f) {
|
|
iVar10 = uVar8 - 0x13;
|
|
if (iVar10 != 0 && iVar10 < 0 == SCARRY4(uVar8 - 0x1f,0xc)) {
|
|
return CONCAT44(uVar12,uVar11 >> (0x20 - (0xcU - iVar10) & 0xff) |
|
|
uVar6 << (0xcU - iVar10 & 0xff)) & 0x80000000ffffffff;
|
|
}
|
|
uVar8 = uVar8 + 1;
|
|
return CONCAT44(param_2 | uVar6 >> (uVar8 & 0xff),
|
|
uVar11 >> (uVar8 & 0xff) | uVar6 << (0x20 - uVar8 & 0xff));
|
|
}
|
|
return CONCAT44(uVar12,uVar6 >> (uVar8 - 0x1f & 0xff)) & 0x80000000ffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __adddf3 @ 00055b78
|
|
|
|
ulonglong __adddf3(uint param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
byte bVar3;
|
|
byte bVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
bool bVar14;
|
|
bool bVar15;
|
|
bool bVar16;
|
|
|
|
uVar9 = param_2 << 1;
|
|
uVar6 = param_4 << 1;
|
|
iVar8 = (int)uVar9 >> 0x15;
|
|
iVar1 = (int)uVar6 >> 0x15;
|
|
if ((((uVar9 == uVar6 && param_1 == param_3 || uVar9 == 0 && param_1 == 0) ||
|
|
uVar6 == 0 && param_3 == 0) || iVar8 == -1) || iVar1 == -1) {
|
|
if (iVar8 == -1 || iVar1 == -1) {
|
|
uVar9 = param_4;
|
|
uVar6 = param_3;
|
|
if (iVar8 == -1) {
|
|
uVar9 = param_2;
|
|
uVar6 = param_1;
|
|
}
|
|
if (iVar8 != -1 || iVar1 != -1) {
|
|
param_3 = uVar6;
|
|
param_4 = uVar9;
|
|
}
|
|
bVar14 = (uVar9 & 0xfffff) == 0;
|
|
bVar15 = uVar6 == 0 && bVar14;
|
|
if (uVar6 == 0 && bVar14) {
|
|
bVar15 = param_3 == 0 && (param_4 & 0xfffff) == 0;
|
|
}
|
|
if (bVar15) {
|
|
bVar15 = uVar9 == param_4;
|
|
}
|
|
if (!bVar15) {
|
|
uVar9 = uVar9 | 0x80000;
|
|
}
|
|
return CONCAT44(uVar9,uVar6);
|
|
}
|
|
if (uVar9 != uVar6 || param_1 != param_3) {
|
|
if (uVar9 == 0 && param_1 == 0) {
|
|
param_1 = param_3;
|
|
param_2 = param_4;
|
|
}
|
|
return CONCAT44(param_2,param_1);
|
|
}
|
|
if (param_2 != param_4) {
|
|
return 0;
|
|
}
|
|
if (uVar9 >> 0x15 == 0) {
|
|
bVar3 = (byte)(param_1 >> 0x1f);
|
|
uVar9 = param_2 * 2 + (uint)bVar3;
|
|
if (CARRY4(param_2,param_2) || CARRY4(param_2 * 2,(uint)bVar3)) {
|
|
uVar9 = uVar9 | 0x80000000;
|
|
}
|
|
return CONCAT44(uVar9,param_1 << 1);
|
|
}
|
|
if (uVar9 < 0xffc00000) {
|
|
return CONCAT44(param_2 + 0x100000,param_1);
|
|
}
|
|
param_2 = param_2 & 0x80000000;
|
|
LAB_00055de8:
|
|
return (ulonglong)(param_2 | 0x7ff00000) << 0x20;
|
|
}
|
|
uVar9 = uVar9 >> 0x15;
|
|
uVar6 = uVar6 >> 0x15;
|
|
uVar11 = uVar6 - uVar9;
|
|
bVar14 = uVar11 != 0;
|
|
if (uVar6 < uVar9) {
|
|
uVar11 = -uVar11;
|
|
}
|
|
uVar10 = param_1;
|
|
uVar7 = param_2;
|
|
if (bVar14 && uVar9 <= uVar6) {
|
|
uVar9 = uVar9 + uVar11;
|
|
uVar10 = param_3;
|
|
uVar7 = param_4;
|
|
param_3 = param_1;
|
|
param_4 = param_2;
|
|
}
|
|
if (0x36 < uVar11) {
|
|
return CONCAT44(uVar7,uVar10);
|
|
}
|
|
uVar6 = uVar7 & 0xfffff | 0x100000;
|
|
if ((uVar7 & 0x80000000) != 0) {
|
|
bVar14 = uVar10 != 0;
|
|
uVar10 = -uVar10;
|
|
uVar6 = -(uVar6 + bVar14);
|
|
}
|
|
uVar7 = param_4 & 0xfffff | 0x100000;
|
|
if ((param_4 & 0x80000000) != 0) {
|
|
bVar14 = param_3 != 0;
|
|
param_3 = -param_3;
|
|
uVar7 = -(uVar7 + bVar14);
|
|
}
|
|
if (uVar9 == uVar11) {
|
|
uVar7 = uVar7 ^ 0x100000;
|
|
if (uVar9 == 0) {
|
|
uVar6 = uVar6 ^ 0x100000;
|
|
uVar9 = 1;
|
|
}
|
|
else {
|
|
uVar11 = uVar11 - 1;
|
|
}
|
|
}
|
|
uVar13 = -uVar11 + 0x20;
|
|
if ((int)uVar11 < 0x21) {
|
|
uVar12 = param_3 << (uVar13 & 0xff);
|
|
param_3 = param_3 >> (uVar11 & 0xff);
|
|
uVar5 = uVar10 + param_3;
|
|
uVar2 = uVar7 << (uVar13 & 0xff);
|
|
uVar13 = uVar5 + uVar2;
|
|
uVar6 = uVar6 + CARRY4(uVar10,param_3) + ((int)uVar7 >> (uVar11 & 0xff)) +
|
|
(uint)CARRY4(uVar5,uVar2);
|
|
}
|
|
else {
|
|
uVar12 = uVar7 << (-uVar11 + 0x40 & 0xff);
|
|
if (param_3 != 0) {
|
|
uVar12 = uVar12 | 2;
|
|
}
|
|
uVar11 = (int)uVar7 >> (uVar11 - 0x20 & 0xff);
|
|
uVar13 = uVar10 + uVar11;
|
|
uVar6 = uVar6 + ((int)uVar7 >> 0x1f) + (uint)CARRY4(uVar10,uVar11);
|
|
}
|
|
param_2 = uVar6 & 0x80000000;
|
|
uVar11 = uVar6;
|
|
if ((int)uVar6 < 0) {
|
|
bVar14 = uVar12 == 0;
|
|
uVar12 = -uVar12;
|
|
uVar11 = -uVar13;
|
|
uVar13 = -(uVar13 + !bVar14);
|
|
uVar11 = -(uVar6 + (bVar14 <= uVar11));
|
|
}
|
|
if (0xfffff < uVar11) {
|
|
uVar10 = uVar9 - 1;
|
|
if (0x1fffff < uVar11) {
|
|
bVar3 = (byte)uVar11;
|
|
uVar11 = uVar11 >> 1;
|
|
bVar4 = (byte)uVar13;
|
|
uVar13 = (uint)(bVar3 & 1) << 0x1f | uVar13 >> 1;
|
|
uVar12 = (uint)(bVar4 & 1) << 0x1f | uVar12 >> 1;
|
|
uVar10 = uVar9;
|
|
if (0xffbfffff < uVar9 * 0x200000) goto LAB_00055de8;
|
|
}
|
|
LAB_00055c90:
|
|
bVar14 = 0x7fffffff < uVar12;
|
|
if (uVar12 == 0x80000000) {
|
|
bVar14 = (bool)((byte)uVar13 & 1);
|
|
}
|
|
return CONCAT44(uVar11 + uVar10 * 0x100000 + (uint)CARRY4(uVar13,(uint)bVar14) | param_2,
|
|
uVar13 + bVar14);
|
|
}
|
|
bVar3 = (byte)(uVar12 >> 0x1f);
|
|
uVar12 = uVar12 << 1;
|
|
uVar10 = uVar13 * 2;
|
|
bVar14 = CARRY4(uVar13,uVar13);
|
|
uVar13 = uVar13 * 2 + (uint)bVar3;
|
|
uVar11 = uVar11 * 2 + (uint)(bVar14 || CARRY4(uVar10,(uint)bVar3));
|
|
uVar10 = uVar9 - 2;
|
|
if ((uVar11 & 0x100000) != 0) goto LAB_00055c90;
|
|
uVar9 = uVar13;
|
|
uVar7 = uVar11;
|
|
if (uVar11 == 0) {
|
|
uVar9 = 0;
|
|
uVar7 = uVar13;
|
|
}
|
|
iVar8 = LZCOUNT(uVar7);
|
|
if (uVar11 == 0) {
|
|
iVar8 = iVar8 + 0x20;
|
|
}
|
|
uVar13 = iVar8 - 0xb;
|
|
bVar16 = SBORROW4(uVar13,0x20);
|
|
uVar11 = iVar8 - 0x2b;
|
|
bVar14 = (int)uVar11 < 0;
|
|
bVar15 = uVar11 == 0;
|
|
if ((int)uVar13 < 0x20) {
|
|
bVar16 = SCARRY4(uVar11,0xc);
|
|
iVar8 = iVar8 + -0x1f;
|
|
bVar14 = iVar8 < 0;
|
|
bVar15 = iVar8 == 0;
|
|
uVar11 = uVar13;
|
|
if (!bVar15 && bVar14 == bVar16) {
|
|
uVar9 = uVar7 << (uVar13 & 0xff);
|
|
uVar7 = uVar7 >> (0xcU - iVar8 & 0xff);
|
|
goto LAB_00055d10;
|
|
}
|
|
}
|
|
if (bVar15 || bVar14 != bVar16) {
|
|
uVar12 = 0x20 - uVar11;
|
|
}
|
|
uVar7 = uVar7 << (uVar11 & 0xff);
|
|
if (bVar15 || bVar14 != bVar16) {
|
|
uVar7 = uVar7 | uVar9 >> (uVar12 & 0xff);
|
|
uVar9 = uVar9 << (uVar11 & 0xff);
|
|
}
|
|
LAB_00055d10:
|
|
if ((int)uVar13 <= (int)uVar10) {
|
|
return CONCAT44(uVar7 + (uVar10 - uVar13) * 0x100000 | param_2,uVar9);
|
|
}
|
|
uVar11 = ~(uVar10 - uVar13);
|
|
if ((int)uVar11 < 0x1f) {
|
|
iVar8 = uVar11 - 0x13;
|
|
if (iVar8 != 0 && iVar8 < 0 == SCARRY4(uVar11 - 0x1f,0xc)) {
|
|
return CONCAT44(uVar6,uVar9 >> (0x20 - (0xcU - iVar8) & 0xff) | uVar7 << (0xcU - iVar8 & 0xff)
|
|
) & 0x80000000ffffffff;
|
|
}
|
|
uVar11 = uVar11 + 1;
|
|
return CONCAT44(param_2 | uVar7 >> (uVar11 & 0xff),
|
|
uVar9 >> (uVar11 & 0xff) | uVar7 << (0x20 - uVar11 & 0xff));
|
|
}
|
|
return CONCAT44(uVar6,uVar7 >> (uVar11 - 0x1f & 0xff)) & 0x80000000ffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __floatunsidf @ 00055e24
|
|
|
|
ulonglong __floatunsidf(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
uint in_r12;
|
|
bool bVar5;
|
|
bool bVar6;
|
|
bool bVar7;
|
|
|
|
if (param_1 == 0) {
|
|
return 0;
|
|
}
|
|
uVar1 = 0;
|
|
iVar3 = LZCOUNT(param_1);
|
|
uVar4 = iVar3 + 0x15;
|
|
bVar7 = SBORROW4(uVar4,0x20);
|
|
uVar2 = iVar3 - 0xb;
|
|
bVar5 = (int)uVar2 < 0;
|
|
bVar6 = uVar2 == 0;
|
|
if (uVar4 < 0x20) {
|
|
bVar7 = SCARRY4(uVar2,0xc);
|
|
bVar5 = false;
|
|
bVar6 = iVar3 + 1 == 0;
|
|
uVar2 = uVar4;
|
|
if (!bVar6 && !bVar7) {
|
|
uVar1 = param_1 << uVar4;
|
|
param_1 = param_1 >> (0xcU - (iVar3 + 1) & 0xff);
|
|
goto LAB_00055d10;
|
|
}
|
|
}
|
|
if (bVar6 || bVar5 != bVar7) {
|
|
in_r12 = 0x20 - uVar2;
|
|
}
|
|
param_1 = param_1 << (uVar2 & 0xff);
|
|
if (bVar6 || bVar5 != bVar7) {
|
|
param_1 = param_1 | 0U >> (in_r12 & 0xff);
|
|
uVar1 = 0 << (uVar2 & 0xff);
|
|
}
|
|
LAB_00055d10:
|
|
if (uVar4 < 0x433) {
|
|
return CONCAT44(param_1 + (0x432 - uVar4) * 0x100000,uVar1);
|
|
}
|
|
uVar2 = ~(0x432 - uVar4);
|
|
if (0x1e < (int)uVar2) {
|
|
return (ulonglong)(param_1 >> (uVar2 - 0x1f & 0xff));
|
|
}
|
|
iVar3 = uVar2 - 0x13;
|
|
if (iVar3 == 0 || iVar3 < 0 != SCARRY4(uVar2 - 0x1f,0xc)) {
|
|
uVar2 = uVar2 + 1;
|
|
return CONCAT44(param_1 >> (uVar2 & 0xff),
|
|
uVar1 >> (uVar2 & 0xff) | param_1 << (0x20 - uVar2 & 0xff));
|
|
}
|
|
return (ulonglong)(uVar1 >> (0x20 - (0xcU - iVar3) & 0xff) | param_1 << (0xcU - iVar3 & 0xff));
|
|
}
|
|
|
|
|
|
|
|
### FUNC __floatsidf @ 00055e48
|
|
|
|
ulonglong __floatsidf(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint in_r12;
|
|
bool bVar7;
|
|
bool bVar8;
|
|
bool bVar9;
|
|
|
|
if (param_1 == 0) {
|
|
return 0;
|
|
}
|
|
uVar6 = param_1 & 0x80000000;
|
|
uVar2 = param_1;
|
|
if ((int)uVar6 < 0) {
|
|
uVar2 = -param_1;
|
|
}
|
|
uVar1 = 0;
|
|
iVar4 = LZCOUNT(uVar2);
|
|
uVar5 = iVar4 + 0x15;
|
|
bVar9 = SBORROW4(uVar5,0x20);
|
|
uVar3 = iVar4 - 0xb;
|
|
bVar7 = (int)uVar3 < 0;
|
|
bVar8 = uVar3 == 0;
|
|
if (uVar5 < 0x20) {
|
|
bVar9 = SCARRY4(uVar3,0xc);
|
|
bVar7 = false;
|
|
bVar8 = iVar4 + 1 == 0;
|
|
uVar3 = uVar5;
|
|
if (!bVar8 && !bVar9) {
|
|
uVar1 = uVar2 << uVar5;
|
|
uVar2 = uVar2 >> (0xcU - (iVar4 + 1) & 0xff);
|
|
goto LAB_00055d10;
|
|
}
|
|
}
|
|
if (bVar8 || bVar7 != bVar9) {
|
|
in_r12 = 0x20 - uVar3;
|
|
}
|
|
uVar2 = uVar2 << (uVar3 & 0xff);
|
|
if (bVar8 || bVar7 != bVar9) {
|
|
uVar2 = uVar2 | 0U >> (in_r12 & 0xff);
|
|
uVar1 = 0 << (uVar3 & 0xff);
|
|
}
|
|
LAB_00055d10:
|
|
if (uVar5 < 0x433) {
|
|
return CONCAT44(uVar2 + (0x432 - uVar5) * 0x100000 | uVar6,uVar1);
|
|
}
|
|
uVar3 = ~(0x432 - uVar5);
|
|
if (0x1e < (int)uVar3) {
|
|
return CONCAT44(param_1,uVar2 >> (uVar3 - 0x1f & 0xff)) & 0x80000000ffffffff;
|
|
}
|
|
iVar4 = uVar3 - 0x13;
|
|
if (iVar4 == 0 || iVar4 < 0 != SCARRY4(uVar3 - 0x1f,0xc)) {
|
|
uVar3 = uVar3 + 1;
|
|
return CONCAT44(uVar6 | uVar2 >> (uVar3 & 0xff),
|
|
uVar1 >> (uVar3 & 0xff) | uVar2 << (0x20 - uVar3 & 0xff));
|
|
}
|
|
return CONCAT44(param_1,uVar1 >> (0x20 - (0xcU - iVar4) & 0xff) | uVar2 << (0xcU - iVar4 & 0xff))
|
|
& 0x80000000ffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_f2d @ 00055e70
|
|
|
|
ulonglong __aeabi_f2d(uint param_1,undefined4 param_2,undefined4 param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint in_r12;
|
|
bool bVar8;
|
|
bool bVar9;
|
|
bool bVar10;
|
|
|
|
uVar3 = param_1 << 1;
|
|
bVar9 = uVar3 == 0;
|
|
uVar1 = param_1 & 0x80000000;
|
|
uVar5 = (uint)((int)uVar3 >> 3) >> 1;
|
|
uVar2 = uVar1 | uVar5;
|
|
param_1 = param_1 << 0x1d;
|
|
if (!bVar9) {
|
|
param_4 = uVar3 & 0xff000000;
|
|
bVar9 = param_4 == 0;
|
|
}
|
|
if (!bVar9) {
|
|
bVar9 = param_4 == 0xff000000;
|
|
}
|
|
if (!bVar9) {
|
|
return CONCAT44(uVar2,param_1) ^ 0x3800000000000000;
|
|
}
|
|
if (uVar3 == 0 || param_4 == 0xff000000) {
|
|
return CONCAT44(uVar2,param_1);
|
|
}
|
|
uVar3 = param_1;
|
|
uVar4 = uVar5;
|
|
if (uVar5 == 0) {
|
|
uVar3 = 0;
|
|
uVar4 = param_1;
|
|
}
|
|
iVar6 = LZCOUNT(uVar4);
|
|
if (uVar5 == 0) {
|
|
iVar6 = iVar6 + 0x20;
|
|
}
|
|
uVar7 = iVar6 - 0xb;
|
|
bVar10 = SBORROW4(uVar7,0x20);
|
|
uVar5 = iVar6 - 0x2b;
|
|
bVar9 = (int)uVar5 < 0;
|
|
bVar8 = uVar5 == 0;
|
|
if ((int)uVar7 < 0x20) {
|
|
bVar10 = SCARRY4(uVar5,0xc);
|
|
iVar6 = iVar6 + -0x1f;
|
|
bVar9 = iVar6 < 0;
|
|
bVar8 = iVar6 == 0;
|
|
uVar5 = uVar7;
|
|
if (!bVar8 && bVar9 == bVar10) {
|
|
uVar3 = uVar4 << (uVar7 & 0xff);
|
|
uVar4 = uVar4 >> (0xcU - iVar6 & 0xff);
|
|
goto LAB_00055d10;
|
|
}
|
|
}
|
|
if (bVar8 || bVar9 != bVar10) {
|
|
in_r12 = 0x20 - uVar5;
|
|
}
|
|
uVar4 = uVar4 << (uVar5 & 0xff);
|
|
if (bVar8 || bVar9 != bVar10) {
|
|
uVar4 = uVar4 | uVar3 >> (in_r12 & 0xff);
|
|
uVar3 = uVar3 << (uVar5 & 0xff);
|
|
}
|
|
LAB_00055d10:
|
|
if ((int)uVar7 < 0x381) {
|
|
return CONCAT44(uVar4 + (0x380 - uVar7) * 0x100000 | uVar1,uVar3);
|
|
}
|
|
uVar5 = ~(0x380 - uVar7);
|
|
if ((int)uVar5 < 0x1f) {
|
|
iVar6 = uVar5 - 0x13;
|
|
if (iVar6 != 0 && iVar6 < 0 == SCARRY4(uVar5 - 0x1f,0xc)) {
|
|
return CONCAT44(uVar2,uVar3 >> (0x20 - (0xcU - iVar6) & 0xff) | uVar4 << (0xcU - iVar6 & 0xff)
|
|
) & 0x80000000ffffffff;
|
|
}
|
|
uVar5 = uVar5 + 1;
|
|
return CONCAT44(uVar1 | uVar4 >> (uVar5 & 0xff),
|
|
uVar3 >> (uVar5 & 0xff) | uVar4 << (0x20 - uVar5 & 0xff));
|
|
}
|
|
return CONCAT44(uVar2,uVar4 >> (uVar5 - 0x1f & 0xff)) & 0x80000000ffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_ul2d @ 00055eb0
|
|
|
|
ulonglong __aeabi_ul2d(uint param_1,uint param_2)
|
|
|
|
{
|
|
byte bVar1;
|
|
byte bVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
int iVar9;
|
|
bool bVar10;
|
|
bool bVar11;
|
|
bool bVar12;
|
|
|
|
if (param_1 == 0 && param_2 == 0) {
|
|
return CONCAT44(param_2,param_1);
|
|
}
|
|
iVar9 = 0x432;
|
|
uVar8 = param_2 >> 0x16;
|
|
if (uVar8 != 0) {
|
|
iVar9 = 3;
|
|
if (param_2 >> 0x19 != 0) {
|
|
iVar9 = 6;
|
|
}
|
|
if (param_2 >> 0x1c != 0) {
|
|
iVar9 = iVar9 + 3;
|
|
}
|
|
iVar9 = iVar9 - ((int)param_2 >> 0x1f);
|
|
uVar8 = param_1 << (0x20U - iVar9 & 0xff);
|
|
param_1 = param_1 >> iVar9 | param_2 << (0x20U - iVar9 & 0xff);
|
|
param_2 = param_2 >> iVar9;
|
|
iVar9 = iVar9 + 0x432;
|
|
}
|
|
if (0xfffff < param_2) {
|
|
if (0x1fffff < param_2) {
|
|
bVar1 = (byte)param_2;
|
|
param_2 = param_2 >> 1;
|
|
bVar2 = (byte)param_1;
|
|
param_1 = (uint)(bVar1 & 1) << 0x1f | param_1 >> 1;
|
|
uVar8 = (uint)(bVar2 & 1) << 0x1f | uVar8 >> 1;
|
|
iVar9 = iVar9 + 1;
|
|
if (0xffbfffff < (uint)(iVar9 * 0x200000)) {
|
|
return 0x7ff0000000000000;
|
|
}
|
|
}
|
|
LAB_00055c90:
|
|
bVar11 = 0x7fffffff < uVar8;
|
|
if (uVar8 == 0x80000000) {
|
|
bVar11 = (bool)((byte)param_1 & 1);
|
|
}
|
|
return CONCAT44(param_2 + iVar9 * 0x100000 + (uint)CARRY4(param_1,(uint)bVar11),param_1 + bVar11
|
|
);
|
|
}
|
|
bVar1 = (byte)(uVar8 >> 0x1f);
|
|
uVar8 = uVar8 << 1;
|
|
uVar3 = param_1 * 2;
|
|
bVar11 = CARRY4(param_1,param_1);
|
|
param_1 = param_1 * 2 + (uint)bVar1;
|
|
param_2 = param_2 * 2 + (uint)(bVar11 || CARRY4(uVar3,(uint)bVar1));
|
|
iVar9 = iVar9 + -1;
|
|
if ((param_2 & 0x100000) != 0) goto LAB_00055c90;
|
|
uVar3 = param_1;
|
|
uVar4 = param_2;
|
|
if (param_2 == 0) {
|
|
uVar3 = 0;
|
|
uVar4 = param_1;
|
|
}
|
|
iVar6 = LZCOUNT(uVar4);
|
|
if (param_2 == 0) {
|
|
iVar6 = iVar6 + 0x20;
|
|
}
|
|
uVar7 = iVar6 - 0xb;
|
|
bVar12 = SBORROW4(uVar7,0x20);
|
|
uVar5 = iVar6 - 0x2b;
|
|
bVar11 = (int)uVar5 < 0;
|
|
bVar10 = uVar5 == 0;
|
|
if ((int)uVar7 < 0x20) {
|
|
bVar12 = SCARRY4(uVar5,0xc);
|
|
iVar6 = iVar6 + -0x1f;
|
|
bVar11 = iVar6 < 0;
|
|
bVar10 = iVar6 == 0;
|
|
uVar5 = uVar7;
|
|
if (!bVar10 && bVar11 == bVar12) {
|
|
uVar3 = uVar4 << (uVar7 & 0xff);
|
|
uVar4 = uVar4 >> (0xcU - iVar6 & 0xff);
|
|
goto LAB_00055d10;
|
|
}
|
|
}
|
|
if (bVar10 || bVar11 != bVar12) {
|
|
uVar8 = 0x20 - uVar5;
|
|
}
|
|
uVar4 = uVar4 << (uVar5 & 0xff);
|
|
if (bVar10 || bVar11 != bVar12) {
|
|
uVar4 = uVar4 | uVar3 >> (uVar8 & 0xff);
|
|
uVar3 = uVar3 << (uVar5 & 0xff);
|
|
}
|
|
LAB_00055d10:
|
|
if ((int)uVar7 <= iVar9) {
|
|
return CONCAT44(uVar4 + (iVar9 - uVar7) * 0x100000,uVar3);
|
|
}
|
|
uVar8 = ~(iVar9 - uVar7);
|
|
if (0x1e < (int)uVar8) {
|
|
return (ulonglong)(uVar4 >> (uVar8 - 0x1f & 0xff));
|
|
}
|
|
iVar9 = uVar8 - 0x13;
|
|
if (iVar9 == 0 || iVar9 < 0 != SCARRY4(uVar8 - 0x1f,0xc)) {
|
|
uVar8 = uVar8 + 1;
|
|
return CONCAT44(uVar4 >> (uVar8 & 0xff),uVar3 >> (uVar8 & 0xff) | uVar4 << (0x20 - uVar8 & 0xff)
|
|
);
|
|
}
|
|
return (ulonglong)(uVar3 >> (0x20 - (0xcU - iVar9) & 0xff) | uVar4 << (0xcU - iVar9 & 0xff));
|
|
}
|
|
|
|
|
|
|
|
### FUNC __floatdidf @ 00055ec4
|
|
|
|
ulonglong __floatdidf(uint param_1,uint param_2)
|
|
|
|
{
|
|
byte bVar1;
|
|
byte bVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
bool bVar11;
|
|
bool bVar12;
|
|
bool bVar13;
|
|
|
|
if (param_1 == 0 && param_2 == 0) {
|
|
return CONCAT44(param_2,param_1);
|
|
}
|
|
uVar9 = param_2 & 0x80000000;
|
|
uVar4 = param_2;
|
|
if ((int)uVar9 < 0) {
|
|
bVar12 = param_1 != 0;
|
|
param_1 = -param_1;
|
|
uVar4 = -(param_2 + bVar12);
|
|
}
|
|
iVar8 = 0x432;
|
|
uVar10 = uVar4 >> 0x16;
|
|
if (uVar10 != 0) {
|
|
iVar8 = 3;
|
|
if (uVar4 >> 0x19 != 0) {
|
|
iVar8 = 6;
|
|
}
|
|
if (uVar4 >> 0x1c != 0) {
|
|
iVar8 = iVar8 + 3;
|
|
}
|
|
iVar8 = iVar8 - ((int)uVar4 >> 0x1f);
|
|
uVar10 = param_1 << (0x20U - iVar8 & 0xff);
|
|
param_1 = param_1 >> iVar8 | uVar4 << (0x20U - iVar8 & 0xff);
|
|
uVar4 = uVar4 >> iVar8;
|
|
iVar8 = iVar8 + 0x432;
|
|
}
|
|
if (0xfffff < uVar4) {
|
|
if (0x1fffff < uVar4) {
|
|
bVar1 = (byte)uVar4;
|
|
uVar4 = uVar4 >> 1;
|
|
bVar2 = (byte)param_1;
|
|
param_1 = (uint)(bVar1 & 1) << 0x1f | param_1 >> 1;
|
|
uVar10 = (uint)(bVar2 & 1) << 0x1f | uVar10 >> 1;
|
|
iVar8 = iVar8 + 1;
|
|
if (0xffbfffff < (uint)(iVar8 * 0x200000)) {
|
|
return (ulonglong)(uVar9 | 0x7ff00000) << 0x20;
|
|
}
|
|
}
|
|
LAB_00055c90:
|
|
bVar12 = 0x7fffffff < uVar10;
|
|
if (uVar10 == 0x80000000) {
|
|
bVar12 = (bool)((byte)param_1 & 1);
|
|
}
|
|
return CONCAT44(uVar4 + iVar8 * 0x100000 + (uint)CARRY4(param_1,(uint)bVar12) | uVar9,
|
|
param_1 + bVar12);
|
|
}
|
|
bVar1 = (byte)(uVar10 >> 0x1f);
|
|
uVar10 = uVar10 << 1;
|
|
uVar3 = param_1 * 2;
|
|
bVar12 = CARRY4(param_1,param_1);
|
|
param_1 = param_1 * 2 + (uint)bVar1;
|
|
uVar4 = uVar4 * 2 + (uint)(bVar12 || CARRY4(uVar3,(uint)bVar1));
|
|
iVar8 = iVar8 + -1;
|
|
if ((uVar4 & 0x100000) != 0) goto LAB_00055c90;
|
|
uVar3 = param_1;
|
|
uVar5 = uVar4;
|
|
if (uVar4 == 0) {
|
|
uVar3 = 0;
|
|
uVar5 = param_1;
|
|
}
|
|
iVar6 = LZCOUNT(uVar5);
|
|
if (uVar4 == 0) {
|
|
iVar6 = iVar6 + 0x20;
|
|
}
|
|
uVar7 = iVar6 - 0xb;
|
|
bVar13 = SBORROW4(uVar7,0x20);
|
|
uVar4 = iVar6 - 0x2b;
|
|
bVar12 = (int)uVar4 < 0;
|
|
bVar11 = uVar4 == 0;
|
|
if ((int)uVar7 < 0x20) {
|
|
bVar13 = SCARRY4(uVar4,0xc);
|
|
iVar6 = iVar6 + -0x1f;
|
|
bVar12 = iVar6 < 0;
|
|
bVar11 = iVar6 == 0;
|
|
uVar4 = uVar7;
|
|
if (!bVar11 && bVar12 == bVar13) {
|
|
uVar3 = uVar5 << (uVar7 & 0xff);
|
|
uVar5 = uVar5 >> (0xcU - iVar6 & 0xff);
|
|
goto LAB_00055d10;
|
|
}
|
|
}
|
|
if (bVar11 || bVar12 != bVar13) {
|
|
uVar10 = 0x20 - uVar4;
|
|
}
|
|
uVar5 = uVar5 << (uVar4 & 0xff);
|
|
if (bVar11 || bVar12 != bVar13) {
|
|
uVar5 = uVar5 | uVar3 >> (uVar10 & 0xff);
|
|
uVar3 = uVar3 << (uVar4 & 0xff);
|
|
}
|
|
LAB_00055d10:
|
|
if ((int)uVar7 <= iVar8) {
|
|
return CONCAT44(uVar5 + (iVar8 - uVar7) * 0x100000 | uVar9,uVar3);
|
|
}
|
|
uVar4 = ~(iVar8 - uVar7);
|
|
if (0x1e < (int)uVar4) {
|
|
return CONCAT44(param_2,uVar5 >> (uVar4 - 0x1f & 0xff)) & 0x80000000ffffffff;
|
|
}
|
|
iVar8 = uVar4 - 0x13;
|
|
if (iVar8 == 0 || iVar8 < 0 != SCARRY4(uVar4 - 0x1f,0xc)) {
|
|
uVar4 = uVar4 + 1;
|
|
return CONCAT44(uVar9 | uVar5 >> (uVar4 & 0xff),
|
|
uVar3 >> (uVar4 & 0xff) | uVar5 << (0x20 - uVar4 & 0xff));
|
|
}
|
|
return CONCAT44(param_2,uVar3 >> (0x20 - (0xcU - iVar8) & 0xff) | uVar5 << (0xcU - iVar8 & 0xff))
|
|
& 0x80000000ffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __muldf3 @ 00055f24
|
|
|
|
ulonglong __muldf3(undefined4 param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
longlong lVar1;
|
|
ulonglong uVar2;
|
|
byte bVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
uint unaff_r5;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
bool bVar11;
|
|
bool bVar12;
|
|
bool bVar13;
|
|
ulonglong uVar14;
|
|
|
|
uVar14 = CONCAT44(param_2,param_1);
|
|
uVar10 = 0x7ff;
|
|
uVar6 = param_2 >> 0x14 & 0x7ff;
|
|
bVar11 = uVar6 == 0;
|
|
if (!bVar11) {
|
|
unaff_r5 = param_4 >> 0x14 & 0x7ff;
|
|
bVar11 = unaff_r5 == 0;
|
|
}
|
|
if (!bVar11) {
|
|
bVar11 = uVar6 == 0x7ff;
|
|
}
|
|
if (!bVar11) {
|
|
bVar11 = unaff_r5 == 0x7ff;
|
|
}
|
|
if (bVar11) {
|
|
uVar14 = FUN_00056104();
|
|
}
|
|
uVar4 = (uint)(uVar14 >> 0x20);
|
|
iVar7 = uVar6 + unaff_r5;
|
|
uVar9 = uVar4 ^ param_4;
|
|
uVar4 = uVar4 & ~(uVar10 << 0x15);
|
|
param_4 = param_4 & ~(uVar10 << 0x15);
|
|
uVar6 = uVar4 | 0x100000;
|
|
uVar5 = param_4 | 0x100000;
|
|
if ((uint)uVar14 == 0 && (uVar4 & 0xfffff) == 0 || param_3 == 0 && (param_4 & 0xfffff) == 0) {
|
|
param_3 = (uint)uVar14 | param_3;
|
|
uVar5 = (uVar9 & 0x80000000 | uVar6) ^ uVar5;
|
|
uVar6 = uVar10 >> 1;
|
|
bVar13 = SBORROW4(iVar7,uVar6);
|
|
uVar8 = iVar7 - uVar6;
|
|
bVar11 = uVar8 == 0;
|
|
uVar4 = uVar8;
|
|
if (!bVar11 && (int)uVar6 <= iVar7) {
|
|
bVar13 = SBORROW4(uVar10,uVar8);
|
|
uVar4 = uVar10 - uVar8;
|
|
bVar11 = uVar10 == uVar8;
|
|
}
|
|
if (!bVar11 && (int)uVar4 < 0 == bVar13) {
|
|
return CONCAT44(uVar5 | uVar8 * 0x100000,param_3);
|
|
}
|
|
uVar5 = uVar5 | 0x100000;
|
|
uVar6 = 0;
|
|
bVar13 = SBORROW4(uVar8,1);
|
|
uVar8 = uVar8 - 1;
|
|
bVar11 = uVar8 == 0;
|
|
uVar10 = uVar8;
|
|
}
|
|
else {
|
|
uVar2 = (ulonglong)param_3 * (uVar14 & 0xffffffff);
|
|
uVar14 = (ulonglong)uVar5 * (uVar14 & 0xffffffff) +
|
|
(ulonglong)param_3 * (ulonglong)uVar6 + (uVar2 >> 0x20);
|
|
uVar4 = (uint)uVar14;
|
|
lVar1 = (ulonglong)uVar5 * (ulonglong)uVar6 + (uVar14 >> 0x20);
|
|
uVar6 = (uint)lVar1;
|
|
uVar10 = (uint)((ulonglong)lVar1 >> 0x20);
|
|
if ((int)uVar2 != 0) {
|
|
uVar4 = uVar4 | 1;
|
|
}
|
|
uVar8 = (iVar7 + -0xff) - ((uVar10 < 0x200) + 0x300);
|
|
if (uVar10 < 0x200) {
|
|
bVar3 = (byte)(uVar4 >> 0x1f);
|
|
uVar4 = uVar4 << 1;
|
|
lVar1 = CONCAT44(uVar10 * 2 + (uint)(CARRY4(uVar6,uVar6) || CARRY4(uVar6 * 2,(uint)bVar3)),
|
|
uVar6 * 2 + (uint)bVar3);
|
|
}
|
|
uVar5 = uVar9 & 0x80000000 | (int)((ulonglong)lVar1 >> 0x20) << 0xb | (uint)lVar1 >> 0x15;
|
|
param_3 = (uint)lVar1 << 0xb | uVar4 >> 0x15;
|
|
uVar6 = uVar4 * 0x800;
|
|
bVar12 = 0xfc < uVar8;
|
|
bVar13 = SBORROW4(uVar8,0xfd);
|
|
uVar9 = uVar8 - 0xfd;
|
|
bVar11 = uVar9 == 0;
|
|
uVar10 = uVar9;
|
|
if (bVar12 && !bVar11) {
|
|
bVar12 = 0x6ff < uVar9;
|
|
bVar13 = SBORROW4(uVar9,0x700);
|
|
uVar10 = uVar8 - 0x7fd;
|
|
bVar11 = uVar9 == 0x700;
|
|
}
|
|
if (!bVar12 || bVar11) {
|
|
bVar11 = 0x7fffffff < uVar6;
|
|
if (uVar6 == 0x80000000) {
|
|
bVar11 = (bool)((byte)(uVar4 >> 0x15) & 1);
|
|
}
|
|
return CONCAT44(uVar5 + uVar8 * 0x100000 + (uint)CARRY4(param_3,(uint)bVar11),param_3 + bVar11
|
|
);
|
|
}
|
|
}
|
|
if (!bVar11 && (int)uVar10 < 0 == bVar13) {
|
|
return (ulonglong)(uVar5 & 0x80000000 | 0x7ff00000) << 0x20;
|
|
}
|
|
if (uVar8 != 0xffffffca && (int)(uVar8 + 0x36) < 0 == SCARRY4(uVar8,0x36)) {
|
|
uVar10 = -uVar8;
|
|
uVar4 = uVar10 - 0x20;
|
|
if (0x1f < (int)uVar10) {
|
|
uVar9 = param_3 >> (uVar4 & 0xff) | uVar5 << (0x20 - uVar4 & 0xff);
|
|
uVar10 = (uVar5 >> (uVar4 & 0xff) & ~((uVar5 & 0x80000000) >> (uVar4 & 0xff))) -
|
|
((int)uVar9 >> 0x1f);
|
|
if ((uVar6 == 0 && param_3 << (0x20 - uVar4 & 0xff) == 0) && (uVar9 & 0x7fffffff) == 0) {
|
|
uVar10 = uVar10 & ~(uVar9 >> 0x1f);
|
|
}
|
|
return CONCAT44(uVar5,uVar10) & 0x80000000ffffffff;
|
|
}
|
|
iVar7 = uVar10 - 0x14;
|
|
if (iVar7 != 0 && iVar7 < 0 == SCARRY4(uVar4,0xc)) {
|
|
uVar4 = 0xc - iVar7;
|
|
uVar10 = param_3 << (uVar4 & 0xff);
|
|
uVar4 = param_3 >> (0x20 - uVar4 & 0xff) | uVar5 << (uVar4 & 0xff);
|
|
uVar9 = uVar4 + -((int)uVar10 >> 0x1f);
|
|
if (uVar6 == 0 && (uVar10 & 0x7fffffff) == 0) {
|
|
uVar9 = uVar9 & ~(uVar10 >> 0x1f);
|
|
}
|
|
return CONCAT44((uVar5 & 0x80000000) + (uint)CARRY4(uVar4,-((int)uVar10 >> 0x1f)),uVar9);
|
|
}
|
|
uVar4 = param_3 << (uVar8 + 0x20 & 0xff);
|
|
uVar9 = param_3 >> (uVar10 & 0xff) | uVar5 << (uVar8 + 0x20 & 0xff);
|
|
uVar8 = uVar9 + -((int)uVar4 >> 0x1f);
|
|
if (uVar6 == 0 && (uVar4 & 0x7fffffff) == 0) {
|
|
uVar8 = uVar8 & ~(uVar4 >> 0x1f);
|
|
}
|
|
return CONCAT44((uVar5 & 0x80000000) + ((uVar5 & 0x7fffffff) >> (uVar10 & 0xff)) +
|
|
(uint)CARRY4(uVar9,-((int)uVar4 >> 0x1f)),uVar8);
|
|
}
|
|
return (ulonglong)(uVar5 & 0x80000000) << 0x20;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00056104 @ 00056104
|
|
|
|
ulonglong FUN_00056104(int param_1,uint param_2,int param_3,uint param_4)
|
|
|
|
{
|
|
bool bVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
uint unaff_r4;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint in_r12;
|
|
|
|
uVar4 = in_r12 & param_4 >> 0x14;
|
|
if (unaff_r4 != in_r12 && uVar4 != in_r12) {
|
|
if (param_1 == 0 && (param_2 & 0x7fffffff) == 0 || param_3 == 0 && (param_4 & 0x7fffffff) == 0)
|
|
{
|
|
return (ulonglong)((param_2 ^ param_4) & 0x80000000) << 0x20;
|
|
}
|
|
if (unaff_r4 == 0) {
|
|
uVar5 = param_2 & 0x80000000;
|
|
do {
|
|
iVar2 = param_1 >> 0x1f;
|
|
param_1 = param_1 << 1;
|
|
param_2 = param_2 * 2 - iVar2;
|
|
} while ((param_2 & 0x100000) == 0);
|
|
param_2 = param_2 | uVar5;
|
|
if (uVar4 != 0) {
|
|
return CONCAT44(param_2,param_1);
|
|
}
|
|
}
|
|
do {
|
|
iVar2 = param_3 >> 0x1f;
|
|
param_3 = param_3 << 1;
|
|
param_4 = param_4 * 2 - iVar2;
|
|
} while ((param_4 & 0x100000) == 0);
|
|
return CONCAT44(param_2,param_1);
|
|
}
|
|
bVar1 = (param_2 & 0x7fffffff) != 0;
|
|
iVar2 = param_3;
|
|
uVar5 = param_4;
|
|
if (param_1 != 0 || bVar1) {
|
|
iVar2 = param_1;
|
|
uVar5 = param_2;
|
|
}
|
|
uVar3 = uVar5;
|
|
if ((((param_1 != 0 || bVar1) && (param_3 != 0 || (param_4 & 0x7fffffff) != 0)) &&
|
|
((unaff_r4 != in_r12 || (iVar2 == 0 && (uVar5 & 0xfffff) == 0)))) &&
|
|
((uVar4 != in_r12 ||
|
|
(iVar2 = param_3, uVar3 = param_4, param_3 == 0 && (param_4 & 0xfffff) == 0)))) {
|
|
return (ulonglong)((uVar5 ^ param_4) & 0x80000000 | 0x7ff00000) << 0x20;
|
|
}
|
|
return CONCAT44(uVar3,iVar2) | 0x7ff8000000000000;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __divdf3 @ 00056190
|
|
|
|
ulonglong __divdf3(undefined4 param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
uint unaff_r5;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
bool bVar13;
|
|
bool bVar14;
|
|
bool bVar15;
|
|
undefined8 uVar16;
|
|
|
|
uVar16 = CONCAT44(param_2,param_1);
|
|
uVar11 = 0x7ff;
|
|
uVar6 = param_2 >> 0x14 & 0x7ff;
|
|
bVar13 = uVar6 == 0;
|
|
if (!bVar13) {
|
|
unaff_r5 = param_4 >> 0x14 & 0x7ff;
|
|
bVar13 = unaff_r5 == 0;
|
|
}
|
|
if (!bVar13) {
|
|
bVar13 = uVar6 == 0x7ff;
|
|
}
|
|
if (!bVar13) {
|
|
bVar13 = unaff_r5 == 0x7ff;
|
|
}
|
|
if (bVar13) {
|
|
uVar16 = FUN_00056324();
|
|
}
|
|
uVar8 = (uint)((ulonglong)uVar16 >> 0x20);
|
|
uVar2 = (uint)uVar16;
|
|
iVar7 = uVar6 - unaff_r5;
|
|
if (param_3 == 0 && (param_4 & 0xfffff) == 0) {
|
|
uVar6 = (uVar8 ^ param_4) & 0x80000000 | uVar8 & 0xfffff;
|
|
bVar14 = SCARRY4(iVar7,uVar11 >> 1);
|
|
uVar8 = iVar7 + (uVar11 >> 1);
|
|
bVar13 = (int)uVar8 < 0;
|
|
bVar15 = uVar8 == 0;
|
|
if (!bVar15 && bVar13 == bVar14) {
|
|
bVar14 = SBORROW4(uVar11,uVar8);
|
|
bVar13 = (int)(uVar11 - uVar8) < 0;
|
|
bVar15 = uVar11 == uVar8;
|
|
}
|
|
if (!bVar15 && bVar13 == bVar14) {
|
|
return CONCAT44(uVar6 | uVar8 * 0x100000,uVar2);
|
|
}
|
|
uVar6 = uVar6 | 0x100000;
|
|
uVar4 = 0;
|
|
bVar15 = SBORROW4(uVar8,1);
|
|
uVar8 = uVar8 - 1;
|
|
bVar13 = uVar8 == 0;
|
|
uVar11 = uVar8;
|
|
}
|
|
else {
|
|
uVar4 = (param_4 << 0xc) >> 4 | 0x10000000 | param_3 >> 0x18;
|
|
uVar11 = param_3 << 8;
|
|
uVar9 = (uVar8 << 0xc) >> 4 | 0x10000000 | uVar2 >> 0x18;
|
|
uVar2 = uVar2 * 0x100;
|
|
uVar6 = (uVar8 ^ param_4) & 0x80000000;
|
|
bVar13 = uVar4 <= uVar9;
|
|
if (uVar9 == uVar4) {
|
|
bVar13 = uVar11 <= uVar2;
|
|
}
|
|
iVar7 = iVar7 + (uint)bVar13;
|
|
uVar8 = iVar7 + 0x3fd;
|
|
if (!bVar13) {
|
|
uVar4 = uVar4 >> 1;
|
|
uVar11 = (uint)((byte)(param_3 >> 0x18) & 1) << 0x1f | uVar11 >> 1;
|
|
}
|
|
uVar10 = uVar2 - uVar11;
|
|
uVar9 = uVar9 - (uVar4 + (uVar2 < uVar11));
|
|
uVar5 = uVar4 >> 1;
|
|
uVar3 = (uint)((byte)uVar4 & 1) << 0x1f | uVar11 >> 1;
|
|
uVar2 = 0x100000;
|
|
uVar11 = 0x80000;
|
|
while( true ) {
|
|
bVar13 = uVar3 <= uVar10;
|
|
if (uVar5 < uVar9 || uVar9 - uVar5 < (uint)bVar13) {
|
|
uVar10 = uVar10 - uVar3;
|
|
uVar2 = uVar2 | uVar11;
|
|
uVar9 = uVar9 - (uVar5 + !bVar13);
|
|
}
|
|
uVar4 = uVar5 >> 1;
|
|
uVar3 = (uint)((byte)uVar5 & 1) << 0x1f | uVar3 >> 1;
|
|
bVar13 = uVar3 <= uVar10;
|
|
if (uVar4 < uVar9 || uVar9 - uVar4 < (uint)bVar13) {
|
|
uVar10 = uVar10 - uVar3;
|
|
uVar2 = uVar2 | uVar11 >> 1;
|
|
uVar9 = uVar9 - (uVar4 + !bVar13);
|
|
}
|
|
uVar12 = uVar5 >> 2;
|
|
uVar1 = (uint)((byte)uVar4 & 1) << 0x1f | uVar3 >> 1;
|
|
bVar13 = uVar1 <= uVar10;
|
|
if (uVar12 < uVar9 || uVar9 - uVar12 < (uint)bVar13) {
|
|
uVar10 = uVar10 - uVar1;
|
|
uVar2 = uVar2 | uVar11 >> 2;
|
|
uVar9 = uVar9 - (uVar12 + !bVar13);
|
|
}
|
|
uVar5 = uVar5 >> 3;
|
|
uVar3 = (uint)((byte)uVar12 & 1) << 0x1f | uVar1 >> 1;
|
|
bVar13 = uVar3 <= uVar10;
|
|
if (uVar5 < uVar9 || uVar9 - uVar5 < (uint)bVar13) {
|
|
uVar10 = uVar10 - uVar3;
|
|
uVar2 = uVar2 | uVar11 >> 3;
|
|
uVar9 = uVar9 - (uVar5 + !bVar13);
|
|
}
|
|
uVar4 = uVar9 | uVar10;
|
|
if (uVar4 == 0) break;
|
|
uVar9 = uVar9 << 4 | uVar10 >> 0x1c;
|
|
uVar10 = uVar10 << 4;
|
|
uVar5 = uVar5 << 3 | uVar3 >> 0x1d;
|
|
uVar3 = (uVar1 >> 1) << 3;
|
|
uVar11 = uVar11 >> 4;
|
|
if (uVar11 == 0) {
|
|
if ((uVar6 & 0x100000) != 0) goto LAB_000562d0;
|
|
uVar6 = uVar6 | uVar2;
|
|
uVar2 = 0;
|
|
uVar11 = 0x80000000;
|
|
}
|
|
}
|
|
if ((uVar6 & 0x100000) == 0) {
|
|
uVar6 = uVar6 | uVar2;
|
|
uVar2 = 0;
|
|
}
|
|
LAB_000562d0:
|
|
bVar14 = 0xfc < uVar8;
|
|
bVar15 = SBORROW4(uVar8,0xfd);
|
|
uVar12 = iVar7 + 0x300;
|
|
bVar13 = uVar12 == 0;
|
|
uVar11 = uVar12;
|
|
if (bVar14 && !bVar13) {
|
|
bVar14 = 0x6ff < uVar12;
|
|
bVar15 = SBORROW4(uVar12,0x700);
|
|
uVar11 = iVar7 - 0x400;
|
|
bVar13 = uVar12 == 0x700;
|
|
}
|
|
if (!bVar14 || bVar13) {
|
|
bVar13 = uVar5 <= uVar9;
|
|
if (uVar9 == uVar5) {
|
|
bVar13 = uVar3 <= uVar10;
|
|
}
|
|
if (uVar9 == uVar5 && uVar10 == uVar3) {
|
|
bVar13 = (bool)((byte)uVar2 & 1);
|
|
}
|
|
return CONCAT44(uVar6 + uVar8 * 0x100000 + (uint)CARRY4(uVar2,(uint)bVar13),uVar2 + bVar13);
|
|
}
|
|
}
|
|
if (!bVar13 && (int)uVar11 < 0 == bVar15) {
|
|
return (ulonglong)(uVar6 & 0x80000000 | 0x7ff00000) << 0x20;
|
|
}
|
|
if (uVar8 == 0xffffffca || (int)(uVar8 + 0x36) < 0 != SCARRY4(uVar8,0x36)) {
|
|
return (ulonglong)(uVar6 & 0x80000000) << 0x20;
|
|
}
|
|
uVar11 = -uVar8;
|
|
uVar9 = uVar11 - 0x20;
|
|
if (0x1f < (int)uVar11) {
|
|
uVar8 = uVar2 >> (uVar9 & 0xff) | uVar6 << (0x20 - uVar9 & 0xff);
|
|
uVar11 = (uVar6 >> (uVar9 & 0xff) & ~((uVar6 & 0x80000000) >> (uVar9 & 0xff))) -
|
|
((int)uVar8 >> 0x1f);
|
|
if ((uVar4 == 0 && uVar2 << (0x20 - uVar9 & 0xff) == 0) && (uVar8 & 0x7fffffff) == 0) {
|
|
uVar11 = uVar11 & ~(uVar8 >> 0x1f);
|
|
}
|
|
return CONCAT44(uVar6,uVar11) & 0x80000000ffffffff;
|
|
}
|
|
iVar7 = uVar11 - 0x14;
|
|
if (iVar7 != 0 && iVar7 < 0 == SCARRY4(uVar9,0xc)) {
|
|
uVar8 = 0xc - iVar7;
|
|
uVar11 = uVar2 << (uVar8 & 0xff);
|
|
uVar2 = uVar2 >> (0x20 - uVar8 & 0xff) | uVar6 << (uVar8 & 0xff);
|
|
uVar8 = uVar2 + -((int)uVar11 >> 0x1f);
|
|
if (uVar4 == 0 && (uVar11 & 0x7fffffff) == 0) {
|
|
uVar8 = uVar8 & ~(uVar11 >> 0x1f);
|
|
}
|
|
return CONCAT44((uVar6 & 0x80000000) + (uint)CARRY4(uVar2,-((int)uVar11 >> 0x1f)),uVar8);
|
|
}
|
|
uVar9 = uVar2 << (uVar8 + 0x20 & 0xff);
|
|
uVar2 = uVar2 >> (uVar11 & 0xff) | uVar6 << (uVar8 + 0x20 & 0xff);
|
|
uVar8 = uVar2 + -((int)uVar9 >> 0x1f);
|
|
if (uVar4 == 0 && (uVar9 & 0x7fffffff) == 0) {
|
|
uVar8 = uVar8 & ~(uVar9 >> 0x1f);
|
|
}
|
|
return CONCAT44((uVar6 & 0x80000000) + ((uVar6 & 0x7fffffff) >> (uVar11 & 0xff)) +
|
|
(uint)CARRY4(uVar2,-((int)uVar9 >> 0x1f)),uVar8);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00056324 @ 00056324
|
|
|
|
ulonglong FUN_00056324(int param_1,uint param_2,int param_3,uint param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
uint unaff_r4;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint in_r12;
|
|
|
|
uVar2 = in_r12 & param_4 >> 0x14;
|
|
uVar3 = param_2;
|
|
if (unaff_r4 != in_r12 || uVar2 != in_r12) {
|
|
if (unaff_r4 == in_r12) {
|
|
if ((param_1 == 0 && (param_2 & 0xfffff) == 0) &&
|
|
(param_1 = param_3, uVar3 = param_4, uVar2 != in_r12)) {
|
|
LAB_0005616c:
|
|
return (ulonglong)((param_2 ^ param_4) & 0x80000000 | 0x7ff00000) << 0x20;
|
|
}
|
|
}
|
|
else if (uVar2 == in_r12) {
|
|
param_1 = param_3;
|
|
uVar3 = param_4;
|
|
if (param_3 == 0 && (param_4 & 0xfffff) == 0) {
|
|
LAB_00056120:
|
|
return (ulonglong)((param_2 ^ param_4) & 0x80000000) << 0x20;
|
|
}
|
|
}
|
|
else {
|
|
if ((param_1 != 0 || (param_2 & 0x7fffffff) != 0) &&
|
|
(param_3 != 0 || (param_4 & 0x7fffffff) != 0)) {
|
|
if (unaff_r4 == 0) {
|
|
uVar3 = param_2 & 0x80000000;
|
|
do {
|
|
iVar1 = param_1 >> 0x1f;
|
|
param_1 = param_1 << 1;
|
|
param_2 = param_2 * 2 - iVar1;
|
|
} while ((param_2 & 0x100000) == 0);
|
|
param_2 = param_2 | uVar3;
|
|
if (uVar2 != 0) {
|
|
return CONCAT44(param_2,param_1);
|
|
}
|
|
}
|
|
do {
|
|
iVar1 = param_3 >> 0x1f;
|
|
param_3 = param_3 << 1;
|
|
param_4 = param_4 * 2 - iVar1;
|
|
} while ((param_4 & 0x100000) == 0);
|
|
return CONCAT44(param_2,param_1);
|
|
}
|
|
if (param_1 != 0 || (param_2 & 0x7fffffff) != 0) goto LAB_0005616c;
|
|
if (param_3 != 0 || (param_4 & 0x7fffffff) != 0) goto LAB_00056120;
|
|
}
|
|
}
|
|
return CONCAT44(uVar3,param_1) | 0x7ff8000000000000;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gedf2 @ 00056394
|
|
|
|
uint __gedf2(uint param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
bool bVar2;
|
|
bool bVar3;
|
|
|
|
if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) &&
|
|
((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) ||
|
|
(((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) {
|
|
return 0xffffffff;
|
|
}
|
|
bVar3 = (param_2 & 0x7fffffff) == 0;
|
|
bVar2 = param_1 == 0 && bVar3;
|
|
if (param_1 == 0 && bVar3) {
|
|
bVar2 = param_3 == 0 && (param_4 & 0x7fffffff) == 0;
|
|
}
|
|
if (!bVar2) {
|
|
bVar2 = param_2 == param_4;
|
|
}
|
|
if (bVar2) {
|
|
bVar2 = param_1 == param_3;
|
|
}
|
|
if (!bVar2) {
|
|
uVar1 = param_2 ^ param_4;
|
|
bVar3 = uVar1 == 0;
|
|
if (-1 < (int)uVar1) {
|
|
bVar3 = param_2 == param_4;
|
|
}
|
|
bVar2 = -1 < (int)uVar1 && param_4 <= param_2;
|
|
if (bVar3) {
|
|
bVar2 = param_3 <= param_1;
|
|
}
|
|
param_4 = (int)param_4 >> 0x1f;
|
|
if (!bVar2) {
|
|
param_4 = ~param_4;
|
|
}
|
|
return param_4 | 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __ledf2 @ 0005639c
|
|
|
|
uint __ledf2(uint param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
bool bVar2;
|
|
bool bVar3;
|
|
|
|
if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) &&
|
|
((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) ||
|
|
(((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) {
|
|
return 1;
|
|
}
|
|
bVar3 = (param_2 & 0x7fffffff) == 0;
|
|
bVar2 = param_1 == 0 && bVar3;
|
|
if (param_1 == 0 && bVar3) {
|
|
bVar2 = param_3 == 0 && (param_4 & 0x7fffffff) == 0;
|
|
}
|
|
if (!bVar2) {
|
|
bVar2 = param_2 == param_4;
|
|
}
|
|
if (bVar2) {
|
|
bVar2 = param_1 == param_3;
|
|
}
|
|
if (!bVar2) {
|
|
uVar1 = param_2 ^ param_4;
|
|
bVar3 = uVar1 == 0;
|
|
if (-1 < (int)uVar1) {
|
|
bVar3 = param_2 == param_4;
|
|
}
|
|
bVar2 = -1 < (int)uVar1 && param_4 <= param_2;
|
|
if (bVar3) {
|
|
bVar2 = param_3 <= param_1;
|
|
}
|
|
param_4 = (int)param_4 >> 0x1f;
|
|
if (!bVar2) {
|
|
param_4 = ~param_4;
|
|
}
|
|
return param_4 | 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __eqdf2 @ 000563a4
|
|
|
|
uint __eqdf2(uint param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
bool bVar2;
|
|
bool bVar3;
|
|
|
|
if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) &&
|
|
((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) ||
|
|
(((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) {
|
|
return 1;
|
|
}
|
|
bVar3 = (param_2 & 0x7fffffff) == 0;
|
|
bVar2 = param_1 == 0 && bVar3;
|
|
if (param_1 == 0 && bVar3) {
|
|
bVar2 = param_3 == 0 && (param_4 & 0x7fffffff) == 0;
|
|
}
|
|
if (!bVar2) {
|
|
bVar2 = param_2 == param_4;
|
|
}
|
|
if (bVar2) {
|
|
bVar2 = param_1 == param_3;
|
|
}
|
|
if (!bVar2) {
|
|
uVar1 = param_2 ^ param_4;
|
|
bVar3 = uVar1 == 0;
|
|
if (-1 < (int)uVar1) {
|
|
bVar3 = param_2 == param_4;
|
|
}
|
|
bVar2 = -1 < (int)uVar1 && param_4 <= param_2;
|
|
if (bVar3) {
|
|
bVar2 = param_3 <= param_1;
|
|
}
|
|
param_4 = (int)param_4 >> 0x1f;
|
|
if (!bVar2) {
|
|
param_4 = ~param_4;
|
|
}
|
|
return param_4 | 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_cdrcmple @ 0005642c
|
|
|
|
void __aeabi_cdrcmple(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
__aeabi_cdcmple(param_3,param_4,param_1,param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_cdcmple @ 00056448
|
|
|
|
undefined4 __aeabi_cdcmple(undefined4 param_1)
|
|
|
|
{
|
|
__eqdf2();
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_dcmpeq @ 0005645c
|
|
|
|
undefined1 __aeabi_dcmpeq(void)
|
|
|
|
{
|
|
undefined1 in_ZR;
|
|
|
|
__aeabi_cdcmple();
|
|
return in_ZR;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_dcmplt @ 00056470
|
|
|
|
bool __aeabi_dcmplt(void)
|
|
|
|
{
|
|
undefined1 in_CY;
|
|
|
|
__aeabi_cdcmple();
|
|
return !(bool)in_CY;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_dcmple @ 00056484
|
|
|
|
bool __aeabi_dcmple(void)
|
|
|
|
{
|
|
undefined1 in_ZR;
|
|
undefined1 in_CY;
|
|
|
|
__aeabi_cdcmple();
|
|
return !(bool)in_CY || (bool)in_ZR;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_dcmpge @ 00056498
|
|
|
|
bool __aeabi_dcmpge(void)
|
|
|
|
{
|
|
undefined1 in_ZR;
|
|
undefined1 in_CY;
|
|
|
|
__aeabi_cdrcmple();
|
|
return !(bool)in_CY || (bool)in_ZR;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_dcmpgt @ 000564ac
|
|
|
|
bool __aeabi_dcmpgt(void)
|
|
|
|
{
|
|
undefined1 in_CY;
|
|
|
|
__aeabi_cdrcmple();
|
|
return !(bool)in_CY;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __fixdfsi @ 000564c0
|
|
|
|
uint __fixdfsi(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
|
|
iVar2 = param_2 * 2 + 0x200000;
|
|
if (param_2 * 2 < 0xffe00000) {
|
|
if (-1 < iVar2) {
|
|
return 0;
|
|
}
|
|
uVar1 = iVar2 >> 0x15;
|
|
uVar3 = -uVar1 - 0x3e1;
|
|
if (uVar1 < 0xfffffc20 && uVar3 != 0) {
|
|
uVar1 = (param_2 << 0xb | 0x80000000 | param_1 >> 0x15) >> (uVar3 & 0xff);
|
|
if ((param_2 & 0x80000000) != 0) {
|
|
uVar1 = -uVar1;
|
|
}
|
|
return uVar1;
|
|
}
|
|
}
|
|
else if (param_1 != 0 || (param_2 & 0xfffff) != 0) {
|
|
return 0;
|
|
}
|
|
param_2 = param_2 & 0x80000000;
|
|
if (param_2 == 0) {
|
|
param_2 = 0x7fffffff;
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __fixunsdfsi @ 0005651c
|
|
|
|
uint __fixunsdfsi(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
if (SUB41(param_2 >> 0x1f,0)) {
|
|
return 0;
|
|
}
|
|
iVar1 = param_2 * 2 + 0x200000;
|
|
if (param_2 * 2 < 0xffe00000) {
|
|
if (-1 < iVar1) {
|
|
return 0;
|
|
}
|
|
uVar2 = -(iVar1 >> 0x15) - 0x3e1;
|
|
if (-1 < (int)uVar2) {
|
|
return (param_2 << 0xb | 0x80000000 | param_1 >> 0x15) >> (uVar2 & 0xff);
|
|
}
|
|
}
|
|
else if (param_1 != 0 || (param_2 & 0xfffff) != 0) {
|
|
return 0;
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __truncdfsf2 @ 00056570
|
|
|
|
uint __truncdfsf2(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint in_r12;
|
|
bool bVar4;
|
|
bool bVar5;
|
|
|
|
uVar2 = param_2 * 2;
|
|
bVar5 = uVar2 < 0x70000000;
|
|
uVar3 = uVar2 + 0x90000000;
|
|
uVar1 = uVar3;
|
|
if (!bVar5) {
|
|
in_r12 = uVar2 + 0x8fe00000;
|
|
uVar1 = in_r12;
|
|
}
|
|
bVar4 = uVar1 == 0;
|
|
if (!bVar5 && uVar3 >= 0x200000) {
|
|
bVar4 = in_r12 == 0x1fc00000;
|
|
}
|
|
if (((bVar5 || uVar3 < 0x200000) || 0x1fc00000 < in_r12) || bVar4) {
|
|
if ((param_2 & 0x40000000) != 0) {
|
|
if (((int)uVar2 >> 0x15 == -1) && (param_1 != 0 || (param_2 & 0xfffff) != 0)) {
|
|
return 0x7fc00000;
|
|
}
|
|
return param_2 & 0x80000000 | 0x7f800000;
|
|
}
|
|
if ((int)(uVar2 + 0x92e00000) < 0 != SCARRY4(uVar3,0x2e00000)) {
|
|
return param_2 & 0x80000000;
|
|
}
|
|
uVar3 = 0x18 - (uVar2 + 0x92e00000 >> 0x15);
|
|
uVar2 = param_1 >> (uVar3 & 0xff);
|
|
if (param_1 << (0x20 - uVar3 & 0xff) != 0) {
|
|
uVar2 = uVar2 | 1;
|
|
}
|
|
uVar1 = param_2 & 0x1fffff | 0x100000;
|
|
param_1 = uVar2 | uVar1 << (0x20 - uVar3 & 0xff);
|
|
uVar3 = (uVar1 >> (uVar3 & 0xff)) << 1;
|
|
}
|
|
uVar2 = (param_2 & 0x80000000 | param_1 >> 0x1d) + uVar3 * 4 + (uint)(0x7fffffff < param_1 * 8);
|
|
if (param_1 * 8 == 0x80000000) {
|
|
uVar2 = uVar2 & 0xfffffffe;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_frsub @ 00056610
|
|
|
|
void __aeabi_frsub(uint param_1)
|
|
|
|
{
|
|
__addsf3(param_1 ^ 0x80000000);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __subsf3 @ 00056618
|
|
|
|
uint __subsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
byte bVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
bool bVar9;
|
|
|
|
uVar5 = param_2 ^ 0x80000000;
|
|
uVar4 = param_1 << 1;
|
|
bVar9 = uVar4 == 0;
|
|
if (!bVar9) {
|
|
param_4 = param_2 << 1;
|
|
bVar9 = param_4 == 0;
|
|
}
|
|
if (!bVar9) {
|
|
bVar9 = uVar4 == param_4;
|
|
}
|
|
iVar1 = (int)uVar4 >> 0x18;
|
|
if (!bVar9) {
|
|
bVar9 = iVar1 == -1;
|
|
}
|
|
if (!bVar9) {
|
|
bVar9 = (int)param_4 >> 0x18 == -1;
|
|
}
|
|
if (bVar9) {
|
|
iVar2 = (int)(param_2 << 1) >> 0x18;
|
|
if (iVar1 == -1 || iVar2 == -1) {
|
|
uVar4 = uVar5;
|
|
if (iVar1 == -1) {
|
|
uVar4 = param_1;
|
|
}
|
|
if (iVar1 != -1 || iVar2 != -1) {
|
|
uVar5 = uVar4;
|
|
}
|
|
if (((uVar4 & 0x7fffff) != 0 || (uVar5 & 0x7fffff) != 0) || uVar4 != uVar5) {
|
|
uVar4 = uVar4 | 0x400000;
|
|
}
|
|
return uVar4;
|
|
}
|
|
if (uVar4 != param_2 << 1) {
|
|
if (uVar4 == 0) {
|
|
param_1 = uVar5;
|
|
}
|
|
return param_1;
|
|
}
|
|
if (param_1 != uVar5) {
|
|
return 0;
|
|
}
|
|
if ((uVar4 & 0xff000000) == 0) {
|
|
uVar4 = param_1 << 1;
|
|
if (SUB41(param_1 >> 0x1f,0)) {
|
|
uVar4 = uVar4 | 0x80000000;
|
|
}
|
|
return uVar4;
|
|
}
|
|
if (uVar4 < 0xfe000000) {
|
|
return param_1 + 0x800000;
|
|
}
|
|
param_1 = param_1 & 0x80000000;
|
|
LAB_0005677c:
|
|
return param_1 | 0x7f800000;
|
|
}
|
|
uVar4 = uVar4 >> 0x18;
|
|
param_4 = param_4 >> 0x18;
|
|
uVar8 = param_4 - uVar4;
|
|
uVar6 = uVar5;
|
|
uVar7 = uVar4;
|
|
if (uVar8 != 0 && uVar4 <= param_4) {
|
|
uVar7 = uVar4 + uVar8;
|
|
uVar6 = param_1;
|
|
param_1 = uVar5;
|
|
}
|
|
if (param_4 < uVar4) {
|
|
uVar8 = -uVar8;
|
|
}
|
|
if (0x19 < uVar8) {
|
|
return param_1;
|
|
}
|
|
uVar4 = param_1 & 0xffffff | 0x800000;
|
|
if ((param_1 & 0x80000000) != 0) {
|
|
uVar4 = -uVar4;
|
|
}
|
|
uVar5 = uVar6 & 0xffffff | 0x800000;
|
|
if ((uVar6 & 0x80000000) != 0) {
|
|
uVar5 = -uVar5;
|
|
}
|
|
if (uVar7 == uVar8) {
|
|
uVar5 = uVar5 ^ 0x800000;
|
|
if (uVar7 == 0) {
|
|
uVar4 = uVar4 ^ 0x800000;
|
|
uVar7 = 1;
|
|
}
|
|
else {
|
|
uVar8 = uVar8 - 1;
|
|
}
|
|
}
|
|
uVar4 = uVar4 + ((int)uVar5 >> (uVar8 & 0xff));
|
|
uVar5 = uVar5 << (0x20 - uVar8 & 0xff);
|
|
param_1 = uVar4 & 0x80000000;
|
|
if ((int)uVar4 < 0) {
|
|
bVar9 = uVar5 != 0;
|
|
uVar5 = -uVar5;
|
|
uVar4 = -(uVar4 + bVar9);
|
|
}
|
|
if (uVar4 < 0x800000) {
|
|
iVar1 = (int)uVar5 >> 0x1f;
|
|
uVar5 = uVar5 << 1;
|
|
uVar4 = uVar4 * 2 - iVar1;
|
|
uVar8 = uVar7 - 2;
|
|
if ((uVar4 & 0x800000) == 0) {
|
|
uVar5 = LZCOUNT(uVar4) - 8;
|
|
uVar4 = uVar4 << (uVar5 & 0xff);
|
|
if ((int)uVar8 < (int)uVar5) {
|
|
uVar4 = uVar4 >> (-(uVar8 - uVar5) & 0xff);
|
|
}
|
|
else {
|
|
uVar4 = uVar4 + (uVar8 - uVar5) * 0x800000;
|
|
}
|
|
return uVar4 | param_1;
|
|
}
|
|
}
|
|
else {
|
|
uVar8 = uVar7 - 1;
|
|
if (0xffffff < uVar4) {
|
|
bVar3 = (byte)uVar4;
|
|
uVar4 = uVar4 >> 1;
|
|
uVar5 = (uint)(bVar3 & 1) << 0x1f | uVar5 >> 1;
|
|
uVar8 = uVar7;
|
|
if (0xfd < uVar7) goto LAB_0005677c;
|
|
}
|
|
}
|
|
uVar4 = uVar4 + uVar8 * 0x800000 + (uint)(0x7fffffff < uVar5);
|
|
if (uVar5 == 0x80000000) {
|
|
uVar4 = uVar4 & 0xfffffffe;
|
|
}
|
|
return uVar4 | param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __addsf3 @ 0005661c
|
|
|
|
uint __addsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
byte bVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
bool bVar9;
|
|
|
|
uVar4 = param_1 << 1;
|
|
bVar9 = uVar4 == 0;
|
|
if (!bVar9) {
|
|
param_4 = param_2 << 1;
|
|
bVar9 = param_4 == 0;
|
|
}
|
|
if (!bVar9) {
|
|
bVar9 = uVar4 == param_4;
|
|
}
|
|
iVar1 = (int)uVar4 >> 0x18;
|
|
if (!bVar9) {
|
|
bVar9 = iVar1 == -1;
|
|
}
|
|
if (!bVar9) {
|
|
bVar9 = (int)param_4 >> 0x18 == -1;
|
|
}
|
|
if (bVar9) {
|
|
iVar2 = (int)(param_2 << 1) >> 0x18;
|
|
if (iVar1 == -1 || iVar2 == -1) {
|
|
uVar4 = param_2;
|
|
if (iVar1 == -1) {
|
|
uVar4 = param_1;
|
|
}
|
|
if (iVar1 != -1 || iVar2 != -1) {
|
|
param_2 = uVar4;
|
|
}
|
|
if (((uVar4 & 0x7fffff) != 0 || (param_2 & 0x7fffff) != 0) || uVar4 != param_2) {
|
|
uVar4 = uVar4 | 0x400000;
|
|
}
|
|
return uVar4;
|
|
}
|
|
if (uVar4 != param_2 << 1) {
|
|
if (uVar4 == 0) {
|
|
param_1 = param_2;
|
|
}
|
|
return param_1;
|
|
}
|
|
if (param_1 != param_2) {
|
|
return 0;
|
|
}
|
|
if ((uVar4 & 0xff000000) == 0) {
|
|
uVar4 = param_1 << 1;
|
|
if (SUB41(param_1 >> 0x1f,0)) {
|
|
uVar4 = uVar4 | 0x80000000;
|
|
}
|
|
return uVar4;
|
|
}
|
|
if (uVar4 < 0xfe000000) {
|
|
return param_1 + 0x800000;
|
|
}
|
|
param_1 = param_1 & 0x80000000;
|
|
LAB_0005677c:
|
|
return param_1 | 0x7f800000;
|
|
}
|
|
uVar4 = uVar4 >> 0x18;
|
|
param_4 = param_4 >> 0x18;
|
|
uVar8 = param_4 - uVar4;
|
|
uVar5 = param_2;
|
|
uVar7 = uVar4;
|
|
if (uVar8 != 0 && uVar4 <= param_4) {
|
|
uVar7 = uVar4 + uVar8;
|
|
uVar5 = param_1;
|
|
param_1 = param_2;
|
|
}
|
|
if (param_4 < uVar4) {
|
|
uVar8 = -uVar8;
|
|
}
|
|
if (0x19 < uVar8) {
|
|
return param_1;
|
|
}
|
|
uVar4 = param_1 & 0xffffff | 0x800000;
|
|
if ((param_1 & 0x80000000) != 0) {
|
|
uVar4 = -uVar4;
|
|
}
|
|
uVar6 = uVar5 & 0xffffff | 0x800000;
|
|
if ((uVar5 & 0x80000000) != 0) {
|
|
uVar6 = -uVar6;
|
|
}
|
|
if (uVar7 == uVar8) {
|
|
uVar6 = uVar6 ^ 0x800000;
|
|
if (uVar7 == 0) {
|
|
uVar4 = uVar4 ^ 0x800000;
|
|
uVar7 = 1;
|
|
}
|
|
else {
|
|
uVar8 = uVar8 - 1;
|
|
}
|
|
}
|
|
uVar4 = uVar4 + ((int)uVar6 >> (uVar8 & 0xff));
|
|
uVar6 = uVar6 << (0x20 - uVar8 & 0xff);
|
|
param_1 = uVar4 & 0x80000000;
|
|
if ((int)uVar4 < 0) {
|
|
bVar9 = uVar6 != 0;
|
|
uVar6 = -uVar6;
|
|
uVar4 = -(uVar4 + bVar9);
|
|
}
|
|
if (uVar4 < 0x800000) {
|
|
iVar1 = (int)uVar6 >> 0x1f;
|
|
uVar6 = uVar6 << 1;
|
|
uVar4 = uVar4 * 2 - iVar1;
|
|
uVar8 = uVar7 - 2;
|
|
if ((uVar4 & 0x800000) == 0) {
|
|
uVar7 = LZCOUNT(uVar4) - 8;
|
|
uVar4 = uVar4 << (uVar7 & 0xff);
|
|
if ((int)uVar8 < (int)uVar7) {
|
|
uVar4 = uVar4 >> (-(uVar8 - uVar7) & 0xff);
|
|
}
|
|
else {
|
|
uVar4 = uVar4 + (uVar8 - uVar7) * 0x800000;
|
|
}
|
|
return uVar4 | param_1;
|
|
}
|
|
}
|
|
else {
|
|
uVar8 = uVar7 - 1;
|
|
if (0xffffff < uVar4) {
|
|
bVar3 = (byte)uVar4;
|
|
uVar4 = uVar4 >> 1;
|
|
uVar6 = (uint)(bVar3 & 1) << 0x1f | uVar6 >> 1;
|
|
uVar8 = uVar7;
|
|
if (0xfd < uVar7) goto LAB_0005677c;
|
|
}
|
|
}
|
|
uVar4 = uVar4 + uVar8 * 0x800000 + (uint)(0x7fffffff < uVar6);
|
|
if (uVar6 == 0x80000000) {
|
|
uVar4 = uVar4 & 0xfffffffe;
|
|
}
|
|
return uVar4 | param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __floatunsisf @ 000567ac
|
|
|
|
uint __floatunsisf(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
|
|
if (param_1 == 0) {
|
|
return 0;
|
|
}
|
|
uVar1 = LZCOUNT(param_1);
|
|
uVar2 = uVar1 - 8;
|
|
iVar3 = uVar2 * -0x800000 + 0x4a800000;
|
|
if (7 < uVar1) {
|
|
uVar1 = 0 << (uVar2 & 0xff);
|
|
uVar2 = iVar3 + (param_1 << (uVar2 & 0xff)) + (0U >> (0x20 - uVar2 & 0xff)) +
|
|
(uint)(0x7fffffff < uVar1);
|
|
if (uVar1 == 0x80000000) {
|
|
uVar2 = uVar2 & 0xfffffffe;
|
|
}
|
|
return uVar2;
|
|
}
|
|
uVar2 = param_1 << uVar1 + 0x18;
|
|
uVar1 = (iVar3 + (param_1 >> (0x20 - (uVar1 + 0x18) & 0xff))) - ((int)uVar2 >> 0x1f);
|
|
if ((uVar2 & 0x7fffffff) == 0) {
|
|
uVar1 = uVar1 & ~(uVar2 >> 0x1f);
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __floatsisf @ 000567b4
|
|
|
|
uint __floatsisf(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
|
|
uVar3 = param_1 & 0x80000000;
|
|
if ((int)uVar3 < 0) {
|
|
param_1 = -param_1;
|
|
}
|
|
if (param_1 == 0) {
|
|
return 0;
|
|
}
|
|
uVar1 = LZCOUNT(param_1);
|
|
uVar2 = uVar1 - 8;
|
|
iVar4 = ((uVar3 | 0x4b000000) - 0x800000) + uVar2 * -0x800000;
|
|
if (7 < uVar1) {
|
|
uVar3 = 0 << (uVar2 & 0xff);
|
|
uVar1 = iVar4 + (param_1 << (uVar2 & 0xff)) + (0U >> (0x20 - uVar2 & 0xff)) +
|
|
(uint)(0x7fffffff < uVar3);
|
|
if (uVar3 == 0x80000000) {
|
|
uVar1 = uVar1 & 0xfffffffe;
|
|
}
|
|
return uVar1;
|
|
}
|
|
uVar3 = param_1 << uVar1 + 0x18;
|
|
uVar1 = (iVar4 + (param_1 >> (0x20 - (uVar1 + 0x18) & 0xff))) - ((int)uVar3 >> 0x1f);
|
|
if ((uVar3 & 0x7fffffff) == 0) {
|
|
uVar1 = uVar1 & ~(uVar3 >> 0x1f);
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_ul2f @ 000567d4
|
|
|
|
uint __aeabi_ul2f(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
|
|
if (param_1 == 0 && param_2 == 0) {
|
|
return param_1;
|
|
}
|
|
uVar1 = param_1;
|
|
uVar2 = param_2;
|
|
if (param_2 == 0) {
|
|
uVar1 = 0;
|
|
uVar2 = param_1;
|
|
}
|
|
iVar5 = 0x5b000000;
|
|
if (param_2 == 0) {
|
|
iVar5 = 0x4b000000;
|
|
}
|
|
uVar3 = LZCOUNT(uVar2);
|
|
uVar4 = uVar3 - 8;
|
|
iVar5 = iVar5 + -0x800000 + uVar4 * -0x800000;
|
|
if (uVar3 < 8) {
|
|
uVar4 = uVar2 << uVar3 + 0x18;
|
|
uVar2 = (iVar5 + (uVar2 >> (0x20 - (uVar3 + 0x18) & 0xff))) - ((int)uVar4 >> 0x1f);
|
|
if (uVar1 == 0 && (uVar4 & 0x7fffffff) == 0) {
|
|
uVar2 = uVar2 & ~(uVar4 >> 0x1f);
|
|
}
|
|
return uVar2;
|
|
}
|
|
uVar3 = uVar1 << (uVar4 & 0xff);
|
|
uVar2 = iVar5 + (uVar2 << (uVar4 & 0xff)) + (uVar1 >> (0x20 - uVar4 & 0xff)) +
|
|
(uint)(0x7fffffff < uVar3);
|
|
if (uVar3 == 0x80000000) {
|
|
uVar2 = uVar2 & 0xfffffffe;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_l2f @ 000567e4
|
|
|
|
uint __aeabi_l2f(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
bool bVar7;
|
|
|
|
if (param_1 == 0 && param_2 == 0) {
|
|
return param_1;
|
|
}
|
|
uVar5 = param_2 & 0x80000000;
|
|
if ((int)uVar5 < 0) {
|
|
bVar7 = param_1 != 0;
|
|
param_1 = -param_1;
|
|
param_2 = -(param_2 + bVar7);
|
|
}
|
|
uVar1 = param_1;
|
|
uVar2 = param_2;
|
|
if (param_2 == 0) {
|
|
uVar1 = 0;
|
|
uVar2 = param_1;
|
|
}
|
|
uVar5 = uVar5 | 0x5b000000;
|
|
if (param_2 == 0) {
|
|
uVar5 = uVar5 + 0xf0000000;
|
|
}
|
|
uVar3 = LZCOUNT(uVar2);
|
|
uVar4 = uVar3 - 8;
|
|
iVar6 = (uVar5 - 0x800000) + uVar4 * -0x800000;
|
|
if (uVar3 < 8) {
|
|
uVar5 = uVar2 << uVar3 + 0x18;
|
|
uVar2 = (iVar6 + (uVar2 >> (0x20 - (uVar3 + 0x18) & 0xff))) - ((int)uVar5 >> 0x1f);
|
|
if (uVar1 == 0 && (uVar5 & 0x7fffffff) == 0) {
|
|
uVar2 = uVar2 & ~(uVar5 >> 0x1f);
|
|
}
|
|
return uVar2;
|
|
}
|
|
uVar5 = uVar1 << (uVar4 & 0xff);
|
|
uVar2 = iVar6 + (uVar2 << (uVar4 & 0xff)) + (uVar1 >> (0x20 - uVar4 & 0xff)) +
|
|
(uint)(0x7fffffff < uVar5);
|
|
if (uVar5 == 0x80000000) {
|
|
uVar2 = uVar2 & 0xfffffffe;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __mulsf3 @ 00056860
|
|
|
|
uint __mulsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
longlong lVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
bool bVar10;
|
|
bool bVar11;
|
|
|
|
uVar3 = param_1 >> 0x17 & 0xff;
|
|
bVar10 = uVar3 == 0;
|
|
if (!bVar10) {
|
|
param_4 = param_2 >> 0x17 & 0xff;
|
|
bVar10 = param_4 == 0;
|
|
}
|
|
if (!bVar10) {
|
|
bVar10 = uVar3 == 0xff;
|
|
}
|
|
if (!bVar10) {
|
|
bVar10 = param_4 == 0xff;
|
|
}
|
|
if (bVar10) {
|
|
param_4 = param_2 >> 0x17 & 0xff;
|
|
if (uVar3 == 0xff || param_4 == 0xff) {
|
|
uVar9 = param_2;
|
|
if (param_1 != 0 && param_1 != 0x80000000) {
|
|
uVar9 = param_1;
|
|
}
|
|
uVar5 = uVar9;
|
|
if (((((param_1 == 0 || param_1 == 0x80000000) || param_2 == 0) || param_2 == 0x80000000) ||
|
|
((uVar3 == 0xff && ((uVar9 & 0x7fffff) != 0)))) ||
|
|
((param_4 == 0xff && (uVar5 = param_2, (param_2 & 0x7fffff) != 0)))) {
|
|
return uVar5 | 0x7fc00000;
|
|
}
|
|
uVar9 = uVar9 ^ param_2;
|
|
goto LAB_000569dc;
|
|
}
|
|
if ((param_1 & 0x7fffffff) == 0 || (param_2 & 0x7fffffff) == 0) {
|
|
return (param_1 ^ param_2) & 0x80000000;
|
|
}
|
|
bVar10 = uVar3 == 0;
|
|
uVar9 = param_1 & 0x80000000;
|
|
while( true ) {
|
|
if (bVar10) {
|
|
param_1 = param_1 << 1;
|
|
bVar10 = (param_1 & 0x800000) == 0;
|
|
}
|
|
if (!bVar10) break;
|
|
uVar3 = uVar3 - 1;
|
|
}
|
|
param_1 = param_1 | uVar9;
|
|
bVar10 = param_4 == 0;
|
|
uVar9 = param_2 & 0x80000000;
|
|
while( true ) {
|
|
if (bVar10) {
|
|
param_2 = param_2 << 1;
|
|
bVar10 = (param_2 & 0x800000) == 0;
|
|
}
|
|
if (!bVar10) break;
|
|
param_4 = param_4 - 1;
|
|
}
|
|
param_2 = param_2 | uVar9;
|
|
}
|
|
iVar4 = uVar3 + param_4;
|
|
uVar9 = param_1 ^ param_2;
|
|
uVar3 = param_1 << 9;
|
|
bVar10 = uVar3 == 0;
|
|
if (!bVar10) {
|
|
param_2 = param_2 << 9;
|
|
bVar10 = param_2 == 0;
|
|
}
|
|
if (bVar10) {
|
|
if (uVar3 == 0) {
|
|
param_2 = param_2 << 9;
|
|
}
|
|
uVar9 = uVar9 & 0x80000000 | param_1 & 0x7fffff | param_2 >> 9;
|
|
bVar11 = SBORROW4(iVar4,0x7f);
|
|
iVar6 = iVar4 + -0x7f;
|
|
bVar10 = iVar6 == 0;
|
|
iVar7 = iVar6;
|
|
if (!bVar10 && 0x7e < iVar4) {
|
|
bVar11 = SBORROW4(0xff,iVar6);
|
|
iVar7 = -iVar6 + 0xff;
|
|
bVar10 = -iVar6 == -0xff;
|
|
}
|
|
if (!bVar10 && iVar7 < 0 == bVar11) {
|
|
return uVar9 | iVar6 * 0x800000;
|
|
}
|
|
uVar9 = uVar9 | 0x800000;
|
|
uVar8 = 0;
|
|
bVar11 = SBORROW4(iVar6,1);
|
|
uVar5 = iVar4 - 0x80;
|
|
bVar10 = uVar5 == 0;
|
|
uVar3 = uVar5;
|
|
}
|
|
else {
|
|
lVar2 = (ulonglong)(param_2 >> 5 | 0x8000000) * (ulonglong)(uVar3 >> 5 | 0x8000000);
|
|
bVar10 = (uint)((ulonglong)lVar2 >> 0x20) < 0x800000;
|
|
if (bVar10) {
|
|
lVar2 = lVar2 * 2;
|
|
}
|
|
uVar8 = (uint)lVar2;
|
|
uVar9 = uVar9 & 0x80000000 | (uint)((ulonglong)lVar2 >> 0x20);
|
|
uVar5 = iVar4 - (bVar10 + 0x7f);
|
|
bVar11 = SBORROW4(uVar5,0xfd);
|
|
bVar10 = uVar5 == 0xfd;
|
|
uVar3 = uVar5 - 0xfd;
|
|
if (uVar5 < 0xfe) {
|
|
uVar3 = uVar9 + uVar5 * 0x800000 + (uint)(0x7fffffff < uVar8);
|
|
if (uVar8 == 0x80000000) {
|
|
uVar3 = uVar3 & 0xfffffffe;
|
|
}
|
|
return uVar3;
|
|
}
|
|
}
|
|
if (bVar10 || (int)uVar3 < 0 != bVar11) {
|
|
if (uVar5 != 0xffffffe7 && (int)(uVar5 + 0x19) < 0 == SCARRY4(uVar5,0x19)) {
|
|
uVar1 = (uVar9 << 1) >> (-uVar5 & 0xff);
|
|
uVar3 = uVar9 << (uVar5 + 0x20 & 0xff);
|
|
uVar9 = (uVar9 & 0x80000000 | uVar1 >> 1) + (uint)((byte)uVar1 & 1);
|
|
if (uVar8 == 0 && (uVar3 & 0x7fffffff) == 0) {
|
|
uVar9 = uVar9 & ~(uVar3 >> 0x1f);
|
|
}
|
|
return uVar9;
|
|
}
|
|
return uVar9 & 0x80000000;
|
|
}
|
|
LAB_000569dc:
|
|
return uVar9 & 0x80000000 | 0x7f800000;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __divsf3 @ 000569f8
|
|
|
|
uint __divsf3(uint param_1,uint param_2,undefined4 param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
bool bVar7;
|
|
bool bVar8;
|
|
bool bVar9;
|
|
|
|
uVar2 = param_1 >> 0x17 & 0xff;
|
|
bVar7 = uVar2 == 0;
|
|
if (!bVar7) {
|
|
param_4 = param_2 >> 0x17 & 0xff;
|
|
bVar7 = param_4 == 0;
|
|
}
|
|
if (!bVar7) {
|
|
bVar7 = uVar2 == 0xff;
|
|
}
|
|
if (!bVar7) {
|
|
bVar7 = param_4 == 0xff;
|
|
}
|
|
if (bVar7) {
|
|
param_4 = param_2 >> 0x17 & 0xff;
|
|
uVar6 = param_1;
|
|
if (uVar2 == 0xff) {
|
|
if (((param_1 & 0x7fffff) != 0) || (uVar6 = param_2, param_4 == 0xff)) {
|
|
LAB_000569ec:
|
|
return uVar6 | 0x7fc00000;
|
|
}
|
|
}
|
|
else {
|
|
if (param_4 == 0xff) {
|
|
uVar6 = param_2;
|
|
if ((param_2 & 0x7fffff) == 0) {
|
|
LAB_00056990:
|
|
return (param_1 ^ param_2) & 0x80000000;
|
|
}
|
|
goto LAB_000569ec;
|
|
}
|
|
if ((param_1 & 0x7fffffff) != 0 && (param_2 & 0x7fffffff) != 0) {
|
|
bVar7 = uVar2 == 0;
|
|
uVar6 = param_1 & 0x80000000;
|
|
while( true ) {
|
|
if (bVar7) {
|
|
param_1 = param_1 << 1;
|
|
bVar7 = (param_1 & 0x800000) == 0;
|
|
}
|
|
if (!bVar7) break;
|
|
uVar2 = uVar2 - 1;
|
|
}
|
|
param_1 = param_1 | uVar6;
|
|
bVar7 = param_4 == 0;
|
|
uVar6 = param_2 & 0x80000000;
|
|
while( true ) {
|
|
if (bVar7) {
|
|
param_2 = param_2 << 1;
|
|
bVar7 = (param_2 & 0x800000) == 0;
|
|
}
|
|
if (!bVar7) break;
|
|
param_4 = param_4 - 1;
|
|
}
|
|
param_2 = param_2 | uVar6;
|
|
goto LAB_00056a10;
|
|
}
|
|
if ((param_1 & 0x7fffffff) == 0) {
|
|
if ((param_2 & 0x7fffffff) != 0) goto LAB_00056990;
|
|
goto LAB_000569ec;
|
|
}
|
|
}
|
|
param_1 = param_1 ^ param_2;
|
|
}
|
|
else {
|
|
LAB_00056a10:
|
|
iVar3 = uVar2 - param_4;
|
|
if (param_2 << 9 == 0) {
|
|
param_1 = (param_1 ^ param_2) & 0x80000000 | param_1 & 0x7fffff;
|
|
bVar9 = SCARRY4(iVar3,0x7f);
|
|
iVar5 = iVar3 + 0x7f;
|
|
bVar7 = iVar5 < 0;
|
|
bVar8 = iVar5 == 0;
|
|
if (!bVar8 && bVar7 == bVar9) {
|
|
bVar9 = SBORROW4(0xff,iVar5);
|
|
bVar7 = -iVar5 + 0xff < 0;
|
|
bVar8 = -iVar5 == -0xff;
|
|
}
|
|
if (!bVar8 && bVar7 == bVar9) {
|
|
return param_1 | iVar5 * 0x800000;
|
|
}
|
|
param_1 = param_1 | 0x800000;
|
|
uVar2 = 0;
|
|
bVar8 = SBORROW4(iVar5,1);
|
|
uVar4 = iVar3 + 0x7e;
|
|
bVar7 = uVar4 == 0;
|
|
uVar6 = uVar4;
|
|
}
|
|
else {
|
|
uVar1 = (param_2 << 9) >> 4 | 0x10000000;
|
|
uVar2 = (param_1 << 9) >> 4 | 0x10000000;
|
|
param_1 = (param_1 ^ param_2) & 0x80000000;
|
|
bVar7 = uVar1 <= uVar2;
|
|
if (!bVar7) {
|
|
uVar2 = uVar2 << 1;
|
|
}
|
|
uVar4 = iVar3 + 0x7d + (uint)bVar7;
|
|
uVar6 = 0x800000;
|
|
do {
|
|
if (uVar1 <= uVar2) {
|
|
uVar2 = uVar2 - uVar1;
|
|
param_1 = param_1 | uVar6;
|
|
}
|
|
if (uVar1 >> 1 <= uVar2) {
|
|
uVar2 = uVar2 - (uVar1 >> 1);
|
|
param_1 = param_1 | uVar6 >> 1;
|
|
}
|
|
if (uVar1 >> 2 <= uVar2) {
|
|
uVar2 = uVar2 - (uVar1 >> 2);
|
|
param_1 = param_1 | uVar6 >> 2;
|
|
}
|
|
if (uVar1 >> 3 <= uVar2) {
|
|
uVar2 = uVar2 - (uVar1 >> 3);
|
|
param_1 = param_1 | uVar6 >> 3;
|
|
}
|
|
uVar2 = uVar2 * 0x10;
|
|
bVar7 = uVar2 == 0;
|
|
if (!bVar7) {
|
|
uVar6 = uVar6 >> 4;
|
|
bVar7 = uVar6 == 0;
|
|
}
|
|
} while (!bVar7);
|
|
bVar8 = SBORROW4(uVar4,0xfd);
|
|
bVar7 = uVar4 == 0xfd;
|
|
uVar6 = uVar4 - 0xfd;
|
|
if (uVar4 < 0xfe) {
|
|
uVar6 = param_1 + uVar4 * 0x800000 + (uint)(uVar1 <= uVar2);
|
|
if (uVar2 == uVar1) {
|
|
uVar6 = uVar6 & 0xfffffffe;
|
|
}
|
|
return uVar6;
|
|
}
|
|
}
|
|
if (bVar7 || (int)uVar6 < 0 != bVar8) {
|
|
if (uVar4 != 0xffffffe7 && (int)(uVar4 + 0x19) < 0 == SCARRY4(uVar4,0x19)) {
|
|
uVar1 = (param_1 << 1) >> (-uVar4 & 0xff);
|
|
uVar6 = param_1 << (uVar4 + 0x20 & 0xff);
|
|
uVar4 = (param_1 & 0x80000000 | uVar1 >> 1) + (uint)((byte)uVar1 & 1);
|
|
if (uVar2 == 0 && (uVar6 & 0x7fffffff) == 0) {
|
|
uVar4 = uVar4 & ~(uVar6 >> 0x1f);
|
|
}
|
|
return uVar4;
|
|
}
|
|
return param_1 & 0x80000000;
|
|
}
|
|
}
|
|
return param_1 & 0x80000000 | 0x7f800000;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gesf2 @ 00056b58
|
|
|
|
uint __gesf2(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
bool bVar4;
|
|
bool bVar5;
|
|
|
|
uVar1 = param_1 * 2;
|
|
uVar2 = param_2 * 2;
|
|
if (((int)uVar1 >> 0x18 == -1 || (int)uVar2 >> 0x18 == -1) &&
|
|
((((int)uVar1 >> 0x18 == -1 && ((param_1 & 0x7fffff) != 0)) ||
|
|
(((int)uVar2 >> 0x18 == -1 && ((param_2 & 0x7fffff) != 0)))))) {
|
|
return 0xffffffff;
|
|
}
|
|
uVar3 = uVar1 | param_2 & 0x7fffffff;
|
|
bVar5 = uVar3 == 0;
|
|
if (!bVar5) {
|
|
uVar3 = param_1 ^ param_2;
|
|
bVar5 = uVar3 == 0;
|
|
}
|
|
bVar4 = -1 < (int)uVar3;
|
|
if (bVar4) {
|
|
param_1 = uVar1 + param_2 * -2;
|
|
bVar5 = param_1 == 0;
|
|
}
|
|
if ((bVar4 && uVar1 >= uVar2) && !bVar5) {
|
|
param_1 = (int)param_2 >> 0x1f;
|
|
}
|
|
if (!bVar4 || uVar1 < uVar2) {
|
|
param_1 = ~((int)param_2 >> 0x1f);
|
|
}
|
|
if (!bVar5) {
|
|
param_1 = param_1 | 1;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __lesf2 @ 00056b60
|
|
|
|
uint __lesf2(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
bool bVar4;
|
|
bool bVar5;
|
|
|
|
uVar1 = param_1 * 2;
|
|
uVar2 = param_2 * 2;
|
|
if (((int)uVar1 >> 0x18 == -1 || (int)uVar2 >> 0x18 == -1) &&
|
|
((((int)uVar1 >> 0x18 == -1 && ((param_1 & 0x7fffff) != 0)) ||
|
|
(((int)uVar2 >> 0x18 == -1 && ((param_2 & 0x7fffff) != 0)))))) {
|
|
return 1;
|
|
}
|
|
uVar3 = uVar1 | param_2 & 0x7fffffff;
|
|
bVar5 = uVar3 == 0;
|
|
if (!bVar5) {
|
|
uVar3 = param_1 ^ param_2;
|
|
bVar5 = uVar3 == 0;
|
|
}
|
|
bVar4 = -1 < (int)uVar3;
|
|
if (bVar4) {
|
|
param_1 = uVar1 + param_2 * -2;
|
|
bVar5 = param_1 == 0;
|
|
}
|
|
if ((bVar4 && uVar1 >= uVar2) && !bVar5) {
|
|
param_1 = (int)param_2 >> 0x1f;
|
|
}
|
|
if (!bVar4 || uVar1 < uVar2) {
|
|
param_1 = ~((int)param_2 >> 0x1f);
|
|
}
|
|
if (!bVar5) {
|
|
param_1 = param_1 | 1;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __eqsf2 @ 00056b68
|
|
|
|
uint __eqsf2(uint param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
bool bVar4;
|
|
bool bVar5;
|
|
|
|
uVar1 = param_1 * 2;
|
|
uVar2 = param_2 * 2;
|
|
if (((int)uVar1 >> 0x18 == -1 || (int)uVar2 >> 0x18 == -1) &&
|
|
((((int)uVar1 >> 0x18 == -1 && ((param_1 & 0x7fffff) != 0)) ||
|
|
(((int)uVar2 >> 0x18 == -1 && ((param_2 & 0x7fffff) != 0)))))) {
|
|
return 1;
|
|
}
|
|
uVar3 = uVar1 | param_2 & 0x7fffffff;
|
|
bVar5 = uVar3 == 0;
|
|
if (!bVar5) {
|
|
uVar3 = param_1 ^ param_2;
|
|
bVar5 = uVar3 == 0;
|
|
}
|
|
bVar4 = -1 < (int)uVar3;
|
|
if (bVar4) {
|
|
param_1 = uVar1 + param_2 * -2;
|
|
bVar5 = param_1 == 0;
|
|
}
|
|
if ((bVar4 && uVar1 >= uVar2) && !bVar5) {
|
|
param_1 = (int)param_2 >> 0x1f;
|
|
}
|
|
if (!bVar4 || uVar1 < uVar2) {
|
|
param_1 = ~((int)param_2 >> 0x1f);
|
|
}
|
|
if (!bVar5) {
|
|
param_1 = param_1 | 1;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_cfrcmple @ 00056bcc
|
|
|
|
void __aeabi_cfrcmple(undefined4 param_1,undefined4 param_2)
|
|
|
|
{
|
|
__aeabi_cfcmple(param_2,param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_cfcmple @ 00056bdc
|
|
|
|
undefined8 __aeabi_cfcmple(undefined4 param_1,undefined4 param_2)
|
|
|
|
{
|
|
__eqsf2();
|
|
return CONCAT44(param_2,param_1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_fcmpeq @ 00056bf0
|
|
|
|
undefined1 __aeabi_fcmpeq(void)
|
|
|
|
{
|
|
undefined1 in_ZR;
|
|
|
|
__aeabi_cfcmple();
|
|
return in_ZR;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_fcmplt @ 00056c04
|
|
|
|
bool __aeabi_fcmplt(void)
|
|
|
|
{
|
|
undefined1 in_CY;
|
|
|
|
__aeabi_cfcmple();
|
|
return !(bool)in_CY;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_fcmple @ 00056c18
|
|
|
|
bool __aeabi_fcmple(void)
|
|
|
|
{
|
|
undefined1 in_ZR;
|
|
undefined1 in_CY;
|
|
|
|
__aeabi_cfcmple();
|
|
return !(bool)in_CY || (bool)in_ZR;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_fcmpge @ 00056c2c
|
|
|
|
bool __aeabi_fcmpge(void)
|
|
|
|
{
|
|
undefined1 in_ZR;
|
|
undefined1 in_CY;
|
|
|
|
__aeabi_cfrcmple();
|
|
return !(bool)in_CY || (bool)in_ZR;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_fcmpgt @ 00056c40
|
|
|
|
bool __aeabi_fcmpgt(void)
|
|
|
|
{
|
|
undefined1 in_CY;
|
|
|
|
__aeabi_cfrcmple();
|
|
return !(bool)in_CY;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __unordsf2 @ 00056c54
|
|
|
|
undefined4 __unordsf2(uint param_1,uint param_2)
|
|
|
|
{
|
|
if ((((int)(param_1 << 1) >> 0x18 != -1) || ((param_1 & 0x7fffff) == 0)) &&
|
|
(((int)(param_2 << 1) >> 0x18 != -1 || ((param_2 & 0x7fffff) == 0)))) {
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __fixsfsi @ 00056c8c
|
|
|
|
uint __fixsfsi(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
|
|
if (param_1 << 1 < 0x7f000000) {
|
|
return 0;
|
|
}
|
|
uVar1 = (param_1 << 1) >> 0x18;
|
|
uVar2 = 0x9e - uVar1;
|
|
if (uVar1 < 0x9f && uVar2 != 0) {
|
|
uVar1 = (param_1 << 8 | 0x80000000) >> (uVar2 & 0xff);
|
|
if ((param_1 & 0x80000000) != 0) {
|
|
uVar1 = -uVar1;
|
|
}
|
|
return uVar1;
|
|
}
|
|
if ((uVar2 == 0xffffff9f) && ((param_1 & 0x7fffff) != 0)) {
|
|
return 0;
|
|
}
|
|
param_1 = param_1 & 0x80000000;
|
|
if (param_1 == 0) {
|
|
param_1 = 0x7fffffff;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __fixunssfsi @ 00056ce8
|
|
|
|
uint __fixunssfsi(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
if ((SUB41(param_1 >> 0x1f,0)) || (param_1 << 1 < 0x7f000000)) {
|
|
return 0;
|
|
}
|
|
uVar1 = 0x9e - ((param_1 << 1) >> 0x18);
|
|
if (-1 < (int)uVar1) {
|
|
return (param_1 << 8 | 0x80000000) >> (uVar1 & 0xff);
|
|
}
|
|
if ((uVar1 == 0xffffff9f) && ((param_1 & 0x7fffff) != 0)) {
|
|
return 0;
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_ldivmod @ 00056d3c
|
|
|
|
void __aeabi_ldivmod(int param_1,int param_2,int param_3,int param_4)
|
|
|
|
{
|
|
bool bVar1;
|
|
bool bVar2;
|
|
bool bVar3;
|
|
|
|
if (param_4 != 0 || param_3 != 0) {
|
|
__gnu_ldivmod_helper();
|
|
return;
|
|
}
|
|
bVar1 = param_2 < 0;
|
|
bVar2 = param_2 == 0;
|
|
if (bVar2) {
|
|
bVar1 = param_1 < 0;
|
|
}
|
|
bVar3 = param_1 != 0;
|
|
if (bVar1) {
|
|
param_2 = -0x80000000;
|
|
param_1 = 0;
|
|
}
|
|
if ((!bVar2 || bVar3) && !bVar1) {
|
|
param_2 = 0x7fffffff;
|
|
}
|
|
if ((!bVar2 || bVar3) && !bVar1) {
|
|
param_1 = -1;
|
|
}
|
|
__aeabi_ldiv0(param_1,param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_uldivmod @ 00056d80
|
|
|
|
void __aeabi_uldivmod(int param_1,int param_2,int param_3,int param_4)
|
|
|
|
{
|
|
if (param_4 != 0 || param_3 != 0) {
|
|
__gnu_uldivmod_helper();
|
|
return;
|
|
}
|
|
if (param_2 != 0 || param_1 != 0) {
|
|
param_2 = -1;
|
|
param_1 = -1;
|
|
}
|
|
__aeabi_ldiv0(param_1,param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_ldiv0 @ 00056dbc
|
|
|
|
void __aeabi_ldiv0(void)
|
|
|
|
{
|
|
raise(8);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __muldi3 @ 00056dcc
|
|
|
|
undefined8 __muldi3(uint param_1,int param_2,uint param_3,int param_4)
|
|
|
|
{
|
|
return CONCAT44(param_4 * param_1 + param_2 * param_3 +
|
|
(int)((ulonglong)param_1 * (ulonglong)param_3 >> 0x20),
|
|
(int)((ulonglong)param_1 * (ulonglong)param_3));
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_ldivmod_helper @ 00056de8
|
|
|
|
void __gnu_ldivmod_helper
|
|
(uint param_1,int param_2,undefined4 param_3,undefined4 param_4,int *param_5)
|
|
|
|
{
|
|
uint uVar1;
|
|
longlong lVar2;
|
|
|
|
lVar2 = __divdi3();
|
|
lVar2 = lVar2 * CONCAT44(param_4,param_3);
|
|
uVar1 = (uint)lVar2;
|
|
*param_5 = param_1 - uVar1;
|
|
param_5[1] = param_2 - ((int)((ulonglong)lVar2 >> 0x20) + (uint)(param_1 < uVar1));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_uldivmod_helper @ 00056e24
|
|
|
|
void __gnu_uldivmod_helper
|
|
(uint param_1,int param_2,undefined4 param_3,undefined4 param_4,int *param_5)
|
|
|
|
{
|
|
uint uVar1;
|
|
longlong lVar2;
|
|
|
|
lVar2 = __udivdi3();
|
|
lVar2 = lVar2 * CONCAT44(param_4,param_3);
|
|
uVar1 = (uint)lVar2;
|
|
*param_5 = param_1 - uVar1;
|
|
param_5[1] = param_2 - ((int)((ulonglong)lVar2 >> 0x20) + (uint)(param_1 < uVar1));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00056e60 @ 00056e60
|
|
|
|
int FUN_00056e60(int *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
do {
|
|
iVar2 = *param_1;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(iVar2,iVar2 + param_2,param_1);
|
|
} while (iVar1 != 0);
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00056e98 @ 00056e98
|
|
|
|
int FUN_00056e98(int *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
do {
|
|
iVar2 = *param_1;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(iVar2,iVar2 - param_2,param_1);
|
|
} while (iVar1 != 0);
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00056ed0 @ 00056ed0
|
|
|
|
uint FUN_00056ed0(uint *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
do {
|
|
uVar2 = *param_1;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,uVar2 | param_2,param_1);
|
|
} while (iVar1 != 0);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00056f08 @ 00056f08
|
|
|
|
uint FUN_00056f08(uint *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
do {
|
|
uVar2 = *param_1;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,uVar2 & param_2,param_1);
|
|
} while (iVar1 != 0);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00056f40 @ 00056f40
|
|
|
|
uint FUN_00056f40(uint *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
do {
|
|
uVar2 = *param_1;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,uVar2 ^ param_2,param_1);
|
|
} while (iVar1 != 0);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00056f78 @ 00056f78
|
|
|
|
uint FUN_00056f78(uint *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
do {
|
|
uVar2 = *param_1;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,~(uVar2 & param_2),param_1);
|
|
} while (iVar1 != 0);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00056fb4 @ 00056fb4
|
|
|
|
int FUN_00056fb4(uint param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar3,(uVar2 + param_2 & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057018 @ 00057018
|
|
|
|
int FUN_00057018(uint param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar3,(uVar2 - param_2 & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005707c @ 0005707c
|
|
|
|
int FUN_0005707c(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar3,((uVar2 | param_2) & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000570e0 @ 000570e0
|
|
|
|
int FUN_000570e0(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar3,(uVar2 & param_2 & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057144 @ 00057144
|
|
|
|
int FUN_00057144(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar3,((uVar2 ^ param_2) & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000571a8 @ 000571a8
|
|
|
|
int FUN_000571a8(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar3,(~(uVar2 & param_2) & 0xffff) << iVar1 | ~(0xffff << iVar1) & uVar3,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057210 @ 00057210
|
|
|
|
int FUN_00057210(uint param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar4 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar3 = (uVar4 & uVar2) >> iVar1;
|
|
iVar5 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar4,uVar2 & uVar3 + param_2 << iVar1 | ~uVar2 & uVar4,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar5 != 0);
|
|
return (int)(char)uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057270 @ 00057270
|
|
|
|
int FUN_00057270(uint param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar4 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar3 = (uVar4 & uVar2) >> iVar1;
|
|
iVar5 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar4,uVar2 & uVar3 - param_2 << iVar1 | ~uVar2 & uVar4,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar5 != 0);
|
|
return (int)(char)uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000572d0 @ 000572d0
|
|
|
|
int FUN_000572d0(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar4 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar3 = (uVar4 & uVar2) >> iVar1;
|
|
iVar5 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar4,uVar2 & (uVar3 | param_2) << iVar1 | ~uVar2 & uVar4,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar5 != 0);
|
|
return (int)(char)uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057330 @ 00057330
|
|
|
|
int FUN_00057330(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar4 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar3 = (uVar4 & uVar2) >> iVar1;
|
|
iVar5 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar4,uVar2 & (uVar3 & param_2) << iVar1 | ~uVar2 & uVar4,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar5 != 0);
|
|
return (int)(char)uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057390 @ 00057390
|
|
|
|
int FUN_00057390(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar4 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar3 = (uVar4 & uVar2) >> iVar1;
|
|
iVar5 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar4,uVar2 & (uVar3 ^ param_2) << iVar1 | ~uVar2 & uVar4,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar5 != 0);
|
|
return (int)(char)uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000573f0 @ 000573f0
|
|
|
|
int FUN_000573f0(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar4 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar3 = (uVar4 & uVar2) >> iVar1;
|
|
iVar5 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar4,uVar2 & ~(uVar3 & param_2) << iVar1 | ~uVar2 & uVar4,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar5 != 0);
|
|
return (int)(char)uVar3;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057454 @ 00057454
|
|
|
|
int FUN_00057454(int *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
do {
|
|
iVar2 = *param_1 + param_2;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,iVar2,param_1);
|
|
} while (iVar1 != 0);
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005748c @ 0005748c
|
|
|
|
int FUN_0005748c(int *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
do {
|
|
iVar2 = *param_1 - param_2;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,iVar2,param_1);
|
|
} while (iVar1 != 0);
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000574c4 @ 000574c4
|
|
|
|
uint FUN_000574c4(uint *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
do {
|
|
uVar2 = *param_1 | param_2;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1);
|
|
} while (iVar1 != 0);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000574fc @ 000574fc
|
|
|
|
uint FUN_000574fc(uint *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
do {
|
|
uVar2 = *param_1 & param_2;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1);
|
|
} while (iVar1 != 0);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057534 @ 00057534
|
|
|
|
uint FUN_00057534(uint *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
do {
|
|
uVar2 = *param_1 ^ param_2;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1);
|
|
} while (iVar1 != 0);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005756c @ 0005756c
|
|
|
|
uint FUN_0005756c(uint *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
|
|
do {
|
|
uVar2 = ~(*param_1 & param_2);
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(*param_1,uVar2,param_1);
|
|
} while (iVar1 != 0);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000575a8 @ 000575a8
|
|
|
|
int FUN_000575a8(uint param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xffff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = (param_2 + ((uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057614 @ 00057614
|
|
|
|
int FUN_00057614(uint param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xffff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = (((uVar3 & uVar2) >> iVar1) - param_2 & 0xffff) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057680 @ 00057680
|
|
|
|
int FUN_00057680(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xffff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = ((param_2 | (uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000576ec @ 000576ec
|
|
|
|
int FUN_000576ec(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xffff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = (param_2 & (uVar3 & uVar2) >> iVar1 & 0xffff) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057758 @ 00057758
|
|
|
|
int FUN_00057758(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xffff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = ((param_2 ^ (uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000577c4 @ 000577c4
|
|
|
|
int FUN_000577c4(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xffff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = (~(param_2 & (uVar3 & uVar2) >> iVar1) & 0xffff) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(short)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057834 @ 00057834
|
|
|
|
int FUN_00057834(uint param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = uVar2 & param_2 + ((uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(char)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005789c @ 0005789c
|
|
|
|
int FUN_0005789c(uint param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = uVar2 & ((uVar3 & uVar2) >> iVar1) - param_2 << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(char)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057904 @ 00057904
|
|
|
|
int FUN_00057904(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = uVar2 & (param_2 | (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(char)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_0005796c @ 0005796c
|
|
|
|
int FUN_0005796c(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = uVar2 & (param_2 & (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(char)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000579d4 @ 000579d4
|
|
|
|
int FUN_000579d4(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = uVar2 & (param_2 ^ (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(char)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057a3c @ 00057a3c
|
|
|
|
int FUN_00057a3c(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar5 = uVar2 & ~(param_2 & (uVar3 & uVar2) >> iVar1) << iVar1 | ~uVar2 & uVar3;
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)(uVar3,uVar5,(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar4 != 0);
|
|
return (int)(char)((uVar5 & uVar2) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057aa8 @ 00057aa8
|
|
|
|
int FUN_00057aa8(int *param_1,int param_2,undefined4 param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
do {
|
|
if (param_2 != *param_1) {
|
|
return *param_1;
|
|
}
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(param_2,param_3,param_1);
|
|
} while (iVar1 != 0);
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057aec @ 00057aec
|
|
|
|
int FUN_00057aec(uint param_1,ushort param_2,uint param_3,undefined4 param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar2 = (uVar3 & 0xffff << iVar1) >> iVar1;
|
|
if (uVar2 != param_2) {
|
|
param_2 = (ushort)uVar2;
|
|
break;
|
|
}
|
|
iVar4 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar3,~(0xffff << iVar1) & uVar3 | (param_3 & 0xffff) << iVar1,
|
|
(uint *)(param_1 & 0xfffffffc),uVar2,param_4);
|
|
} while (iVar4 != 0);
|
|
return (int)(short)param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057b68 @ 00057b68
|
|
|
|
int FUN_00057b68(uint param_1,byte param_2,int param_3,undefined4 param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar4 = *(uint *)(param_1 & 0xfffffffc);
|
|
uVar3 = (uVar4 & uVar2) >> iVar1;
|
|
if (uVar3 != param_2) {
|
|
param_2 = (byte)uVar3;
|
|
break;
|
|
}
|
|
iVar5 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar4,~uVar2 & uVar4 | uVar2 & param_3 << iVar1,
|
|
(uint *)(param_1 & 0xfffffffc),uVar3,param_4);
|
|
} while (iVar5 != 0);
|
|
return (int)(char)param_2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057bd8 @ 00057bd8
|
|
|
|
bool FUN_00057bd8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(param_2,param_3,param_1,&SUB_ffff0fc0,param_4);
|
|
return iVar1 == 0;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057c24 @ 00057c24
|
|
|
|
bool FUN_00057c24(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
|
|
cVar1 = FUN_00057b68();
|
|
return param_2 == cVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057c50 @ 00057c50
|
|
|
|
undefined4 FUN_00057c50(undefined4 *param_1,undefined4 param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
|
|
do {
|
|
uVar2 = *param_1;
|
|
iVar1 = (*(code *)&SUB_ffff0fc0)(uVar2,param_2,param_1);
|
|
} while (iVar1 != 0);
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057c88 @ 00057c88
|
|
|
|
int FUN_00057c88(uint param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
do {
|
|
uVar3 = *(uint *)(param_1 & 0xfffffffc);
|
|
iVar2 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar3,~(0xffff << iVar1) & uVar3 | (param_2 & 0xffff) << iVar1,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar2 != 0);
|
|
return (int)(short)((0xffff << iVar1 & uVar3) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057ce8 @ 00057ce8
|
|
|
|
int FUN_00057ce8(uint param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
|
|
iVar1 = (param_1 & 3) << 3;
|
|
uVar2 = 0xff << iVar1;
|
|
do {
|
|
uVar4 = *(uint *)(param_1 & 0xfffffffc);
|
|
iVar3 = (*(code *)&SUB_ffff0fc0)
|
|
(uVar4,~uVar2 & uVar4 | uVar2 & param_2 << iVar1,
|
|
(uint *)(param_1 & 0xfffffffc));
|
|
} while (iVar3 != 0);
|
|
return (int)(char)((uVar2 & uVar4) >> iVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057dc8 @ 00057dc8
|
|
|
|
int FUN_00057dc8(uint *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = *param_1;
|
|
if ((uVar1 & 0x40000000) == 0) {
|
|
uVar1 = uVar1 & 0x7fffffff;
|
|
}
|
|
else {
|
|
uVar1 = uVar1 | 0x80000000;
|
|
}
|
|
return (int)param_1 + uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057de0 @ 00057de0
|
|
|
|
int FUN_00057de0(int param_1,int param_2,uint param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
|
|
if (param_2 == 0) {
|
|
return 0;
|
|
}
|
|
iVar6 = 0;
|
|
iVar5 = param_2 + -1;
|
|
do {
|
|
while( true ) {
|
|
iVar1 = (iVar6 + iVar5) / 2;
|
|
iVar4 = param_1 + iVar1 * 8;
|
|
uVar2 = FUN_00057dc8(iVar4);
|
|
if (iVar1 == param_2 + -1) break;
|
|
iVar3 = FUN_00057dc8(param_1 + iVar1 * 8 + 8);
|
|
if (param_3 < uVar2) goto LAB_00057e44;
|
|
if (param_3 <= iVar3 - 1U) {
|
|
return iVar4;
|
|
}
|
|
iVar6 = iVar1 + 1;
|
|
}
|
|
if (uVar2 <= param_3) {
|
|
return iVar4;
|
|
}
|
|
LAB_00057e44:
|
|
if (iVar1 == iVar6) {
|
|
return 0;
|
|
}
|
|
iVar5 = iVar1 + -1;
|
|
} while( true );
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057e84 @ 00057e84
|
|
|
|
code * FUN_00057e84(int param_1)
|
|
|
|
{
|
|
if (param_1 == 1) {
|
|
return __aeabi_unwind_cpp_pr1;
|
|
}
|
|
if (param_1 != 2) {
|
|
if (param_1 == 0) {
|
|
return __aeabi_unwind_cpp_pr0;
|
|
}
|
|
return (code *)0x0;
|
|
}
|
|
return __aeabi_unwind_cpp_pr2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057ed4 @ 00057ed4
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00057f14) */
|
|
|
|
undefined4 FUN_00057ed4(int param_1,int param_2,undefined4 param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
bool bVar4;
|
|
int local_14;
|
|
undefined4 uStack_10;
|
|
|
|
local_14 = param_2;
|
|
uStack_10 = param_3;
|
|
iVar1 = __gnu_Unwind_Find_exidx(param_2 + -2,&local_14,param_3,__gnu_Unwind_Find_exidx,param_1);
|
|
if ((iVar1 == 0) || (iVar1 = FUN_00057de0(iVar1,local_14,param_2 + -2), iVar1 == 0)) {
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
uVar2 = 9;
|
|
}
|
|
else {
|
|
uVar2 = FUN_00057dc8();
|
|
iVar3 = *(int *)(iVar1 + 4);
|
|
bVar4 = iVar3 == 1;
|
|
if (bVar4) {
|
|
iVar3 = 0;
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
}
|
|
*(undefined4 *)(param_1 + 0x48) = uVar2;
|
|
if (bVar4) {
|
|
uVar2 = 5;
|
|
}
|
|
else {
|
|
if (iVar3 < 0) {
|
|
*(int *)(param_1 + 0x4c) = iVar1 + 4;
|
|
}
|
|
else {
|
|
uVar2 = FUN_00057dc8();
|
|
*(undefined4 *)(param_1 + 0x4c) = uVar2;
|
|
}
|
|
*(uint *)(param_1 + 0x50) = (uint)(iVar3 < 0);
|
|
if ((int)**(uint **)(param_1 + 0x4c) < 0) {
|
|
iVar1 = FUN_00057e84(**(uint **)(param_1 + 0x4c) >> 0x18 & 0xf);
|
|
*(int *)(param_1 + 0x10) = iVar1;
|
|
if (iVar1 == 0) {
|
|
uVar2 = 9;
|
|
}
|
|
else {
|
|
uVar2 = 0;
|
|
}
|
|
}
|
|
else {
|
|
uVar2 = FUN_00057dc8();
|
|
*(undefined4 *)(param_1 + 0x10) = uVar2;
|
|
uVar2 = 0;
|
|
}
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00057fd8 @ 00057fd8
|
|
|
|
void FUN_00057fd8(uint *param_1)
|
|
|
|
{
|
|
if ((*param_1 & 1) == 0) {
|
|
if ((*param_1 & 2) == 0) {
|
|
__gnu_Unwind_Restore_VFP(param_1 + 0x12);
|
|
}
|
|
else {
|
|
__gnu_Unwind_Restore_VFP_D();
|
|
}
|
|
}
|
|
if ((*param_1 & 4) == 0) {
|
|
__gnu_Unwind_Restore_VFP_D_16_to_31(param_1 + 0x34);
|
|
}
|
|
if ((*param_1 & 8) == 0) {
|
|
__gnu_Unwind_Restore_WMMXD(param_1 + 0x54);
|
|
}
|
|
if ((*param_1 & 0x10) != 0) {
|
|
return;
|
|
}
|
|
__gnu_Unwind_Restore_WMMXC(param_1 + 0x74);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00058044 @ 00058044
|
|
|
|
undefined4 FUN_00058044(int *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if (*param_1 == 0) {
|
|
uVar1 = 0;
|
|
}
|
|
else {
|
|
uVar1 = *(undefined4 *)(*param_1 + (int)param_1);
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00058058 @ 00058058
|
|
|
|
undefined4 FUN_00058058(void)
|
|
|
|
{
|
|
return 9;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00058060 @ 00058060
|
|
|
|
void FUN_00058060(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00058064 @ 00058064
|
|
|
|
int FUN_00058064(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
code *pcVar6;
|
|
undefined4 uVar7;
|
|
undefined8 uVar8;
|
|
undefined4 uStack_3f8;
|
|
undefined4 uStack_3f4;
|
|
undefined4 uStack_3f0;
|
|
undefined4 uStack_3ec;
|
|
undefined4 uStack_3e8;
|
|
undefined4 uStack_3e4;
|
|
undefined4 uStack_3e0;
|
|
undefined4 uStack_3dc;
|
|
undefined4 uStack_3d8;
|
|
undefined4 uStack_3d4;
|
|
undefined4 uStack_3d0;
|
|
undefined4 uStack_3cc;
|
|
undefined4 uStack_3c8;
|
|
undefined4 uStack_3c4;
|
|
undefined4 uStack_3c0;
|
|
undefined4 uStack_3bc;
|
|
undefined4 uStack_3b8;
|
|
undefined4 uStack_3b4;
|
|
undefined1 auStack_218 [56];
|
|
undefined4 uStack_1e0;
|
|
int iStack_34;
|
|
int iStack_30;
|
|
undefined4 uStack_2c;
|
|
|
|
do {
|
|
iVar1 = FUN_00057ed4(param_1,*(undefined4 *)(param_2 + 0x40));
|
|
if (iVar1 != 0) goto LAB_00058084;
|
|
*(undefined4 *)(param_1 + 0x14) = *(undefined4 *)(param_2 + 0x40);
|
|
iVar1 = param_2;
|
|
iVar2 = (**(code **)(param_1 + 0x10))(1,param_1);
|
|
} while (iVar2 == 8);
|
|
if (iVar2 == 7) {
|
|
FUN_00058060(0,*(undefined4 *)(param_2 + 0x40));
|
|
uVar8 = restore_core_regs(param_2 + 4);
|
|
iVar5 = (int)((ulonglong)uVar8 >> 0x20);
|
|
iVar2 = (int)uVar8;
|
|
pcVar6 = *(code **)(iVar2 + 0xc);
|
|
uVar7 = *(undefined4 *)(iVar2 + 0x18);
|
|
uStack_3f4 = *(undefined4 *)(iVar5 + 4);
|
|
uStack_3f0 = *(undefined4 *)(iVar5 + 8);
|
|
uStack_3ec = *(undefined4 *)(iVar5 + 0xc);
|
|
uStack_3e8 = *(undefined4 *)(iVar5 + 0x10);
|
|
uStack_3e4 = *(undefined4 *)(iVar5 + 0x14);
|
|
uStack_3e0 = *(undefined4 *)(iVar5 + 0x18);
|
|
uStack_3dc = *(undefined4 *)(iVar5 + 0x1c);
|
|
uStack_3d8 = *(undefined4 *)(iVar5 + 0x20);
|
|
uStack_3d4 = *(undefined4 *)(iVar5 + 0x24);
|
|
uStack_3d0 = *(undefined4 *)(iVar5 + 0x28);
|
|
uStack_3cc = *(undefined4 *)(iVar5 + 0x2c);
|
|
uStack_3c8 = *(undefined4 *)(iVar5 + 0x30);
|
|
uStack_3c4 = *(undefined4 *)(iVar5 + 0x34);
|
|
uStack_3c0 = *(undefined4 *)(iVar5 + 0x38);
|
|
uStack_3bc = *(undefined4 *)(iVar5 + 0x3c);
|
|
uStack_3b8 = *(undefined4 *)(iVar5 + 0x40);
|
|
iVar5 = 0;
|
|
uStack_3f8 = 0;
|
|
uStack_2c = 0;
|
|
iStack_34 = param_2;
|
|
iStack_30 = param_1;
|
|
do {
|
|
iVar3 = FUN_00057ed4(iVar2,uStack_3b8);
|
|
if (iVar1 == 0) {
|
|
uVar4 = 9;
|
|
}
|
|
else {
|
|
uVar4 = 10;
|
|
}
|
|
if (iVar3 == 0) {
|
|
*(undefined4 *)(iVar2 + 0x14) = uStack_3b8;
|
|
memcpy(auStack_218,&uStack_3f8,0x1e0);
|
|
iVar5 = (**(code **)(iVar2 + 0x10))(uVar4,iVar2,auStack_218);
|
|
uStack_3b4 = uStack_1e0;
|
|
}
|
|
else {
|
|
uVar4 = uVar4 | 0x10;
|
|
uStack_3b4 = uStack_3c0;
|
|
}
|
|
iVar1 = (*pcVar6)(1,uVar4,iVar2,iVar2,&uStack_3f8,uVar7);
|
|
if (iVar1 != 0) {
|
|
return 9;
|
|
}
|
|
if (iVar3 != 0) {
|
|
return iVar3;
|
|
}
|
|
memcpy(&uStack_3f8,auStack_218,0x1e0);
|
|
iVar1 = 0;
|
|
} while (iVar5 == 8);
|
|
if (iVar5 == 7) {
|
|
FUN_00058060(0,uStack_3b8);
|
|
restore_core_regs(&uStack_3f4);
|
|
}
|
|
return 9;
|
|
}
|
|
LAB_00058084:
|
|
/* WARNING: Subroutine does not return */
|
|
abort();
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000580c8 @ 000580c8
|
|
|
|
int FUN_000580c8(int param_1,int param_2,int param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
code *pcVar5;
|
|
undefined4 uVar6;
|
|
undefined4 local_3e8;
|
|
undefined4 local_3e4;
|
|
undefined4 uStack_3e0;
|
|
undefined4 uStack_3dc;
|
|
undefined4 uStack_3d8;
|
|
undefined4 local_3d4;
|
|
undefined4 uStack_3d0;
|
|
undefined4 uStack_3cc;
|
|
undefined4 uStack_3c8;
|
|
undefined4 local_3c4;
|
|
undefined4 uStack_3c0;
|
|
undefined4 uStack_3bc;
|
|
undefined4 uStack_3b8;
|
|
undefined4 local_3b4;
|
|
undefined4 uStack_3b0;
|
|
undefined4 uStack_3ac;
|
|
undefined4 local_3a8;
|
|
undefined4 local_3a4;
|
|
undefined1 auStack_208 [56];
|
|
undefined4 local_1d0;
|
|
|
|
pcVar5 = *(code **)(param_1 + 0xc);
|
|
uVar6 = *(undefined4 *)(param_1 + 0x18);
|
|
local_3e4 = *(undefined4 *)(param_2 + 4);
|
|
uStack_3e0 = *(undefined4 *)(param_2 + 8);
|
|
uStack_3dc = *(undefined4 *)(param_2 + 0xc);
|
|
uStack_3d8 = *(undefined4 *)(param_2 + 0x10);
|
|
local_3d4 = *(undefined4 *)(param_2 + 0x14);
|
|
uStack_3d0 = *(undefined4 *)(param_2 + 0x18);
|
|
uStack_3cc = *(undefined4 *)(param_2 + 0x1c);
|
|
uStack_3c8 = *(undefined4 *)(param_2 + 0x20);
|
|
local_3c4 = *(undefined4 *)(param_2 + 0x24);
|
|
uStack_3c0 = *(undefined4 *)(param_2 + 0x28);
|
|
uStack_3bc = *(undefined4 *)(param_2 + 0x2c);
|
|
uStack_3b8 = *(undefined4 *)(param_2 + 0x30);
|
|
local_3b4 = *(undefined4 *)(param_2 + 0x34);
|
|
uStack_3b0 = *(undefined4 *)(param_2 + 0x38);
|
|
uStack_3ac = *(undefined4 *)(param_2 + 0x3c);
|
|
local_3a8 = *(undefined4 *)(param_2 + 0x40);
|
|
iVar4 = 0;
|
|
local_3e8 = 0;
|
|
do {
|
|
iVar1 = FUN_00057ed4(param_1,local_3a8);
|
|
if (param_3 == 0) {
|
|
uVar3 = 9;
|
|
}
|
|
else {
|
|
uVar3 = 10;
|
|
}
|
|
if (iVar1 == 0) {
|
|
*(undefined4 *)(param_1 + 0x14) = local_3a8;
|
|
memcpy(auStack_208,&local_3e8,0x1e0);
|
|
iVar4 = (**(code **)(param_1 + 0x10))(uVar3,param_1,auStack_208);
|
|
local_3a4 = local_1d0;
|
|
}
|
|
else {
|
|
uVar3 = uVar3 | 0x10;
|
|
local_3a4 = uStack_3b0;
|
|
}
|
|
iVar2 = (*pcVar5)(1,uVar3,param_1,param_1,&local_3e8,uVar6);
|
|
if (iVar2 != 0) {
|
|
return 9;
|
|
}
|
|
if (iVar1 != 0) {
|
|
return iVar1;
|
|
}
|
|
memcpy(&local_3e8,auStack_208,0x1e0);
|
|
param_3 = 0;
|
|
} while (iVar4 == 8);
|
|
if (iVar4 == 7) {
|
|
FUN_00058060(0,local_3a8);
|
|
restore_core_regs(&local_3e4);
|
|
}
|
|
return 9;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_GetCFA @ 000581f0
|
|
|
|
undefined4 _Unwind_GetCFA(int param_1)
|
|
|
|
{
|
|
return *(undefined4 *)(param_1 + 0x44);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_RaiseException @ 000581f8
|
|
|
|
undefined4 __gnu_Unwind_RaiseException(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 local_1f8;
|
|
undefined4 local_1f4;
|
|
undefined4 uStack_1f0;
|
|
undefined4 uStack_1ec;
|
|
undefined4 uStack_1e8;
|
|
undefined4 local_1e4;
|
|
undefined4 uStack_1e0;
|
|
undefined4 uStack_1dc;
|
|
undefined4 uStack_1d8;
|
|
undefined4 local_1d4;
|
|
undefined4 uStack_1d0;
|
|
undefined4 uStack_1cc;
|
|
undefined4 uStack_1c8;
|
|
undefined4 local_1c4;
|
|
undefined4 uStack_1c0;
|
|
undefined4 uStack_1bc;
|
|
undefined4 local_1b8;
|
|
|
|
*(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_2 + 0x3c);
|
|
local_1f4 = *(undefined4 *)(param_2 + 4);
|
|
uStack_1f0 = *(undefined4 *)(param_2 + 8);
|
|
uStack_1ec = *(undefined4 *)(param_2 + 0xc);
|
|
uStack_1e8 = *(undefined4 *)(param_2 + 0x10);
|
|
local_1e4 = *(undefined4 *)(param_2 + 0x14);
|
|
uStack_1e0 = *(undefined4 *)(param_2 + 0x18);
|
|
uStack_1dc = *(undefined4 *)(param_2 + 0x1c);
|
|
uStack_1d8 = *(undefined4 *)(param_2 + 0x20);
|
|
local_1d4 = *(undefined4 *)(param_2 + 0x24);
|
|
uStack_1d0 = *(undefined4 *)(param_2 + 0x28);
|
|
uStack_1cc = *(undefined4 *)(param_2 + 0x2c);
|
|
uStack_1c8 = *(undefined4 *)(param_2 + 0x30);
|
|
local_1c4 = *(undefined4 *)(param_2 + 0x34);
|
|
uStack_1c0 = *(undefined4 *)(param_2 + 0x38);
|
|
uStack_1bc = *(undefined4 *)(param_2 + 0x3c);
|
|
local_1b8 = *(undefined4 *)(param_2 + 0x40);
|
|
local_1f8 = 0xffffffff;
|
|
do {
|
|
iVar1 = FUN_00057ed4(param_1,local_1b8);
|
|
if (iVar1 != 0) {
|
|
return 9;
|
|
}
|
|
iVar1 = (**(code **)(param_1 + 0x10))(0,param_1,&local_1f8);
|
|
} while (iVar1 == 8);
|
|
FUN_00057fd8(&local_1f8);
|
|
if (iVar1 == 6) {
|
|
FUN_00058064(param_1,param_2);
|
|
}
|
|
return 9;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_ForcedUnwind @ 0005829c
|
|
|
|
void __gnu_Unwind_ForcedUnwind(int param_1,undefined4 param_2,undefined4 param_3,int param_4)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
*(undefined4 *)(param_1 + 0x18) = param_3;
|
|
uVar1 = *(undefined4 *)(param_4 + 0x3c);
|
|
*(undefined4 *)(param_1 + 0xc) = param_2;
|
|
*(undefined4 *)(param_4 + 0x40) = uVar1;
|
|
FUN_000580c8(param_1,param_4,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Resume @ 000582b8
|
|
|
|
void __gnu_Unwind_Resume(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = *(int *)(param_1 + 0xc);
|
|
*(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_1 + 0x14);
|
|
if (iVar1 == 0) {
|
|
iVar1 = (**(code **)(param_1 + 0x10))(2,param_1,param_2);
|
|
if (iVar1 != 7) {
|
|
if (iVar1 != 8) goto LAB_00058328;
|
|
FUN_00058064(param_1,param_2);
|
|
}
|
|
FUN_00058060(0,*(undefined4 *)(param_2 + 0x40));
|
|
restore_core_regs(param_2 + 4);
|
|
}
|
|
else {
|
|
FUN_000580c8(param_1,param_2,1);
|
|
}
|
|
LAB_00058328:
|
|
/* WARNING: Subroutine does not return */
|
|
abort();
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Resume_or_Rethrow @ 0005832c
|
|
|
|
void __gnu_Unwind_Resume_or_Rethrow(int param_1,int param_2)
|
|
|
|
{
|
|
if (*(int *)(param_1 + 0xc) == 0) {
|
|
__gnu_Unwind_RaiseException();
|
|
return;
|
|
}
|
|
*(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_2 + 0x3c);
|
|
FUN_000580c8(param_1,param_2,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_Complete @ 0005834c
|
|
|
|
void _Unwind_Complete(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_DeleteException @ 00058350
|
|
|
|
void _Unwind_DeleteException(int param_1)
|
|
|
|
{
|
|
if (*(code **)(param_1 + 8) == (code *)0x0) {
|
|
return;
|
|
}
|
|
/* WARNING: Could not recover jumptable at 0x00058364. Too many branches */
|
|
/* WARNING: Treating indirect jump as call */
|
|
(**(code **)(param_1 + 8))(1,param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_VRS_Get @ 00058368
|
|
|
|
undefined4
|
|
_Unwind_VRS_Get(int param_1,undefined4 param_2,uint param_3,int param_4,undefined4 *param_5)
|
|
|
|
{
|
|
bool bVar1;
|
|
|
|
switch(param_2) {
|
|
case 0:
|
|
bVar1 = param_3 == 0xf;
|
|
if (param_3 < 0x10) {
|
|
bVar1 = param_4 == 0;
|
|
}
|
|
if (bVar1) {
|
|
*param_5 = *(undefined4 *)(param_1 + param_3 * 4 + 4);
|
|
return 0;
|
|
}
|
|
break;
|
|
case 1:
|
|
return 1;
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
return 1;
|
|
case 4:
|
|
return 1;
|
|
}
|
|
return 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_000583c4 @ 000583c4
|
|
|
|
undefined4 FUN_000583c4(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined4 local_c;
|
|
|
|
local_c = param_4;
|
|
_Unwind_VRS_Get(param_1,0,param_2,0,&local_c,param_2,param_3);
|
|
return local_c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_VRS_Set @ 000583ec
|
|
|
|
undefined4
|
|
_Unwind_VRS_Set(int param_1,undefined4 param_2,uint param_3,int param_4,undefined4 *param_5)
|
|
|
|
{
|
|
bool bVar1;
|
|
|
|
switch(param_2) {
|
|
case 0:
|
|
bVar1 = param_3 == 0xf;
|
|
if (param_3 < 0x10) {
|
|
bVar1 = param_4 == 0;
|
|
}
|
|
if (bVar1) {
|
|
*(undefined4 *)(param_1 + param_3 * 4 + 4) = *param_5;
|
|
return 0;
|
|
}
|
|
break;
|
|
case 1:
|
|
return 1;
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
return 1;
|
|
case 4:
|
|
return 1;
|
|
}
|
|
return 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00058448 @ 00058448
|
|
|
|
void FUN_00058448(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
{
|
|
undefined4 local_c;
|
|
|
|
local_c = param_3;
|
|
_Unwind_VRS_Set(param_1,0,param_2,0,&local_c,param_2,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Backtrace @ 00058474
|
|
|
|
int __gnu_Unwind_Backtrace(code *param_1,undefined4 param_2,int param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined1 auStack_250 [16];
|
|
code *local_240;
|
|
undefined4 local_1f8;
|
|
undefined4 local_1f4;
|
|
undefined4 uStack_1f0;
|
|
undefined4 uStack_1ec;
|
|
undefined4 uStack_1e8;
|
|
undefined4 local_1e4;
|
|
undefined4 uStack_1e0;
|
|
undefined4 uStack_1dc;
|
|
undefined4 uStack_1d8;
|
|
undefined4 local_1d4;
|
|
undefined4 uStack_1d0;
|
|
undefined4 uStack_1cc;
|
|
undefined4 uStack_1c8;
|
|
undefined4 local_1c4;
|
|
undefined4 uStack_1c0;
|
|
undefined4 uStack_1bc;
|
|
undefined4 local_1b8;
|
|
|
|
*(undefined4 *)(param_3 + 0x40) = *(undefined4 *)(param_3 + 0x3c);
|
|
local_1f4 = *(undefined4 *)(param_3 + 4);
|
|
uStack_1f0 = *(undefined4 *)(param_3 + 8);
|
|
uStack_1ec = *(undefined4 *)(param_3 + 0xc);
|
|
uStack_1e8 = *(undefined4 *)(param_3 + 0x10);
|
|
local_1e4 = *(undefined4 *)(param_3 + 0x14);
|
|
uStack_1e0 = *(undefined4 *)(param_3 + 0x18);
|
|
uStack_1dc = *(undefined4 *)(param_3 + 0x1c);
|
|
uStack_1d8 = *(undefined4 *)(param_3 + 0x20);
|
|
local_1d4 = *(undefined4 *)(param_3 + 0x24);
|
|
uStack_1d0 = *(undefined4 *)(param_3 + 0x28);
|
|
uStack_1cc = *(undefined4 *)(param_3 + 0x2c);
|
|
uStack_1c8 = *(undefined4 *)(param_3 + 0x30);
|
|
local_1c4 = *(undefined4 *)(param_3 + 0x34);
|
|
uStack_1c0 = *(undefined4 *)(param_3 + 0x38);
|
|
uStack_1bc = *(undefined4 *)(param_3 + 0x3c);
|
|
local_1b8 = *(undefined4 *)(param_3 + 0x40);
|
|
local_1f8 = 0xffffffff;
|
|
do {
|
|
iVar1 = FUN_00057ed4(auStack_250,local_1b8);
|
|
if (iVar1 != 0) {
|
|
LAB_000584d8:
|
|
iVar1 = 9;
|
|
break;
|
|
}
|
|
FUN_00058448(&local_1f8,0xc,auStack_250);
|
|
iVar1 = (*param_1)(&local_1f8,param_2);
|
|
if (iVar1 != 0) goto LAB_000584d8;
|
|
iVar1 = (*local_240)(8,auStack_250,&local_1f8);
|
|
} while ((iVar1 - 5U & 0xfffffffb) != 0);
|
|
FUN_00057fd8(&local_1f8);
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_unwind_cpp_pr0 @ 0005892c
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x000585fc) */
|
|
/* WARNING: Removing unreachable block (ram,0x00058584) */
|
|
/* WARNING: Removing unreachable block (ram,0x0005858c) */
|
|
/* WARNING: Removing unreachable block (ram,0x000585e4) */
|
|
/* WARNING: Removing unreachable block (ram,0x00058894) */
|
|
|
|
undefined4 __aeabi_unwind_cpp_pr0(uint param_1,code *param_2,undefined4 param_3)
|
|
|
|
{
|
|
ushort uVar1;
|
|
bool bVar2;
|
|
bool bVar3;
|
|
uint uVar4;
|
|
code *pcVar5;
|
|
undefined4 uVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
uint *puVar9;
|
|
uint uVar10;
|
|
int iVar11;
|
|
uint uVar12;
|
|
uint *puVar13;
|
|
code *pcStack_38;
|
|
int iStack_34;
|
|
uint *puStack_30;
|
|
undefined1 uStack_2c;
|
|
undefined1 uStack_2b;
|
|
|
|
puStack_30 = (uint *)(*(int **)(param_2 + 0x4c) + 1);
|
|
uVar10 = param_1 & 3;
|
|
iStack_34 = **(int **)(param_2 + 0x4c) << 8;
|
|
uStack_2b = 0;
|
|
uStack_2c = 3;
|
|
puVar13 = puStack_30;
|
|
if (uVar10 == 2) {
|
|
puVar13 = *(uint **)(param_2 + 0x38);
|
|
}
|
|
if ((*(uint *)(param_2 + 0x50) & 1) == 0) {
|
|
bVar3 = false;
|
|
LAB_000585d4:
|
|
do {
|
|
while( true ) {
|
|
if (*puVar13 == 0) goto LAB_0005888c;
|
|
uVar1 = *(ushort *)((int)puVar13 + 2);
|
|
uVar8 = *puVar13;
|
|
puVar9 = puVar13 + 1;
|
|
uVar12 = (uVar1 & 0xfffffffe) + *(int *)(param_2 + 0x48);
|
|
uVar4 = FUN_000583c4(param_3,0xf);
|
|
if (uVar4 < uVar12) {
|
|
bVar2 = false;
|
|
}
|
|
else if (uVar4 < uVar12 + ((ushort)uVar8 & 0xfffffffe)) {
|
|
bVar2 = true;
|
|
}
|
|
else {
|
|
bVar2 = false;
|
|
}
|
|
uVar8 = (ushort)uVar8 & 1 | (uVar1 & 1) << 1;
|
|
if (uVar8 != 1) break;
|
|
if (uVar10 == 0) {
|
|
if (bVar2) {
|
|
uVar8 = *puVar9;
|
|
if (puVar13[2] == 0xfffffffe) {
|
|
return 9;
|
|
}
|
|
pcStack_38 = param_2 + 0x58;
|
|
iVar7 = 1;
|
|
if (puVar13[2] == 0xffffffff) {
|
|
LAB_000586fc:
|
|
iVar11 = FUN_000583c4(param_3,0xd);
|
|
pcVar5 = param_2;
|
|
if (iVar7 != 2) {
|
|
pcVar5 = pcStack_38;
|
|
}
|
|
*(int *)(param_2 + 0x20) = iVar11;
|
|
if (iVar7 == 2) {
|
|
pcVar5 = pcVar5 + 0x2c;
|
|
*(code **)pcVar5 = pcStack_38;
|
|
}
|
|
LAB_00058914:
|
|
*(code **)(param_2 + 0x24) = pcVar5;
|
|
*(uint **)(param_2 + 0x28) = puVar9;
|
|
return 6;
|
|
}
|
|
uVar6 = FUN_00058044(puVar13 + 2);
|
|
iVar7 = __cxa_type_match(param_2,uVar6,uVar8 >> 0x1f);
|
|
if (iVar7 != 0) goto LAB_000586fc;
|
|
}
|
|
}
|
|
else {
|
|
iVar11 = *(int *)(param_2 + 0x20);
|
|
iVar7 = FUN_000583c4(param_3,0xd);
|
|
if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) {
|
|
uVar6 = FUN_00057dc8(puVar9);
|
|
FUN_00058448(param_3,0xf,uVar6);
|
|
LAB_0005885c:
|
|
uVar6 = 0;
|
|
pcVar5 = param_2;
|
|
goto LAB_000588ec;
|
|
}
|
|
}
|
|
puVar13 = puVar13 + 3;
|
|
}
|
|
if (uVar8 != 0) {
|
|
if (uVar8 != 2) {
|
|
return 9;
|
|
}
|
|
uVar8 = *puVar9 & 0x7fffffff;
|
|
if (uVar10 == 0) {
|
|
if (bVar2) {
|
|
uVar4 = (param_1 >> 3 ^ 1) & 1;
|
|
if (uVar8 == 0) {
|
|
uVar4 = 1;
|
|
}
|
|
if (uVar4 != 0) {
|
|
uVar4 = 0;
|
|
do {
|
|
if (uVar4 == uVar8) {
|
|
iVar7 = FUN_000583c4(param_3,0xd);
|
|
*(int *)(param_2 + 0x20) = iVar7;
|
|
pcVar5 = pcStack_38;
|
|
goto LAB_00058914;
|
|
}
|
|
uVar4 = uVar4 + 1;
|
|
pcStack_38 = param_2 + 0x58;
|
|
uVar6 = FUN_00058044(puVar9 + uVar4);
|
|
iVar7 = __cxa_type_match(param_2,uVar6,0,&pcStack_38);
|
|
} while (iVar7 == 0);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
iVar11 = *(int *)(param_2 + 0x20);
|
|
iVar7 = FUN_000583c4(param_3,0xd);
|
|
if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) {
|
|
*(int *)(param_2 + 0x30) = 4;
|
|
*(uint *)(param_2 + 0x28) = uVar8;
|
|
*(int *)(param_2 + 0x2c) = 0;
|
|
*(uint **)(param_2 + 0x34) = puVar13 + 2;
|
|
if ((int)*puVar9 < 0) {
|
|
uVar6 = FUN_00057dc8(puVar9 + uVar8 + 1);
|
|
FUN_00058448(param_3,0xf,uVar6);
|
|
goto LAB_0005885c;
|
|
}
|
|
bVar3 = true;
|
|
}
|
|
}
|
|
if ((int)*puVar9 < 0) {
|
|
puVar9 = puVar13 + 2;
|
|
}
|
|
puVar13 = puVar9 + uVar8 + 1;
|
|
goto LAB_000585d4;
|
|
}
|
|
if (uVar10 == 0) {
|
|
bVar2 = false;
|
|
}
|
|
puVar13 = puVar13 + 2;
|
|
} while (!bVar2);
|
|
pcVar5 = (code *)FUN_00057dc8(puVar9);
|
|
*(uint **)(param_2 + 0x38) = puVar13;
|
|
iVar7 = __cxa_begin_cleanup(param_2);
|
|
if (iVar7 == 0) {
|
|
return 9;
|
|
}
|
|
uVar6 = 0xf;
|
|
}
|
|
else {
|
|
bVar3 = false;
|
|
LAB_0005888c:
|
|
iVar7 = __gnu_unwind_execute(param_3,&iStack_34);
|
|
if (iVar7 != 0) {
|
|
return 9;
|
|
}
|
|
if (!bVar3) {
|
|
return 8;
|
|
}
|
|
uVar6 = FUN_000583c4(param_3,0xf);
|
|
FUN_00058448(param_3,0xe,uVar6);
|
|
pcVar5 = __cxa_call_unexpected;
|
|
uVar6 = 0xf;
|
|
}
|
|
LAB_000588ec:
|
|
FUN_00058448(param_3,uVar6,pcVar5);
|
|
return 7;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_unwind_cpp_pr1 @ 00058934
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x000585fc) */
|
|
/* WARNING: Removing unreachable block (ram,0x0005856c) */
|
|
/* WARNING: Removing unreachable block (ram,0x000585e4) */
|
|
/* WARNING: Removing unreachable block (ram,0x00058894) */
|
|
|
|
undefined4 __aeabi_unwind_cpp_pr1(uint param_1,code *param_2,undefined4 param_3)
|
|
|
|
{
|
|
ushort uVar1;
|
|
bool bVar2;
|
|
bool bVar3;
|
|
uint uVar4;
|
|
code *pcVar5;
|
|
undefined4 uVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
uint *puVar9;
|
|
uint uVar10;
|
|
int iVar11;
|
|
uint uVar12;
|
|
uint *puVar13;
|
|
code *pcStack_38;
|
|
int iStack_34;
|
|
uint *puStack_30;
|
|
undefined1 uStack_2c;
|
|
undefined1 uStack_2b;
|
|
|
|
uVar8 = **(uint **)(param_2 + 0x4c);
|
|
puStack_30 = *(uint **)(param_2 + 0x4c) + 1;
|
|
uVar10 = param_1 & 3;
|
|
uStack_2b = (undefined1)(uVar8 >> 0x10);
|
|
iStack_34 = uVar8 << 0x10;
|
|
puVar13 = puStack_30 + (uVar8 >> 0x10 & 0xff);
|
|
uStack_2c = 2;
|
|
if (uVar10 == 2) {
|
|
puVar13 = *(uint **)(param_2 + 0x38);
|
|
}
|
|
if ((*(uint *)(param_2 + 0x50) & 1) == 0) {
|
|
bVar3 = false;
|
|
LAB_000585d4:
|
|
do {
|
|
while( true ) {
|
|
if (*puVar13 == 0) goto LAB_0005888c;
|
|
uVar1 = *(ushort *)((int)puVar13 + 2);
|
|
uVar8 = *puVar13;
|
|
puVar9 = puVar13 + 1;
|
|
uVar12 = (uVar1 & 0xfffffffe) + *(int *)(param_2 + 0x48);
|
|
uVar4 = FUN_000583c4(param_3,0xf);
|
|
if (uVar4 < uVar12) {
|
|
bVar2 = false;
|
|
}
|
|
else if (uVar4 < uVar12 + ((ushort)uVar8 & 0xfffffffe)) {
|
|
bVar2 = true;
|
|
}
|
|
else {
|
|
bVar2 = false;
|
|
}
|
|
uVar8 = (ushort)uVar8 & 1 | (uVar1 & 1) << 1;
|
|
if (uVar8 != 1) break;
|
|
if (uVar10 == 0) {
|
|
if (bVar2) {
|
|
uVar8 = *puVar9;
|
|
if (puVar13[2] == 0xfffffffe) {
|
|
return 9;
|
|
}
|
|
pcStack_38 = param_2 + 0x58;
|
|
iVar7 = 1;
|
|
if (puVar13[2] == 0xffffffff) {
|
|
LAB_000586fc:
|
|
iVar11 = FUN_000583c4(param_3,0xd);
|
|
pcVar5 = param_2;
|
|
if (iVar7 != 2) {
|
|
pcVar5 = pcStack_38;
|
|
}
|
|
*(int *)(param_2 + 0x20) = iVar11;
|
|
if (iVar7 == 2) {
|
|
pcVar5 = pcVar5 + 0x2c;
|
|
*(code **)pcVar5 = pcStack_38;
|
|
}
|
|
LAB_00058914:
|
|
*(code **)(param_2 + 0x24) = pcVar5;
|
|
*(uint **)(param_2 + 0x28) = puVar9;
|
|
return 6;
|
|
}
|
|
uVar6 = FUN_00058044(puVar13 + 2);
|
|
iVar7 = __cxa_type_match(param_2,uVar6,uVar8 >> 0x1f);
|
|
if (iVar7 != 0) goto LAB_000586fc;
|
|
}
|
|
}
|
|
else {
|
|
iVar11 = *(int *)(param_2 + 0x20);
|
|
iVar7 = FUN_000583c4(param_3,0xd);
|
|
if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) {
|
|
uVar6 = FUN_00057dc8(puVar9);
|
|
FUN_00058448(param_3,0xf,uVar6);
|
|
LAB_0005885c:
|
|
uVar6 = 0;
|
|
pcVar5 = param_2;
|
|
goto LAB_000588ec;
|
|
}
|
|
}
|
|
puVar13 = puVar13 + 3;
|
|
}
|
|
if (uVar8 != 0) {
|
|
if (uVar8 != 2) {
|
|
return 9;
|
|
}
|
|
uVar8 = *puVar9 & 0x7fffffff;
|
|
if (uVar10 == 0) {
|
|
if (bVar2) {
|
|
uVar4 = (param_1 >> 3 ^ 1) & 1;
|
|
if (uVar8 == 0) {
|
|
uVar4 = 1;
|
|
}
|
|
if (uVar4 != 0) {
|
|
uVar4 = 0;
|
|
do {
|
|
if (uVar4 == uVar8) {
|
|
iVar7 = FUN_000583c4(param_3,0xd);
|
|
*(int *)(param_2 + 0x20) = iVar7;
|
|
pcVar5 = pcStack_38;
|
|
goto LAB_00058914;
|
|
}
|
|
uVar4 = uVar4 + 1;
|
|
pcStack_38 = param_2 + 0x58;
|
|
uVar6 = FUN_00058044(puVar9 + uVar4);
|
|
iVar7 = __cxa_type_match(param_2,uVar6,0,&pcStack_38);
|
|
} while (iVar7 == 0);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
iVar11 = *(int *)(param_2 + 0x20);
|
|
iVar7 = FUN_000583c4(param_3,0xd);
|
|
if ((iVar11 == iVar7) && (puVar9 == *(uint **)(param_2 + 0x28))) {
|
|
*(int *)(param_2 + 0x30) = 4;
|
|
*(uint *)(param_2 + 0x28) = uVar8;
|
|
*(int *)(param_2 + 0x2c) = 0;
|
|
*(uint **)(param_2 + 0x34) = puVar13 + 2;
|
|
if ((int)*puVar9 < 0) {
|
|
uVar6 = FUN_00057dc8(puVar9 + uVar8 + 1);
|
|
FUN_00058448(param_3,0xf,uVar6);
|
|
goto LAB_0005885c;
|
|
}
|
|
bVar3 = true;
|
|
}
|
|
}
|
|
if ((int)*puVar9 < 0) {
|
|
puVar9 = puVar13 + 2;
|
|
}
|
|
puVar13 = puVar9 + uVar8 + 1;
|
|
goto LAB_000585d4;
|
|
}
|
|
if (uVar10 == 0) {
|
|
bVar2 = false;
|
|
}
|
|
puVar13 = puVar13 + 2;
|
|
} while (!bVar2);
|
|
pcVar5 = (code *)FUN_00057dc8(puVar9);
|
|
*(uint **)(param_2 + 0x38) = puVar13;
|
|
iVar7 = __cxa_begin_cleanup(param_2);
|
|
if (iVar7 == 0) {
|
|
return 9;
|
|
}
|
|
uVar6 = 0xf;
|
|
}
|
|
else {
|
|
bVar3 = false;
|
|
LAB_0005888c:
|
|
iVar7 = __gnu_unwind_execute(param_3,&iStack_34);
|
|
if (iVar7 != 0) {
|
|
return 9;
|
|
}
|
|
if (!bVar3) {
|
|
return 8;
|
|
}
|
|
uVar6 = FUN_000583c4(param_3,0xf);
|
|
FUN_00058448(param_3,0xe,uVar6);
|
|
pcVar5 = __cxa_call_unexpected;
|
|
uVar6 = 0xf;
|
|
}
|
|
LAB_000588ec:
|
|
FUN_00058448(param_3,uVar6,pcVar5);
|
|
return 7;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __aeabi_unwind_cpp_pr2 @ 0005893c
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00058600) */
|
|
/* WARNING: Removing unreachable block (ram,0x0005856c) */
|
|
/* WARNING: Removing unreachable block (ram,0x000585e8) */
|
|
/* WARNING: Removing unreachable block (ram,0x00058604) */
|
|
/* WARNING: Removing unreachable block (ram,0x00058894) */
|
|
|
|
undefined4 __aeabi_unwind_cpp_pr2(uint param_1,code *param_2,undefined4 param_3)
|
|
|
|
{
|
|
bool bVar1;
|
|
bool bVar2;
|
|
uint uVar3;
|
|
code *pcVar4;
|
|
undefined4 uVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint *puVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
int iVar11;
|
|
uint uVar12;
|
|
uint *puVar13;
|
|
code *local_38;
|
|
int local_34;
|
|
uint *local_30;
|
|
undefined1 local_2c;
|
|
undefined1 local_2b;
|
|
|
|
uVar7 = **(uint **)(param_2 + 0x4c);
|
|
local_30 = *(uint **)(param_2 + 0x4c) + 1;
|
|
uVar9 = param_1 & 3;
|
|
local_2b = (undefined1)(uVar7 >> 0x10);
|
|
local_34 = uVar7 << 0x10;
|
|
puVar13 = local_30 + (uVar7 >> 0x10 & 0xff);
|
|
local_2c = 2;
|
|
if (uVar9 == 2) {
|
|
puVar13 = *(uint **)(param_2 + 0x38);
|
|
}
|
|
if ((*(uint *)(param_2 + 0x50) & 1) == 0) {
|
|
bVar2 = false;
|
|
LAB_000585d4:
|
|
do {
|
|
while( true ) {
|
|
uVar7 = *puVar13;
|
|
if (uVar7 == 0) goto LAB_0005888c;
|
|
uVar10 = puVar13[1];
|
|
puVar8 = puVar13 + 2;
|
|
uVar12 = (uVar10 & 0xfffffffe) + *(int *)(param_2 + 0x48);
|
|
uVar3 = FUN_000583c4(param_3,0xf);
|
|
if (uVar3 < uVar12) {
|
|
bVar1 = false;
|
|
}
|
|
else if (uVar3 < uVar12 + (uVar7 & 0xfffffffe)) {
|
|
bVar1 = true;
|
|
}
|
|
else {
|
|
bVar1 = false;
|
|
}
|
|
uVar7 = uVar7 & 1 | (uVar10 & 1) << 1;
|
|
if (uVar7 != 1) break;
|
|
if (uVar9 == 0) {
|
|
if (bVar1) {
|
|
uVar7 = *puVar8;
|
|
if (puVar13[3] == 0xfffffffe) {
|
|
return 9;
|
|
}
|
|
local_38 = param_2 + 0x58;
|
|
iVar6 = 1;
|
|
if (puVar13[3] == 0xffffffff) {
|
|
LAB_000586fc:
|
|
iVar11 = FUN_000583c4(param_3,0xd);
|
|
pcVar4 = param_2;
|
|
if (iVar6 != 2) {
|
|
pcVar4 = local_38;
|
|
}
|
|
*(int *)(param_2 + 0x20) = iVar11;
|
|
if (iVar6 == 2) {
|
|
pcVar4 = pcVar4 + 0x2c;
|
|
*(code **)pcVar4 = local_38;
|
|
}
|
|
LAB_00058914:
|
|
*(code **)(param_2 + 0x24) = pcVar4;
|
|
*(uint **)(param_2 + 0x28) = puVar8;
|
|
return 6;
|
|
}
|
|
uVar5 = FUN_00058044(puVar13 + 3);
|
|
iVar6 = __cxa_type_match(param_2,uVar5,uVar7 >> 0x1f);
|
|
if (iVar6 != 0) goto LAB_000586fc;
|
|
}
|
|
}
|
|
else {
|
|
iVar11 = *(int *)(param_2 + 0x20);
|
|
iVar6 = FUN_000583c4(param_3,0xd);
|
|
if ((iVar11 == iVar6) && (puVar8 == *(uint **)(param_2 + 0x28))) {
|
|
uVar5 = FUN_00057dc8(puVar8);
|
|
FUN_00058448(param_3,0xf,uVar5);
|
|
LAB_0005885c:
|
|
uVar5 = 0;
|
|
pcVar4 = param_2;
|
|
goto LAB_000588ec;
|
|
}
|
|
}
|
|
puVar13 = puVar13 + 4;
|
|
}
|
|
if (uVar7 != 0) {
|
|
if (uVar7 != 2) {
|
|
return 9;
|
|
}
|
|
uVar7 = *puVar8 & 0x7fffffff;
|
|
if (uVar9 == 0) {
|
|
if (bVar1) {
|
|
uVar3 = (param_1 >> 3 ^ 1) & 1;
|
|
if (uVar7 == 0) {
|
|
uVar3 = 1;
|
|
}
|
|
if (uVar3 != 0) {
|
|
uVar3 = 0;
|
|
do {
|
|
if (uVar3 == uVar7) {
|
|
iVar6 = FUN_000583c4(param_3,0xd);
|
|
*(int *)(param_2 + 0x20) = iVar6;
|
|
pcVar4 = local_38;
|
|
goto LAB_00058914;
|
|
}
|
|
uVar3 = uVar3 + 1;
|
|
local_38 = param_2 + 0x58;
|
|
uVar5 = FUN_00058044(puVar8 + uVar3);
|
|
iVar6 = __cxa_type_match(param_2,uVar5,0,&local_38);
|
|
} while (iVar6 == 0);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
iVar11 = *(int *)(param_2 + 0x20);
|
|
iVar6 = FUN_000583c4(param_3,0xd);
|
|
if ((iVar11 == iVar6) && (puVar8 == *(uint **)(param_2 + 0x28))) {
|
|
*(int *)(param_2 + 0x30) = 4;
|
|
*(uint *)(param_2 + 0x28) = uVar7;
|
|
*(int *)(param_2 + 0x2c) = 0;
|
|
*(uint **)(param_2 + 0x34) = puVar13 + 3;
|
|
if ((int)*puVar8 < 0) {
|
|
uVar5 = FUN_00057dc8(puVar8 + uVar7 + 1);
|
|
FUN_00058448(param_3,0xf,uVar5);
|
|
goto LAB_0005885c;
|
|
}
|
|
bVar2 = true;
|
|
}
|
|
}
|
|
if ((int)*puVar8 < 0) {
|
|
puVar8 = puVar13 + 3;
|
|
}
|
|
puVar13 = puVar8 + uVar7 + 1;
|
|
goto LAB_000585d4;
|
|
}
|
|
if (uVar9 == 0) {
|
|
bVar1 = false;
|
|
}
|
|
puVar13 = puVar13 + 3;
|
|
} while (!bVar1);
|
|
pcVar4 = (code *)FUN_00057dc8(puVar8);
|
|
*(uint **)(param_2 + 0x38) = puVar13;
|
|
iVar6 = __cxa_begin_cleanup(param_2);
|
|
if (iVar6 == 0) {
|
|
return 9;
|
|
}
|
|
uVar5 = 0xf;
|
|
}
|
|
else {
|
|
bVar2 = false;
|
|
LAB_0005888c:
|
|
iVar6 = __gnu_unwind_execute(param_3,&local_34);
|
|
if (iVar6 != 0) {
|
|
return 9;
|
|
}
|
|
if (!bVar2) {
|
|
return 8;
|
|
}
|
|
uVar5 = FUN_000583c4(param_3,0xf);
|
|
FUN_00058448(param_3,0xe,uVar5);
|
|
pcVar4 = __cxa_call_unexpected;
|
|
uVar5 = 0xf;
|
|
}
|
|
LAB_000588ec:
|
|
FUN_00058448(param_3,uVar5,pcVar4);
|
|
return 7;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_VRS_Pop @ 00058944
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
undefined4 _Unwind_VRS_Pop(uint *param_1,undefined4 param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
uint *puVar1;
|
|
uint uVar2;
|
|
undefined4 *puVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
undefined4 *puVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
undefined4 *puVar9;
|
|
uint uVar10;
|
|
bool bVar11;
|
|
undefined4 auStack_1ac [33];
|
|
undefined1 auStack_128 [124];
|
|
undefined4 auStack_ac [36];
|
|
|
|
switch(param_2) {
|
|
case 0:
|
|
if (param_4 != 0) {
|
|
return 2;
|
|
}
|
|
iVar4 = 1;
|
|
puVar1 = (uint *)param_1[0xe];
|
|
do {
|
|
bVar11 = (param_3 & 0xffff & 1 << (iVar4 - 1U & 0xff)) != 0;
|
|
if (bVar11) {
|
|
param_1[iVar4] = *puVar1;
|
|
}
|
|
iVar4 = iVar4 + 1;
|
|
if (bVar11) {
|
|
puVar1 = puVar1 + 1;
|
|
}
|
|
} while (iVar4 != 0x11);
|
|
if ((param_3 & 0x2000) != 0) {
|
|
return 0;
|
|
}
|
|
param_1[0xe] = (uint)puVar1;
|
|
return 0;
|
|
case 1:
|
|
if ((param_4 & 0xfffffffb) != 1) {
|
|
return 2;
|
|
}
|
|
uVar5 = param_3 >> 0x10;
|
|
param_3 = param_3 & 0xffff;
|
|
uVar7 = param_3 + uVar5;
|
|
if (param_4 == 1) {
|
|
if (0x10 < uVar7) {
|
|
return 2;
|
|
}
|
|
if (0xf < uVar5) {
|
|
return 2;
|
|
}
|
|
uVar8 = 0;
|
|
uVar7 = 1;
|
|
}
|
|
else {
|
|
if (0x20 < uVar7) {
|
|
return 2;
|
|
}
|
|
uVar8 = param_3;
|
|
if (uVar5 < 0x10) {
|
|
if (uVar7 < 0x11) {
|
|
uVar8 = 0;
|
|
uVar7 = uVar8;
|
|
goto LAB_00058a18;
|
|
}
|
|
uVar8 = uVar7 - 0x10;
|
|
}
|
|
uVar7 = 0;
|
|
}
|
|
LAB_00058a18:
|
|
uVar10 = uVar8;
|
|
if (uVar8 != 0) {
|
|
uVar10 = 1;
|
|
}
|
|
if (param_4 != 5 && uVar8 != 0) {
|
|
return 2;
|
|
}
|
|
if ((uVar5 < 0x10) && (uVar2 = *param_1, (uVar2 & 1) != 0)) {
|
|
*param_1 = uVar2 & 0xfffffffe;
|
|
if (param_4 != 5) {
|
|
*param_1 = uVar2 & 0xfffffffc;
|
|
__gnu_Unwind_Save_VFP(param_1 + 0x12);
|
|
goto LAB_00058a80;
|
|
}
|
|
*param_1 = uVar2 & 0xfffffffe | 2;
|
|
__gnu_Unwind_Save_VFP_D();
|
|
if (uVar10 != 0) goto LAB_00058a88;
|
|
LAB_00058a68:
|
|
__gnu_Unwind_Save_VFP_D(auStack_ac + 1);
|
|
LAB_00058ab4:
|
|
if (uVar10 == 0) goto LAB_00058ac8;
|
|
__gnu_Unwind_Save_VFP_D_16_to_31(auStack_128);
|
|
}
|
|
else {
|
|
LAB_00058a80:
|
|
if (uVar10 == 0) {
|
|
if (uVar7 != 0) {
|
|
__gnu_Unwind_Save_VFP(auStack_ac + 1);
|
|
goto LAB_00058ac8;
|
|
}
|
|
if (0xf < uVar5) goto LAB_00058ac8;
|
|
goto LAB_00058a68;
|
|
}
|
|
LAB_00058a88:
|
|
if ((*param_1 & 4) != 0) {
|
|
*param_1 = *param_1 & 0xfffffffb;
|
|
__gnu_Unwind_Save_VFP_D_16_to_31(param_1 + 0x34);
|
|
}
|
|
if (uVar7 == 0) {
|
|
if (uVar5 < 0x10) goto LAB_00058a68;
|
|
goto LAB_00058ab4;
|
|
}
|
|
__gnu_Unwind_Save_VFP(auStack_ac + 1);
|
|
}
|
|
param_3 = 0x10 - uVar5;
|
|
LAB_00058ac8:
|
|
puVar6 = (undefined4 *)param_1[0xe];
|
|
if (0 < (int)param_3) {
|
|
for (iVar4 = 0; iVar4 != param_3 * 2; iVar4 = iVar4 + 1) {
|
|
auStack_ac[uVar5 * 2 + iVar4 + 1U] = puVar6[iVar4];
|
|
}
|
|
puVar6 = puVar6 + iVar4;
|
|
}
|
|
if (uVar10 != 0) {
|
|
uVar2 = uVar5;
|
|
if (uVar5 < 0x10) {
|
|
uVar2 = 0x10;
|
|
}
|
|
puVar3 = auStack_1ac + uVar2 * 2;
|
|
puVar9 = puVar6 + uVar8 * 2;
|
|
for (; puVar6 != puVar9; puVar6 = puVar6 + 1) {
|
|
puVar3 = puVar3 + 1;
|
|
*puVar3 = *puVar6;
|
|
}
|
|
}
|
|
if (uVar7 != 0) {
|
|
puVar6 = puVar6 + 1;
|
|
}
|
|
param_1[0xe] = (uint)puVar6;
|
|
if (uVar7 == 0) {
|
|
if (uVar5 < 0x10) {
|
|
__gnu_Unwind_Restore_VFP_D(auStack_ac + 1);
|
|
}
|
|
if (uVar10 != 0) {
|
|
__gnu_Unwind_Restore_VFP_D_16_to_31(auStack_128);
|
|
}
|
|
}
|
|
else {
|
|
__gnu_Unwind_Restore_VFP(auStack_ac + 1);
|
|
}
|
|
return 0;
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
if (param_4 == 3) {
|
|
if ((param_3 & 0xffff) + (param_3 >> 0x10) < 0x11) {
|
|
if ((*param_1 & 8) != 0) {
|
|
*param_1 = *param_1 & 0xfffffff7;
|
|
__gnu_Unwind_Save_WMMXD(param_1 + 0x54);
|
|
}
|
|
__gnu_Unwind_Save_WMMXD(auStack_ac + 1);
|
|
puVar6 = (undefined4 *)param_1[0xe];
|
|
puVar3 = auStack_ac + (param_3 >> 0x10) * 2;
|
|
puVar9 = puVar6 + (param_3 & 0xffff) * 2;
|
|
for (; puVar6 != puVar9; puVar6 = puVar6 + 1) {
|
|
puVar3 = puVar3 + 1;
|
|
*puVar3 = *puVar6;
|
|
}
|
|
param_1[0xe] = (uint)puVar6;
|
|
__gnu_Unwind_Restore_WMMXD(auStack_ac + 1);
|
|
return 0;
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
bVar11 = param_3 == 0x10;
|
|
if (param_3 < 0x11) {
|
|
bVar11 = param_4 == 0;
|
|
}
|
|
if (bVar11) {
|
|
if ((*param_1 & 0x10) != 0) {
|
|
*param_1 = *param_1 & 0xffffffef;
|
|
__gnu_Unwind_Save_WMMXC(param_1 + 0x74);
|
|
}
|
|
puVar6 = auStack_ac + 1;
|
|
__gnu_Unwind_Save_WMMXC(puVar6);
|
|
puVar3 = (undefined4 *)param_1[0xe];
|
|
uVar5 = 0;
|
|
do {
|
|
bVar11 = (param_3 & 1 << (uVar5 & 0xff)) != 0;
|
|
if (bVar11) {
|
|
puVar6[uVar5] = *puVar3;
|
|
}
|
|
uVar5 = uVar5 + 1;
|
|
if (bVar11) {
|
|
puVar3 = puVar3 + 1;
|
|
}
|
|
} while (uVar5 != 4);
|
|
param_1[0xe] = (uint)puVar3;
|
|
__gnu_Unwind_Restore_WMMXC(puVar6);
|
|
return 0;
|
|
}
|
|
}
|
|
return 2;
|
|
}
|
|
|
|
|
|
|
|
### FUNC restore_core_regs @ 00058cb0
|
|
|
|
undefined8 restore_core_regs(undefined8 *param_1)
|
|
|
|
{
|
|
return *param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Restore_VFP @ 00058cc4
|
|
|
|
undefined8 __gnu_Unwind_Restore_VFP(undefined8 *param_1)
|
|
|
|
{
|
|
return *param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Save_VFP @ 00058ccc
|
|
|
|
void __gnu_Unwind_Save_VFP(undefined8 *param_1)
|
|
|
|
{
|
|
undefined8 in_d0;
|
|
undefined8 in_d1;
|
|
undefined8 in_d2;
|
|
undefined8 in_d3;
|
|
undefined8 in_d4;
|
|
undefined8 in_d5;
|
|
undefined8 in_d6;
|
|
undefined8 in_d7;
|
|
undefined8 unaff_d8;
|
|
undefined8 unaff_d9;
|
|
undefined8 unaff_d10;
|
|
undefined8 unaff_d11;
|
|
undefined8 unaff_d12;
|
|
undefined8 unaff_d13;
|
|
undefined8 unaff_d14;
|
|
undefined8 unaff_d15;
|
|
|
|
*param_1 = in_d0;
|
|
param_1[1] = in_d1;
|
|
param_1[2] = in_d2;
|
|
param_1[3] = in_d3;
|
|
param_1[4] = in_d4;
|
|
param_1[5] = in_d5;
|
|
param_1[6] = in_d6;
|
|
param_1[7] = in_d7;
|
|
param_1[8] = unaff_d8;
|
|
param_1[9] = unaff_d9;
|
|
param_1[10] = unaff_d10;
|
|
param_1[0xb] = unaff_d11;
|
|
param_1[0xc] = unaff_d12;
|
|
param_1[0xd] = unaff_d13;
|
|
param_1[0xe] = unaff_d14;
|
|
param_1[0xf] = unaff_d15;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Restore_VFP_D @ 00058cd4
|
|
|
|
undefined8 __gnu_Unwind_Restore_VFP_D(undefined8 *param_1)
|
|
|
|
{
|
|
return *param_1;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Save_VFP_D @ 00058cdc
|
|
|
|
void __gnu_Unwind_Save_VFP_D(undefined8 *param_1)
|
|
|
|
{
|
|
undefined8 in_d0;
|
|
undefined8 in_d1;
|
|
undefined8 in_d2;
|
|
undefined8 in_d3;
|
|
undefined8 in_d4;
|
|
undefined8 in_d5;
|
|
undefined8 in_d6;
|
|
undefined8 in_d7;
|
|
undefined8 unaff_d8;
|
|
undefined8 unaff_d9;
|
|
undefined8 unaff_d10;
|
|
undefined8 unaff_d11;
|
|
undefined8 unaff_d12;
|
|
undefined8 unaff_d13;
|
|
undefined8 unaff_d14;
|
|
undefined8 unaff_d15;
|
|
|
|
*param_1 = in_d0;
|
|
param_1[1] = in_d1;
|
|
param_1[2] = in_d2;
|
|
param_1[3] = in_d3;
|
|
param_1[4] = in_d4;
|
|
param_1[5] = in_d5;
|
|
param_1[6] = in_d6;
|
|
param_1[7] = in_d7;
|
|
param_1[8] = unaff_d8;
|
|
param_1[9] = unaff_d9;
|
|
param_1[10] = unaff_d10;
|
|
param_1[0xb] = unaff_d11;
|
|
param_1[0xc] = unaff_d12;
|
|
param_1[0xd] = unaff_d13;
|
|
param_1[0xe] = unaff_d14;
|
|
param_1[0xf] = unaff_d15;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Restore_VFP_D_16_to_31 @ 00058ce4
|
|
|
|
void __gnu_Unwind_Restore_VFP_D_16_to_31(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Save_VFP_D_16_to_31 @ 00058cec
|
|
|
|
void __gnu_Unwind_Save_VFP_D_16_to_31(undefined8 *param_1)
|
|
|
|
{
|
|
undefined8 in_d16;
|
|
undefined8 in_d17;
|
|
undefined8 in_d18;
|
|
undefined8 in_d19;
|
|
undefined8 in_d20;
|
|
undefined8 in_d21;
|
|
undefined8 in_d22;
|
|
undefined8 in_d23;
|
|
undefined8 in_d24;
|
|
undefined8 in_d25;
|
|
undefined8 in_d26;
|
|
undefined8 in_d27;
|
|
undefined8 in_d28;
|
|
undefined8 in_d29;
|
|
undefined8 in_d30;
|
|
undefined8 in_d31;
|
|
|
|
*param_1 = in_d16;
|
|
param_1[1] = in_d17;
|
|
param_1[2] = in_d18;
|
|
param_1[3] = in_d19;
|
|
param_1[4] = in_d20;
|
|
param_1[5] = in_d21;
|
|
param_1[6] = in_d22;
|
|
param_1[7] = in_d23;
|
|
param_1[8] = in_d24;
|
|
param_1[9] = in_d25;
|
|
param_1[10] = in_d26;
|
|
param_1[0xb] = in_d27;
|
|
param_1[0xc] = in_d28;
|
|
param_1[0xd] = in_d29;
|
|
param_1[0xe] = in_d30;
|
|
param_1[0xf] = in_d31;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Restore_WMMXD @ 00058cf4
|
|
|
|
int __gnu_Unwind_Restore_WMMXD(int param_1)
|
|
|
|
{
|
|
undefined4 in_cr0;
|
|
undefined4 in_cr1;
|
|
undefined4 in_cr2;
|
|
undefined4 in_cr3;
|
|
undefined4 in_cr4;
|
|
undefined4 in_cr5;
|
|
undefined4 in_cr6;
|
|
undefined4 in_cr7;
|
|
undefined4 in_cr8;
|
|
undefined4 in_cr9;
|
|
undefined4 in_cr10;
|
|
undefined4 in_cr11;
|
|
undefined4 in_cr12;
|
|
undefined4 in_cr13;
|
|
undefined4 in_cr14;
|
|
undefined4 in_cr15;
|
|
|
|
coprocessor_loadlong(1,in_cr0,param_1);
|
|
coprocessor_loadlong(1,in_cr1,param_1 + 8);
|
|
coprocessor_loadlong(1,in_cr2,param_1 + 0x10);
|
|
coprocessor_loadlong(1,in_cr3,param_1 + 0x18);
|
|
coprocessor_loadlong(1,in_cr4,param_1 + 0x20);
|
|
coprocessor_loadlong(1,in_cr5,param_1 + 0x28);
|
|
coprocessor_loadlong(1,in_cr6,param_1 + 0x30);
|
|
coprocessor_loadlong(1,in_cr7,param_1 + 0x38);
|
|
coprocessor_loadlong(1,in_cr8,param_1 + 0x40);
|
|
coprocessor_loadlong(1,in_cr9,param_1 + 0x48);
|
|
coprocessor_loadlong(1,in_cr10,param_1 + 0x50);
|
|
coprocessor_loadlong(1,in_cr11,param_1 + 0x58);
|
|
coprocessor_loadlong(1,in_cr12,param_1 + 0x60);
|
|
coprocessor_loadlong(1,in_cr13,param_1 + 0x68);
|
|
coprocessor_loadlong(1,in_cr14,param_1 + 0x70);
|
|
coprocessor_loadlong(1,in_cr15,param_1 + 0x78);
|
|
return param_1 + 0x80;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Save_WMMXD @ 00058d38
|
|
|
|
int __gnu_Unwind_Save_WMMXD(int param_1)
|
|
|
|
{
|
|
undefined4 in_cr0;
|
|
undefined4 in_cr1;
|
|
undefined4 in_cr2;
|
|
undefined4 in_cr3;
|
|
undefined4 in_cr4;
|
|
undefined4 in_cr5;
|
|
undefined4 in_cr6;
|
|
undefined4 in_cr7;
|
|
undefined4 in_cr8;
|
|
undefined4 in_cr9;
|
|
undefined4 in_cr10;
|
|
undefined4 in_cr11;
|
|
undefined4 in_cr12;
|
|
undefined4 in_cr13;
|
|
undefined4 in_cr14;
|
|
undefined4 in_cr15;
|
|
|
|
coprocessor_storelong(1,in_cr0,param_1);
|
|
coprocessor_storelong(1,in_cr1,param_1 + 8);
|
|
coprocessor_storelong(1,in_cr2,param_1 + 0x10);
|
|
coprocessor_storelong(1,in_cr3,param_1 + 0x18);
|
|
coprocessor_storelong(1,in_cr4,param_1 + 0x20);
|
|
coprocessor_storelong(1,in_cr5,param_1 + 0x28);
|
|
coprocessor_storelong(1,in_cr6,param_1 + 0x30);
|
|
coprocessor_storelong(1,in_cr7,param_1 + 0x38);
|
|
coprocessor_storelong(1,in_cr8,param_1 + 0x40);
|
|
coprocessor_storelong(1,in_cr9,param_1 + 0x48);
|
|
coprocessor_storelong(1,in_cr10,param_1 + 0x50);
|
|
coprocessor_storelong(1,in_cr11,param_1 + 0x58);
|
|
coprocessor_storelong(1,in_cr12,param_1 + 0x60);
|
|
coprocessor_storelong(1,in_cr13,param_1 + 0x68);
|
|
coprocessor_storelong(1,in_cr14,param_1 + 0x70);
|
|
coprocessor_storelong(1,in_cr15,param_1 + 0x78);
|
|
return param_1 + 0x80;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Restore_WMMXC @ 00058d7c
|
|
|
|
int __gnu_Unwind_Restore_WMMXC(int param_1)
|
|
|
|
{
|
|
undefined4 in_cr8;
|
|
undefined4 in_cr9;
|
|
undefined4 in_cr10;
|
|
undefined4 in_cr11;
|
|
|
|
coprocessor_load2(1,in_cr8,param_1);
|
|
coprocessor_load2(1,in_cr9,param_1 + 4);
|
|
coprocessor_load2(1,in_cr10,param_1 + 8);
|
|
coprocessor_load2(1,in_cr11,param_1 + 0xc);
|
|
return param_1 + 0x10;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_Unwind_Save_WMMXC @ 00058d90
|
|
|
|
int __gnu_Unwind_Save_WMMXC(int param_1)
|
|
|
|
{
|
|
undefined4 in_cr8;
|
|
undefined4 in_cr9;
|
|
undefined4 in_cr10;
|
|
undefined4 in_cr11;
|
|
|
|
coprocessor_store2(1,in_cr8,param_1);
|
|
coprocessor_store2(1,in_cr9,param_1 + 4);
|
|
coprocessor_store2(1,in_cr10,param_1 + 8);
|
|
coprocessor_store2(1,in_cr11,param_1 + 0xc);
|
|
return param_1 + 0x10;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ___Unwind_RaiseException @ 00058da4
|
|
|
|
void ___Unwind_RaiseException
|
|
(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined4 uStack_44;
|
|
undefined4 uStack_40;
|
|
undefined4 uStack_3c;
|
|
undefined4 uStack_38;
|
|
undefined4 uStack_34;
|
|
|
|
uStack_44 = 0;
|
|
uStack_40 = param_1;
|
|
uStack_3c = param_2;
|
|
uStack_38 = param_3;
|
|
uStack_34 = param_4;
|
|
__gnu_Unwind_RaiseException(param_1,&uStack_44,param_3,0,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC ___Unwind_Resume @ 00058dc8
|
|
|
|
void ___Unwind_Resume(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined4 uStack_44;
|
|
undefined4 uStack_40;
|
|
undefined4 uStack_3c;
|
|
undefined4 uStack_38;
|
|
undefined4 uStack_34;
|
|
|
|
uStack_44 = 0;
|
|
uStack_40 = param_1;
|
|
uStack_3c = param_2;
|
|
uStack_38 = param_3;
|
|
uStack_34 = param_4;
|
|
__gnu_Unwind_Resume(param_1,&uStack_44,param_3,0,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_Resume_or_Rethrow @ 00058dec
|
|
|
|
void _Unwind_Resume_or_Rethrow
|
|
(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined4 uStack_44;
|
|
undefined4 uStack_40;
|
|
undefined4 uStack_3c;
|
|
undefined4 uStack_38;
|
|
undefined4 uStack_34;
|
|
|
|
uStack_44 = 0;
|
|
uStack_40 = param_1;
|
|
uStack_3c = param_2;
|
|
uStack_38 = param_3;
|
|
uStack_34 = param_4;
|
|
__gnu_Unwind_Resume_or_Rethrow(param_1,&uStack_44,param_3,0,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_ForcedUnwind @ 00058e10
|
|
|
|
void _Unwind_ForcedUnwind(void)
|
|
|
|
{
|
|
__gnu_Unwind_ForcedUnwind();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_Backtrace @ 00058e34
|
|
|
|
void _Unwind_Backtrace(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined4 uStack_44;
|
|
undefined4 uStack_40;
|
|
undefined4 uStack_3c;
|
|
undefined4 uStack_38;
|
|
undefined4 uStack_34;
|
|
|
|
uStack_44 = 0;
|
|
uStack_40 = param_1;
|
|
uStack_3c = param_2;
|
|
uStack_38 = param_3;
|
|
uStack_34 = param_4;
|
|
__gnu_Unwind_Backtrace(param_1,param_2,&uStack_44,0,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00058e58 @ 00058e58
|
|
|
|
uint FUN_00058e58(uint *param_1)
|
|
|
|
{
|
|
char cVar1;
|
|
uint uVar2;
|
|
|
|
if ((char)param_1[2] == '\0') {
|
|
if (*(char *)((int)param_1 + 9) == '\0') {
|
|
return 0xb0;
|
|
}
|
|
*(char *)((int)param_1 + 9) = *(char *)((int)param_1 + 9) + -1;
|
|
*param_1 = *(uint *)param_1[1];
|
|
param_1[1] = (uint)((uint *)param_1[1] + 1);
|
|
cVar1 = '\x03';
|
|
}
|
|
else {
|
|
cVar1 = (char)param_1[2] + -1;
|
|
}
|
|
*(char *)(param_1 + 2) = cVar1;
|
|
uVar2 = *param_1;
|
|
*param_1 = uVar2 << 8;
|
|
return uVar2 >> 0x18;
|
|
}
|
|
|
|
|
|
|
|
### FUNC FUN_00058eb8 @ 00058eb8
|
|
|
|
undefined4 FUN_00058eb8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
undefined4 local_c;
|
|
|
|
local_c = param_4;
|
|
_Unwind_VRS_Get(param_1,0,0xc,0,&local_c,param_2,param_3);
|
|
return local_c;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_unwind_execute @ 00058ee4
|
|
|
|
undefined4 __gnu_unwind_execute(int *param_1,undefined4 param_2,undefined4 param_3,int param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 uVar2;
|
|
uint uVar3;
|
|
undefined4 uVar4;
|
|
bool bVar5;
|
|
int iVar6;
|
|
int *piVar7;
|
|
undefined4 uVar8;
|
|
int local_24;
|
|
|
|
bVar5 = false;
|
|
piVar7 = param_1;
|
|
uVar8 = param_2;
|
|
local_24 = param_4;
|
|
LAB_00058efc:
|
|
do {
|
|
while( true ) {
|
|
uVar1 = FUN_00058e58(param_2);
|
|
if (uVar1 == 0xb0) {
|
|
if (!bVar5) {
|
|
_Unwind_VRS_Get(param_1,0,0xe,0,&local_24,uVar8,param_3);
|
|
_Unwind_VRS_Set(param_1,0,0xf,0,&local_24);
|
|
}
|
|
return 0;
|
|
}
|
|
if ((uVar1 & 0x80) != 0) break;
|
|
_Unwind_VRS_Get(param_1,0,0xd,0,&local_24,uVar8,param_3);
|
|
iVar6 = (uVar1 & 0x3f) * 4 + 4;
|
|
if ((uVar1 & 0x40) != 0) {
|
|
iVar6 = -iVar6;
|
|
}
|
|
local_24 = local_24 + iVar6;
|
|
LAB_00059024:
|
|
piVar7 = &local_24;
|
|
_Unwind_VRS_Set(param_1,0,0xd,0);
|
|
}
|
|
uVar3 = uVar1 & 0xf0;
|
|
if (uVar3 == 0x80) {
|
|
uVar3 = FUN_00058e58(param_2);
|
|
uVar3 = uVar3 | uVar1 << 8;
|
|
if (uVar3 == 0x8000) {
|
|
return 9;
|
|
}
|
|
iVar6 = _Unwind_VRS_Pop(param_1,0,(uVar3 << 0x14) >> 0x10,0,piVar7);
|
|
if (iVar6 != 0) {
|
|
return 9;
|
|
}
|
|
if ((uVar3 & 0x800) != 0) {
|
|
bVar5 = true;
|
|
}
|
|
goto LAB_00058efc;
|
|
}
|
|
if (uVar3 == 0x90) {
|
|
if ((uVar1 & 0xd) == 0xd) {
|
|
return 9;
|
|
}
|
|
_Unwind_VRS_Get(param_1,0,uVar1 & 0xf,0,&local_24,uVar8,param_3);
|
|
goto LAB_00059024;
|
|
}
|
|
if (uVar3 == 0xa0) {
|
|
uVar3 = 0xff0 >> (~uVar1 & 7) & 0xff0;
|
|
if ((uVar1 & 8) != 0) {
|
|
uVar3 = uVar3 | 0x4000;
|
|
}
|
|
uVar2 = 0;
|
|
uVar4 = uVar2;
|
|
}
|
|
else if (uVar3 == 0xb0) {
|
|
if (uVar1 == 0xb1) {
|
|
uVar3 = FUN_00058e58(param_2);
|
|
if (uVar3 == 0) {
|
|
return 9;
|
|
}
|
|
if ((uVar3 & 0xf0) != 0) {
|
|
return 9;
|
|
}
|
|
uVar2 = 0;
|
|
uVar4 = uVar2;
|
|
}
|
|
else {
|
|
if (uVar1 == 0xb2) {
|
|
_Unwind_VRS_Get(param_1,0,0xd,0,&local_24,uVar8,param_3);
|
|
uVar1 = FUN_00058e58(param_2);
|
|
uVar3 = 2;
|
|
while ((uVar1 & 0x80) != 0) {
|
|
local_24 = local_24 + ((uVar1 & 0x7f) << (uVar3 & 0xff));
|
|
uVar3 = uVar3 + 7;
|
|
uVar1 = FUN_00058e58(param_2);
|
|
}
|
|
local_24 = local_24 + 0x204 + ((uVar1 & 0x7f) << (uVar3 & 0xff));
|
|
goto LAB_00059024;
|
|
}
|
|
if (uVar1 == 0xb3) {
|
|
uVar1 = FUN_00058e58(param_2);
|
|
uVar2 = 1;
|
|
goto LAB_00059178;
|
|
}
|
|
if ((uVar1 & 0xfc) == 0xb4) {
|
|
return 9;
|
|
}
|
|
uVar2 = 1;
|
|
uVar3 = (uVar1 & 7) + 1 | 0x80000;
|
|
uVar4 = uVar2;
|
|
}
|
|
}
|
|
else if (uVar3 == 0xc0) {
|
|
if (uVar1 == 0xc6) {
|
|
uVar1 = FUN_00058e58(param_2);
|
|
uVar2 = 3;
|
|
LAB_00059178:
|
|
uVar3 = (uVar1 & 0xf) + 1 | (uVar1 & 0xf0) << 0xc;
|
|
uVar4 = uVar2;
|
|
}
|
|
else if (uVar1 == 199) {
|
|
uVar3 = FUN_00058e58(param_2);
|
|
if (uVar3 == 0) {
|
|
return 9;
|
|
}
|
|
if ((uVar3 & 0xf0) != 0) {
|
|
return 9;
|
|
}
|
|
uVar2 = 4;
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
if ((uVar1 & 0xf8) != 0xc0) {
|
|
if (uVar1 == 200) {
|
|
uVar1 = FUN_00058e58(param_2);
|
|
uVar3 = (uVar1 & 0xf) + 1 | ((uVar1 & 0xf0) + 0x10) * 0x1000;
|
|
}
|
|
else {
|
|
if (uVar1 != 0xc9) {
|
|
return 9;
|
|
}
|
|
uVar1 = FUN_00058e58(param_2);
|
|
uVar3 = (uVar1 & 0xf) + 1 | (uVar1 & 0xf0) << 0xc;
|
|
}
|
|
goto LAB_0005924c;
|
|
}
|
|
uVar2 = 3;
|
|
uVar3 = (uVar1 & 0xf) + 1 | 0xa0000;
|
|
uVar4 = uVar2;
|
|
}
|
|
}
|
|
else {
|
|
if ((uVar1 & 0xf8) != 0xd0) {
|
|
return 9;
|
|
}
|
|
uVar3 = (uVar1 & 7) + 1 | 0x80000;
|
|
LAB_0005924c:
|
|
uVar2 = 1;
|
|
uVar4 = 5;
|
|
}
|
|
iVar6 = _Unwind_VRS_Pop(param_1,uVar2,uVar3,uVar4,piVar7);
|
|
if (iVar6 != 0) {
|
|
return 9;
|
|
}
|
|
} while( true );
|
|
}
|
|
|
|
|
|
|
|
### FUNC __gnu_unwind_frame @ 0005926c
|
|
|
|
void __gnu_unwind_frame(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
int local_14;
|
|
int local_10;
|
|
undefined1 local_c;
|
|
undefined1 local_b;
|
|
undefined2 uStack_a;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x4c);
|
|
local_14 = *(int *)(iVar1 + 4) << 8;
|
|
local_10 = iVar1 + 8;
|
|
uStack_a = (undefined2)((uint)param_4 >> 0x10);
|
|
_local_c = CONCAT11(*(undefined1 *)(iVar1 + 7),3);
|
|
__gnu_unwind_execute(param_2,&local_14,3,*(undefined1 *)(iVar1 + 7),param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_GetRegionStart @ 000592ac
|
|
|
|
undefined4 _Unwind_GetRegionStart(void)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = thunk_FUN_00058eb8();
|
|
return *(undefined4 *)(iVar1 + 0x48);
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_GetLanguageSpecificData @ 000592bc
|
|
|
|
int _Unwind_GetLanguageSpecificData(void)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = thunk_FUN_00058eb8();
|
|
return *(int *)(iVar1 + 0x4c) + (uint)*(byte *)(*(int *)(iVar1 + 0x4c) + 7) * 4 + 8;
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_GetDataRelBase @ 000592d8
|
|
|
|
void _Unwind_GetDataRelBase(void)
|
|
|
|
{
|
|
/* WARNING: Subroutine does not return */
|
|
abort();
|
|
}
|
|
|
|
|
|
|
|
### FUNC _Unwind_GetTextRelBase @ 000592e0
|
|
|
|
void _Unwind_GetTextRelBase(void)
|
|
|
|
{
|
|
/* WARNING: Subroutine does not return */
|
|
abort();
|
|
}
|
|
|
|
|
|
|
|
### FUNC __divdi3 @ 000592e8
|
|
|
|
undefined8 __divdi3(uint param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
bool bVar8;
|
|
bool bVar9;
|
|
undefined8 uVar10;
|
|
longlong lVar11;
|
|
int iVar12;
|
|
|
|
if ((int)param_2 < 0) {
|
|
uVar4 = -param_1;
|
|
param_2 = -(param_2 + (param_1 != 0));
|
|
uVar6 = 0xffffffff;
|
|
}
|
|
else {
|
|
uVar6 = 0;
|
|
uVar4 = param_1;
|
|
}
|
|
uVar7 = param_3;
|
|
if ((int)param_4 < 0) {
|
|
uVar7 = -param_3;
|
|
param_4 = -(param_4 + (param_3 != 0));
|
|
uVar6 = ~uVar6;
|
|
}
|
|
bVar9 = param_2 <= param_4;
|
|
bVar8 = param_4 != param_2;
|
|
if (!bVar8) {
|
|
bVar9 = uVar4 <= uVar7;
|
|
}
|
|
uVar2 = param_4;
|
|
uVar1 = uVar7;
|
|
if (bVar9 && (bVar8 || uVar7 != uVar4)) {
|
|
uVar1 = 0;
|
|
uVar2 = 0;
|
|
}
|
|
lVar11 = CONCAT44(uVar2,uVar1);
|
|
if (!bVar9 || !bVar8 && uVar7 == uVar4) {
|
|
if (param_4 == 0) {
|
|
iVar5 = LZCOUNT(uVar7) + 0x20;
|
|
}
|
|
else {
|
|
iVar5 = LZCOUNT(param_4);
|
|
}
|
|
if (param_2 == 0) {
|
|
iVar3 = LZCOUNT(uVar4) + 0x20;
|
|
}
|
|
else {
|
|
iVar3 = LZCOUNT(param_2);
|
|
}
|
|
iVar5 = iVar5 - iVar3;
|
|
iVar12 = iVar5;
|
|
uVar10 = __ashldi3(uVar7,param_4,iVar5,iVar3,param_1,iVar5,param_3);
|
|
uVar7 = (uint)((ulonglong)uVar10 >> 0x20);
|
|
uVar1 = (uint)uVar10;
|
|
bVar9 = uVar7 <= param_2;
|
|
if (param_2 == uVar7) {
|
|
bVar9 = uVar1 <= uVar4;
|
|
}
|
|
if (bVar9) {
|
|
bVar9 = uVar4 < uVar1;
|
|
uVar4 = uVar4 - uVar1;
|
|
param_2 = param_2 - (uVar7 + bVar9);
|
|
lVar11 = __ashldi3(1,0,iVar5);
|
|
}
|
|
else {
|
|
lVar11 = 0;
|
|
}
|
|
if (iVar5 != 0) {
|
|
uVar7 = uVar7 >> 1;
|
|
uVar1 = (uint)((byte)((ulonglong)uVar10 >> 0x20) & 1) << 0x1f | uVar1 >> 1;
|
|
do {
|
|
uVar2 = uVar4 - uVar1;
|
|
iVar3 = param_2 - (uVar7 + (uVar4 < uVar1));
|
|
bVar9 = uVar7 <= param_2;
|
|
if (param_2 == uVar7) {
|
|
bVar9 = uVar1 <= uVar4;
|
|
}
|
|
param_2 = param_2 * 2 + (uint)CARRY4(uVar4,uVar4);
|
|
uVar4 = uVar4 * 2;
|
|
if (bVar9) {
|
|
param_2 = iVar3 * 2 + (uint)CARRY4(uVar2,uVar2) + (uint)(0xfffffffe < uVar2 * 2);
|
|
uVar4 = uVar2 * 2 + 1;
|
|
}
|
|
iVar5 = iVar5 + -1;
|
|
} while (iVar5 != 0);
|
|
lVar11 = lVar11 + CONCAT44(param_2,uVar4);
|
|
uVar7 = (uint)lVar11;
|
|
uVar10 = __lshrdi3(uVar4,param_2,iVar12);
|
|
uVar10 = __ashldi3((int)uVar10,(int)((ulonglong)uVar10 >> 0x20),iVar12);
|
|
lVar11 = CONCAT44((int)((ulonglong)lVar11 >> 0x20) -
|
|
((int)((ulonglong)uVar10 >> 0x20) + (uint)(uVar7 < (uint)uVar10)),
|
|
uVar7 - (uint)uVar10);
|
|
}
|
|
}
|
|
if (uVar6 != 0) {
|
|
uVar6 = 1;
|
|
}
|
|
uVar4 = (uint)lVar11 ^ -uVar6;
|
|
return CONCAT44(((uint)((ulonglong)lVar11 >> 0x20) ^ -(uint)(uVar6 != 0)) +
|
|
(uint)CARRY4(uVar4,uVar6),uVar4 + uVar6);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __udivdi3 @ 00059468
|
|
|
|
int __udivdi3(uint param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
uint uVar8;
|
|
bool bVar9;
|
|
bool bVar10;
|
|
undefined8 uVar11;
|
|
|
|
bVar9 = param_2 <= param_4;
|
|
if (param_4 == param_2) {
|
|
bVar9 = param_1 <= param_3;
|
|
}
|
|
if (bVar9 && (param_4 != param_2 || param_3 != param_1)) {
|
|
return 0;
|
|
}
|
|
if (param_4 == 0) {
|
|
iVar6 = LZCOUNT(param_3) + 0x20;
|
|
}
|
|
else {
|
|
iVar6 = LZCOUNT(param_4);
|
|
}
|
|
if (param_2 == 0) {
|
|
iVar4 = LZCOUNT(param_1) + 0x20;
|
|
}
|
|
else {
|
|
iVar4 = LZCOUNT(param_2);
|
|
}
|
|
iVar6 = iVar6 - iVar4;
|
|
uVar11 = __ashldi3(param_3,param_4,iVar6,param_4,param_4);
|
|
uVar5 = (uint)((ulonglong)uVar11 >> 0x20);
|
|
uVar3 = (uint)uVar11;
|
|
bVar9 = uVar5 <= param_2;
|
|
if (param_2 == uVar5) {
|
|
bVar9 = uVar3 <= param_1;
|
|
}
|
|
if (bVar9) {
|
|
bVar9 = param_1 < uVar3;
|
|
param_1 = param_1 - uVar3;
|
|
param_2 = param_2 - (uVar5 + bVar9);
|
|
iVar4 = __ashldi3(1,0,iVar6);
|
|
}
|
|
else {
|
|
iVar4 = 0;
|
|
}
|
|
if (iVar6 != 0) {
|
|
uVar5 = uVar5 >> 1;
|
|
uVar3 = (uint)((byte)((ulonglong)uVar11 >> 0x20) & 1) << 0x1f | uVar3 >> 1;
|
|
iVar7 = iVar6;
|
|
do {
|
|
uVar8 = param_1 - uVar3;
|
|
bVar10 = CARRY4(param_1,param_1);
|
|
uVar1 = param_1 * 2;
|
|
iVar2 = param_2 * 2;
|
|
bVar9 = uVar5 <= param_2;
|
|
if (param_2 == uVar5) {
|
|
bVar9 = uVar3 <= param_1;
|
|
}
|
|
param_2 = (param_2 - (uVar5 + (param_1 < uVar3))) * 2 + (uint)CARRY4(uVar8,uVar8) +
|
|
(uint)(0xfffffffe < uVar8 * 2);
|
|
param_1 = uVar8 * 2 + 1;
|
|
if (!bVar9) {
|
|
param_2 = iVar2 + (uint)bVar10;
|
|
param_1 = uVar1;
|
|
}
|
|
iVar7 = iVar7 + -1;
|
|
} while (iVar7 != 0);
|
|
uVar11 = __lshrdi3(param_1,param_2,iVar6);
|
|
iVar6 = __ashldi3((int)uVar11,(int)((ulonglong)uVar11 >> 0x20),iVar6);
|
|
return (param_1 + iVar4) - iVar6;
|
|
}
|
|
return iVar4;
|
|
}
|
|
|
|
|
|
|
|
### FUNC __lshrdi3 @ 00059574
|
|
|
|
undefined8 __lshrdi3(uint param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
if ((int)(param_3 - 0x20) < 0) {
|
|
uVar1 = param_1 >> (param_3 & 0xff) | param_2 << (0x20 - param_3 & 0xff);
|
|
}
|
|
else {
|
|
uVar1 = param_2 >> (param_3 - 0x20 & 0xff);
|
|
}
|
|
return CONCAT44(param_2 >> (param_3 & 0xff),uVar1);
|
|
}
|
|
|
|
|
|
|
|
### FUNC __ashldi3 @ 00059590
|
|
|
|
undefined8 __ashldi3(uint param_1,int param_2,uint param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
if ((int)(param_3 - 0x20) < 0) {
|
|
uVar1 = param_2 << (param_3 & 0xff) | param_1 >> (0x20 - param_3 & 0xff);
|
|
}
|
|
else {
|
|
uVar1 = param_1 << (param_3 - 0x20 & 0xff);
|
|
}
|
|
return CONCAT44(uVar1,param_1 << (param_3 & 0xff));
|
|
}
|
|
|
|
|
|
|