L L4D2node

BZ2_hbMakeCodeLengths

0x00298d70 · 1281 bytes · __cdecl

_Z21BZ2_hbMakeCodeLengthsPhPiii

Decompiled

undefined (4 params)

/* BZ2_hbMakeCodeLengths(unsigned char*, int*, int, int) */

void BZ2_hbMakeCodeLengths(uchar *param_1,int *param_2,int param_3,int param_4)

{
  int iVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  uint *puVar6;
  uint *puVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  int local_1470;
  int local_1464;
  int *local_1460;
  int local_145c;
  int local_1450 [261];
  uint local_103c [516];
  int local_82c [519];
  
  if (0 < param_3) {
    iVar11 = 0;
    do {
      iVar3 = iVar11 + 1;
      uVar8 = param_2[iVar11] << 8;
      if (param_2[iVar11] == 0) {
        uVar8 = 0x100;
      }
      local_103c[iVar3] = uVar8;
      iVar11 = iVar3;
    } while (iVar3 != param_3);
  }
  do {
    local_1450[1] = 0;
    local_103c[0] = 0;
    local_82c[0] = -2;
    iVar11 = param_3;
    if (0 < param_3) {
      iVar3 = 1;
      do {
        local_1450[iVar3 + 1] = iVar3;
        local_82c[iVar3] = -1;
        uVar14 = local_103c[iVar3];
        iVar4 = local_1450[(iVar3 >> 1) + 1];
        uVar8 = local_103c[iVar4];
        iVar9 = iVar3 >> 1;
        iVar5 = iVar3;
        while (iVar12 = iVar9, (int)uVar14 < (int)uVar8) {
          local_1450[iVar5 + 1] = iVar4;
          iVar9 = iVar12 >> 1;
          iVar4 = local_1450[iVar9 + 1];
          iVar5 = iVar12;
          uVar8 = local_103c[iVar4];
        }
        local_1450[iVar5 + 1] = iVar3;
        iVar3 = iVar3 + 1;
      } while (iVar3 != param_3 + 1);
      if (param_3 != 1) {
        local_1460 = local_1450 + param_3;
        local_1470 = param_3 + -2;
        local_145c = param_3;
        local_1464 = param_3;
        do {
          iVar3 = local_1450[2];
          local_145c = local_145c + -1;
          iVar11 = local_1460[1];
          local_1450[2] = iVar11;
          if (local_145c < 2) {
            iVar5 = 1;
          }
          else {
            uVar8 = local_103c[iVar11];
            iVar4 = 2;
            iVar5 = 1;
            do {
              if (iVar4 < local_145c) {
                iVar9 = iVar4 + 1;
                iVar12 = local_1450[iVar4 + 1];
                iVar13 = local_1450[iVar4 + 2];
                uVar14 = local_103c[iVar13];
                uVar10 = local_103c[iVar12];
                if ((int)uVar10 <= (int)uVar14) goto LAB_00298f36;
              }
              else {
                iVar12 = local_1450[iVar4 + 1];
                uVar10 = local_103c[iVar12];
LAB_00298f36:
                iVar9 = iVar4;
                iVar13 = iVar12;
                uVar14 = uVar10;
              }
              if ((int)uVar8 < (int)uVar14) break;
              local_1450[iVar5 + 1] = iVar13;
              iVar4 = iVar9 * 2;
              iVar5 = iVar9;
            } while (iVar4 <= local_145c);
          }
          local_1450[iVar5 + 1] = iVar11;
          iVar4 = local_1450[2];
          iVar11 = *local_1460;
          local_1450[2] = iVar11;
          if (local_1470 < 2) {
            iVar9 = 1;
          }
          else {
            uVar8 = local_103c[iVar11];
            iVar5 = 2;
            iVar9 = 1;
            do {
              if (iVar5 < local_1470) {
                iVar12 = iVar5 + 1;
                iVar13 = local_1450[iVar5 + 1];
                iVar1 = local_1450[iVar5 + 2];
                uVar14 = local_103c[iVar1];
                uVar10 = local_103c[iVar13];
                if ((int)uVar10 <= (int)uVar14) goto LAB_0029900e;
              }
              else {
                iVar13 = local_1450[iVar5 + 1];
                uVar10 = local_103c[iVar13];
LAB_0029900e:
                iVar12 = iVar5;
                iVar1 = iVar13;
                uVar14 = uVar10;
              }
              if ((int)uVar8 < (int)uVar14) break;
              local_1450[iVar9 + 1] = iVar1;
              iVar5 = iVar12 * 2;
              iVar9 = iVar12;
            } while (iVar5 <= local_1470);
          }
          local_1464 = local_1464 + 1;
          local_1450[iVar9 + 1] = iVar11;
          uVar8 = local_103c[iVar4];
          local_82c[iVar4] = local_1464;
          local_82c[iVar3] = local_1464;
          uVar10 = uVar8 & 0xff;
          uVar14 = local_103c[iVar3] & 0xff;
          if (uVar14 < uVar10) {
            uVar14 = uVar10;
          }
          uVar14 = uVar14 + 1 | (uVar8 & 0xffffff00) + (local_103c[iVar3] & 0xffffff00);
          local_103c[local_1464] = uVar14;
          local_82c[local_1464] = -1;
          *local_1460 = local_1464;
          iVar11 = local_1450[(local_145c >> 1) + 1];
          uVar8 = local_103c[iVar11];
          iVar3 = local_145c;
          iVar4 = local_145c >> 1;
          while ((int)uVar14 < (int)uVar8) {
            local_1450[iVar3 + 1] = iVar11;
            iVar11 = local_1450[(iVar4 >> 1) + 1];
            iVar3 = iVar4;
            iVar4 = iVar4 >> 1;
            uVar8 = local_103c[iVar11];
          }
          local_1460 = local_1460 + -1;
          local_1470 = local_1470 + -1;
          local_1450[iVar3 + 1] = local_1464;
        } while (local_145c != 1);
        iVar11 = param_3 * 2 + -1;
      }
    }
    if (0x203 < iVar11) {
      BZ2_bz__AssertH__fail(0x7d2);
    }
    if (param_3 < 1) {
      return;
    }
    bVar2 = false;
    iVar11 = 1;
    do {
      iVar3 = local_82c[iVar11];
      if (iVar3 < 0) {
        iVar4 = 0;
      }
      else {
        iVar4 = 0;
        do {
          iVar3 = local_82c[iVar3];
          iVar4 = iVar4 + 1;
        } while (-1 < iVar3);
      }
      param_1[iVar11 + -1] = (uchar)iVar4;
      if (param_4 < iVar4) {
        bVar2 = true;
      }
      iVar11 = iVar11 + 1;
    } while (iVar11 != param_3 + 1);
    if (!bVar2) {
      return;
    }
    if (param_3 != 1) {
      puVar6 = local_103c + 1;
      do {
        puVar7 = puVar6 + 1;
        *puVar6 = ((((int)*puVar6 >> 8) - ((int)*puVar6 >> 0x1f) >> 1) + 1) * 0x100;
        puVar6 = puVar7;
      } while (puVar7 != local_103c + param_3);
    }
  } while( true );
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

Just a Signatures{} block, ready to drop into a gamedata file. Wire it up in your plugin however you like - SDKCall, DHooks, raw memory ops, or anything else.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)