/* WARNING: Removing unreachable block (ram,0x00489378) */
/* WARNING: Removing unreachable block (ram,0x00488d54) */
int FUN_00488c80(undefined4 param_1,undefined4 param_2,undefined4 param_3,uint param_4,
undefined4 *param_5,code *param_6)
{
int *piVar1;
bool bVar2;
bool bVar3;
uint uVar4;
byte bVar5;
int iVar6;
int *piVar7;
int iVar8;
uint uVar9;
byte *pbVar10;
int *piVar11;
byte *pbVar12;
char *pcVar13;
byte *pbVar14;
byte *pbVar15;
char cVar16;
double *pdVar17;
char *pcVar18;
int iVar19;
uint uVar20;
uint uVar21;
byte *pbVar22;
int iVar23;
int iVar24;
double dVar25;
double dVar26;
double dVar27;
double dVar28;
char local_b8 [8];
char local_b0;
char local_a4 [28];
int local_88;
uint local_84;
char *local_80;
uint local_7c;
int local_78;
char *local_74;
int local_70;
byte *local_6c;
byte *local_68;
int local_64;
int local_60;
undefined *local_5c;
int local_58 [13];
uVar20 = (uint)*(char *)(param_5 + 2);
local_b0 = 'e';
iVar24 = param_5[1];
pbVar22 = (byte *)*param_5;
if ((uVar20 | 0x20) == 0x61) {
local_b0 = 'p';
bVar2 = false;
if ((int)pbVar22 < 0) {
bVar2 = true;
pbVar22 = (byte *)0xe;
}
}
else {
if ((int)pbVar22 < 0) {
pbVar22 = (byte *)0x6;
}
bVar2 = false;
}
local_b8[0] = '\0';
if ((param_5[3] & 2) == 0) {
if ((param_5[3] & 1) != 0) {
local_b8[0] = ' ';
}
}
else {
local_b8[0] = '+';
}
local_b8[1] = 0;
local_74 = (char *)0x0;
if ((double)CONCAT44(param_4,param_3) == 0.0) {
if (1.0 / (double)CONCAT44(param_4,param_3) < 0.0) {
local_b8[0] = '-';
}
dVar28 = 1000000000.0;
dVar26 = (double)CONCAT44(param_4,param_3);
uVar21 = 10;
iVar19 = 9;
iVar23 = 0x11;
pbVar14 = (byte *)0xffffffff;
}
else {
if ((double)CONCAT44(param_4,param_3) < 0.0) {
param_4 = param_4 ^ 0x80000000;
local_b8[0] = '-';
}
if ((double)CONCAT44(param_4,param_3) == (double)CONCAT44(param_4,param_3) * 0.25) {
param_5[4] = 0x20;
local_7c = 0x70;
local_78 = 3;
if ((int)uVar20 < 0x61) {
local_74 = (char *)0x4;
}
local_74 = &UNK_00498de0 + (int)local_74;
piVar11 = &local_70;
goto LAB_004893c4;
}
if ((uVar20 | 0x20) == 0x61) {
uVar21 = 0x10;
dVar27 = 2147483648.0;
iVar19 = 8;
dVar28 = 4294967296.0;
iVar23 = 0xe;
pdVar17 = (double *)&UNK_00498df8;
pbVar14 = (byte *)0x7;
}
else {
uVar21 = 10;
dVar27 = 100000000.0;
iVar19 = 9;
dVar28 = 1000000000.0;
iVar23 = 0x11;
pdVar17 = (double *)&DAT_00498e40;
pbVar14 = (byte *)0x8;
}
iVar8 = 9;
iVar6 = 0x100;
dVar26 = (double)CONCAT44(param_4,param_3);
do {
iVar8 = iVar8 + -1;
if ((double)CONCAT44(param_4,param_3) < dVar27) {
dVar25 = dVar26 * pdVar17[iVar8];
if (dVar25 < dVar28) {
pbVar14 = pbVar14 + -iVar6;
dVar26 = dVar25;
}
}
else {
dVar25 = dVar26 / pdVar17[iVar8];
if (dVar27 <= dVar25) {
pbVar14 = pbVar14 + iVar6;
dVar26 = dVar25;
}
}
iVar6 = iVar6 >> 1;
} while (iVar8 != 0);
if (dVar28 <= dVar26) {
pbVar14 = pbVar14 + 1;
dVar26 = dVar26 / *pdVar17;
}
}
pcVar18 = local_a4 + 6;
bVar3 = false;
while( true ) {
if (dVar26 < 2147483648.0) {
uVar9 = (uint)dVar26;
}
else {
uVar9 = (int)(dVar26 - 2147483648.0) | 0x80000000;
}
dVar27 = (double)(int)uVar9;
if ((int)uVar9 < 0) {
dVar27 = dVar27 + 4294967296.0;
}
pcVar18 = pcVar18 + iVar19;
iVar6 = 0;
dVar26 = (dVar26 - dVar27) * dVar28;
do {
if (uVar21 == 0) {
trap(7);
}
iVar6 = iVar6 + 1;
pcVar18[-iVar6] = (char)(uVar9 % uVar21) + '0';
uVar9 = uVar9 / uVar21;
} while (iVar6 < iVar19);
if (bVar3) break;
bVar3 = true;
}
uVar9 = uVar20;
if ((int)uVar20 < 0x61) {
local_b0 = local_b0 + -0x20 //possible issue identified - semgrep
uVar9 = (int)((uVar20 + 0x20) * 0x1000000) >> 0x18;
}
if (uVar9 == 0x67) {
pbVar22 = pbVar22 + -(uint)(pbVar22 != (byte *)0x0);
pbVar12 = pbVar22;
}
else {
pbVar12 = pbVar22;
if ((uVar9 == 0x66) && (pbVar12 = pbVar14 + (int)pbVar22, (int)(pbVar14 + (int)pbVar22) < -1)) {
FUN_00483cc0(local_a4 + 4,0x30,0x11);
pbVar12 = (byte *)0xffffffff;
pbVar14 = (byte *)0xffffffff;
}
}
local_a4[5] = 0x30;
local_a4[4] = 0;
if ((int)pbVar12 < iVar23) {
pbVar10 = (byte *)(local_a4 + (int)(pbVar12 + 7));
uVar20 = (uint)((uVar21 >> 1) + 0x30 <= (uint)(int)(char)*pbVar10);
}
else {
pbVar10 = (byte *)(local_a4 + iVar23 + 6);
uVar20 = 0;
}
do {
do {
pbVar10 = pbVar10 + -1;
iVar19 = (*pbVar10 + uVar20) * 0x1000000;
uVar4 = iVar19 >> 0x18;
*pbVar10 = (byte)((uint)iVar19 >> 0x18);
} while (uVar4 == 0x30);
} while (uVar21 + 0x2f < uVar4);
if ((byte)((byte)uVar9 | 0x20) == 0x61) {
bVar5 = *pbVar10;
pbVar15 = pbVar10;
while (bVar5 != 0) {
if ('9' < (char)bVar5) {
*pbVar15 = local_b0 + -0x49 + bVar5;
}
pbVar15 = pbVar15 + -1;
bVar5 = *pbVar15;
}
if (local_a4 + 5 < pbVar10) {
pbVar14 = (byte *)((int)pbVar14 << 2);
}
}
pbVar15 = (byte *)(local_a4 + 5);
if (pbVar15 < pbVar10) {
pbVar15 = (byte *)(local_a4 + 6);
}
else {
pbVar14 = pbVar14 + 1;
pbVar10 = pbVar15;
}
pbVar10[1] = 0;
if (uVar9 == 0x67) {
uVar20 = 0x67;
if ((int)pbVar14 < -4) {
LAB_00489528:
pbVar12 = (byte *)0x0;
}
else {
if ((int)pbVar14 <= (int)pbVar12) {
pbVar22 = pbVar12 + -(int)pbVar14;
goto LAB_0048917c;
}
pbVar12 = (byte *)0x0;
}
}
else {
uVar20 = uVar9;
if (uVar9 != 0x66) goto LAB_00489528;
LAB_0048917c:
uVar20 = 0x66;
pbVar12 = pbVar14;
if ((int)pbVar14 < 0) {
pbVar15 = pbVar15 + -1;
*pbVar15 = 0x30;
}
}
local_78 = 1;
local_74 = local_b8 + 4;
local_7c = 0xb0;
local_b8[4] = *pbVar15;
pbVar15 = pbVar15 + 1;
pbVar10 = pbVar10 + (1 - (int)pbVar15);
local_b8[5] = 0;
piVar11 = &local_70;
if (-1 < (int)pbVar12) {
local_70 = 0x70;
local_68 = pbVar15;
if ((int)pbVar12 < (int)pbVar10) {
if (pbVar12 == (byte *)0x0) {
pbVar12 = (byte *)0xffffffff;
piVar11 = &local_70;
}
else {
pbVar10 = pbVar10 + -(int)pbVar12;
local_6c = pbVar12;
pbVar15 = pbVar15 + (int)pbVar12;
piVar11 = &local_64;
pbVar12 = (byte *)0xffffffff;
}
}
else {
local_6c = pbVar10;
if ((int)pbVar12 - (int)pbVar10 < 1) {
piVar11 = &local_64;
}
else {
local_64 = 0xb0;
local_60 = (int)pbVar12 - (int)pbVar10;
local_5c = &DAT_00498de3;
piVar11 = local_58;
}
pbVar12 = (byte *)0xffffffff;
pbVar10 = (byte *)0x0;
}
}
if ((param_5[3] & 0x10) == 0) {
if (pbVar10 != (byte *)0x0) {
*piVar11 = 0x70;
goto LAB_00489278;
}
if (((uVar9 != 0x67) && (uVar9 != 0x61)) && (0 < (int)pbVar22)) goto LAB_00489274;
}
else {
LAB_00489274:
*piVar11 = 0x70;
LAB_00489278:
piVar11[1] = 1;
piVar11[2] = (int)&DAT_00498df0;
piVar11 = piVar11 + 3;
}
pbVar12 = pbVar12 + 1;
if ((int)pbVar12 < 0) {
*piVar11 = 0xb0;
piVar11[1] = -(int)pbVar12;
piVar11[2] = (int)&DAT_00498de3;
piVar11 = piVar11 + 3;
}
if (pbVar10 != (byte *)0x0) {
*piVar11 = 0x70;
piVar11[2] = (int)pbVar15;
piVar11[1] = (int)pbVar10;
piVar11 = piVar11 + 3;
}
if (((uVar9 != 0x67) || ((param_5[3] & 0x10) != 0)) &&
((!bVar2 && ((int)pbVar10 - (int)pbVar12 < (int)pbVar22)))) {
*piVar11 = 0xb0;
piVar11[1] = (int)pbVar22 - ((int)pbVar10 - (int)pbVar12);
piVar11[2] = (int)&DAT_00498de3;
piVar11 = piVar11 + 3;
}
if (uVar20 == 0x66) {
uVar20 = 0x66;
}
else {
iVar19 = 3;
if (uVar9 != 0x61) {
iVar19 = 4;
}
cVar16 = '+';
if ((int)pbVar14 < 0) {
pbVar14 = (byte *)-(int)pbVar14;
cVar16 = '-';
}
local_a4[3] = 0;
iVar23 = 2;
pcVar18 = local_a4 + 3;
do {
while( true ) {
pcVar13 = pcVar18;
pbVar22 = (byte *)((int)pbVar14 / 10);
iVar23 = iVar23 + 1;
pcVar18 = pcVar13 + -1;
*pcVar18 = (char)((int)pbVar14 % 10) + '0';
pbVar14 = pbVar22;
if (iVar19 <= iVar23) break;
iVar23 = 3;
}
} while (pbVar22 != (byte *)0x0);
pcVar13[-3] = local_b0;
pcVar13[-2] = cVar16;
*piVar11 = 0x70;
piVar11[1] = iVar23;
piVar11[2] = (int)(pcVar13 + -3);
piVar11 = piVar11 + 3;
}
LAB_004893c4:
piVar7 = &local_78;
do {
iVar19 = *piVar7;
piVar7 = piVar7 + 3;
iVar24 = iVar24 - iVar19;
} while (piVar7 < piVar11);
uVar21 = (uint)(local_b8[0] != '\0');
local_88 = 0xa0;
local_84 = uVar21;
local_80 = local_b8;
if (((byte)((byte)uVar20 | 0x20) == 0x61) && (0xf < local_7c)) {
local_b8[uVar21] = '0';
local_84 = uVar21 + 2;
local_b8[uVar21 + 1] = local_b0 + '\b';
local_b8[uVar21 + 2] = '\0';
}
iVar24 = iVar24 - local_84;
if (0 < iVar24) {
if ((param_5[3] & 8) == 0) {
if (param_5[4] == 0x30) {
local_78 = local_78 + iVar24;
}
else {
local_84 = local_84 + iVar24;
}
}
else {
*piVar11 = 0xa0;
piVar11[1] = iVar24;
piVar11[2] = (int)&DAT_00498de3;
piVar11 = piVar11 + 3;
}
}
iVar19 = 0;
piVar7 = &local_88;
iVar24 = 0xa0;
while( true ) {
iVar24 = (*param_6)(param_1,iVar24,piVar7[1],piVar7[2]);
piVar1 = piVar7 + 1;
piVar7 = piVar7 + 3;
iVar19 = iVar19 + iVar24;
if (iVar24 != *piVar1) {
return -1;
}
if (piVar11 <= piVar7) break;
iVar24 = *piVar7;
}
return iVar19;
}