/* WARNING: Removing unreachable block (ram,0x004097b8) */
/* WARNING: Removing unreachable block (ram,0x00409814) */

int FUN_0040972c(undefined1 param_1,int *param_2,undefined1 *param_3,int param_4,int param_5,
                undefined4 param_6,uint param_7)

{
  ushort uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  undefined1 local_20;
  undefined1 uStack_1f;
  
  if (param_5 == 1) {
    *param_3 = param_1;
    param_3[1] = 0;
  }
  else if (*param_2 == 0) {
    warn("write-assns-list: No list was generated, empty list written\n");
    param_3[1] = 0;
    *param_3 = 0;
  }
  else {
    param_7 = param_7 / 10;
    iVar3 = param_2[1] - param_7;
    if (param_7 < (uint)param_2[1]) {
      if (param_4 - 2U < (uint)(iVar3 * 10)) {
        iVar3 = (int)(param_4 - 2U) / 10;
        iVar4 = (iVar3 * 5 + 1) * 2;
        uVar1 = (ushort)iVar4 & 0x7ffe | 0x8000;
      }
      else {
        param_2[1] = 0;
        iVar4 = (iVar3 * 5 + 1) * 2;
        uVar1 = (short)iVar4 - 2;
      }
      uStack_1f = (undefined1)uVar1;
      local_20 = (undefined1)(uVar1 >> 8);
      param_3[1] = uStack_1f;
      iVar5 = param_7 * 10;
      *param_3 = local_20;
      param_3 = param_3 + 2;
      for (; iVar3 != 0; iVar3 = iVar3 + -1) {
        memcpy(param_3,(void *)(*param_2 + iVar5),6)   //possible issue identified - semgrep
        iVar2 = *param_2;
        param_3[6] = *(undefined1 *)(iVar2 + iVar5 + 6);
        param_3[7] = *(undefined1 *)(iVar2 + iVar5 + 7);
        iVar2 = *param_2 + iVar5;
        iVar5 = iVar5 + 10;
        param_3[8] = *(undefined1 *)(iVar2 + 8);
        param_3[9] = 0;
        param_3 = param_3 + 10;
      }
      return iVar4;
    }
    warn("write-assns-list: Offset too big, empty list written\n");
    param_3[1] = 0;
    *param_3 = 0;
    param_2[1] = 0;
  }
  return 2;
}