/* 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;
}