L L4D2node

V_atoi64

0x0025cc30 · 503 bytes · __cdecl

_Z8V_atoi64PKc

Decompiled

undefined (1 param)

/* V_atoi64(char const*) */

undefined8 V_atoi64(char *param_1)

{
  char *pcVar1;
  char cVar2;
  ulonglong uVar3;
  uint uVar4;
  undefined4 uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  int iVar11;
  int local_20;
  uint local_1c;
  char *local_18;
  
  cVar2 = *param_1;
  uVar4 = (uint)cVar2;
  if (cVar2 == '-') {
    uVar4 = (uint)param_1[1];
    local_1c = 0xffffffff;
    param_1 = param_1 + 1;
    local_20 = -1;
  }
  else if (cVar2 == '+') {
    uVar4 = (uint)param_1[1];
    local_1c = 1;
    param_1 = param_1 + 1;
    local_20 = 0;
  }
  else {
    local_1c = 1;
    local_20 = 0;
  }
  if ((char)uVar4 == '0') {
    if ((param_1[1] & 0xdfU) == 0x58) {
      iVar11 = 0;
      uVar4 = 0;
      local_18 = param_1 + 2;
      while( true ) {
        while( true ) {
          while( true ) {
            pcVar1 = local_18 + 1;
            uVar6 = (uint)*local_18;
            iVar9 = (int)uVar6 >> 0x1f;
            local_18 = pcVar1;
            if ((iVar9 + -1 + (uint)(0x2f < uVar6) != 0) || (9 < uVar6 - 0x30)) break;
            uVar7 = uVar4 >> 0x1c;
            uVar8 = uVar4 * 0x10;
            uVar10 = uVar8 + uVar6;
            uVar4 = uVar10 - 0x30;
            iVar11 = (iVar11 << 4 | uVar7) + iVar9 + (uint)CARRY4(uVar8,uVar6) + -1 +
                     (uint)(0x2f < uVar10);
          }
          if ((iVar9 + -1 + (uint)(0x60 < uVar6) != 0) || (5 < uVar6 - 0x61)) break;
          uVar7 = uVar4 >> 0x1c;
          uVar8 = uVar4 * 0x10;
          uVar10 = uVar8 + uVar6;
          uVar4 = uVar10 - 0x57;
          iVar11 = (iVar11 << 4 | uVar7) + iVar9 + (uint)CARRY4(uVar8,uVar6) + -1 +
                   (uint)(0x56 < uVar10);
        }
        if ((iVar9 + -1 + (uint)(0x40 < uVar6) != 0) || (5 < uVar6 - 0x41)) break;
        uVar7 = uVar4 >> 0x1c;
        uVar8 = uVar4 * 0x10;
        uVar10 = uVar8 + uVar6;
        uVar4 = uVar10 - 0x37;
        iVar11 = (iVar11 << 4 | uVar7) + iVar9 + (uint)CARRY4(uVar8,uVar6) + -1 +
                 (uint)(0x36 < uVar10);
      }
      return CONCAT44((int)((ulonglong)local_1c * (ulonglong)uVar4 >> 0x20) +
                      local_1c * iVar11 + local_20 * uVar4,
                      (int)((ulonglong)local_1c * (ulonglong)uVar4));
    }
    iVar11 = 0;
    uVar4 = 0x30;
  }
  else {
    if ((char)uVar4 == '\'') {
      uVar4 = (uint)param_1[1];
      return CONCAT44((int)((ulonglong)uVar4 * (ulonglong)local_1c >> 0x20) +
                      ((int)uVar4 >> 0x1f) * local_1c + local_20 * uVar4,
                      (int)((ulonglong)uVar4 * (ulonglong)local_1c));
    }
    iVar11 = (int)uVar4 >> 0x1f;
    if ((iVar11 + -1 + (uint)(0x2f < uVar4) != 0) || (9 < uVar4 - 0x30)) {
      uVar5 = 0;
      iVar11 = 0;
      goto LAB_0025cce7;
    }
  }
  uVar6 = 0;
  iVar9 = 0;
  do {
    local_18 = param_1 + 1;
    uVar3 = (ulonglong)uVar6;
    uVar7 = (uint)(uVar3 * 10);
    uVar8 = uVar7 + uVar4;
    uVar6 = uVar8 - 0x30;
    iVar9 = (int)(uVar3 * 10 >> 0x20) + iVar9 * 10 + iVar11 + (uint)CARRY4(uVar7,uVar4) + -1 +
            (uint)(0x2f < uVar8);
    uVar4 = (uint)*local_18;
    iVar11 = (int)uVar4 >> 0x1f;
    if (iVar11 + -1 + (uint)(0x2f < uVar4) != 0) break;
    param_1 = local_18;
  } while (uVar4 - 0x30 < 10);
  uVar5 = (undefined4)((ulonglong)uVar6 * (ulonglong)local_1c);
  iVar11 = (int)((ulonglong)uVar6 * (ulonglong)local_1c >> 0x20) +
           local_20 * uVar6 + iVar9 * local_1c;
LAB_0025cce7:
  return CONCAT44(iVar11,uVar5);
}

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)