#include "pinball.h" undefined4 __thiscall FUN_0101c178(undefined **ppuParm1,int param_1,float param_2) { float fVar1; int iVar2; bool in_PF; double dVar3; if (param_1 == 1) { FUN_01011ec9(1,ppuParm1); *(undefined4 *)((int)ppuParm1 + 0x62) = *(undefined4 *)((int)ppuParm1 + 0x5a); iVar2 = *(int *)((int)ppuParm1 + 0x4a); LAB_0101c217: if (iVar2 != 0) { FUN_01009895(iVar2); } } else { if (param_1 == 2) { *(undefined4 *)((int)ppuParm1 + 0x62) = *(undefined4 *)((int)ppuParm1 + 0x5e); iVar2 = *(int *)((int)ppuParm1 + 0x46); goto LAB_0101c217; } if (param_1 < 0x3f1) { return 0; } if (0x3f3 < param_1) { if (param_1 != 0x3fc) { if (param_1 == 0x3fe) goto LAB_0101c1f0; if (param_1 != 0x400) { return 0; } } if (*(int *)((int)ppuParm1 + 6) == 0) { return 0; } if (*(int *)((int)ppuParm1 + 0x56) != 0) { FUN_01007659(*(int *)((int)ppuParm1 + 0x56)); } *(undefined4 *)((int)ppuParm1 + 0x4e) = 0xffffffff; *(undefined4 *)((int)ppuParm1 + 6) = 2; FUN_0101c070(*(undefined4 *)((int)ppuParm1 + 0x56),(int)ppuParm1); goto LAB_0101c290; } LAB_0101c1f0: param_1 = 2; *(undefined4 *)((int)ppuParm1 + 0x62) = *(undefined4 *)((int)ppuParm1 + 0x5e); } if (*(int *)((int)ppuParm1 + 0x56) != 0) { FUN_01007659(*(int *)((int)ppuParm1 + 0x56)); *(undefined4 *)((int)ppuParm1 + 0x56) = 0; } if (*(int *)((int)ppuParm1 + 6) == 0) { fVar1 = *(float *)((int)ppuParm1 + 0x62); } else { fVar1 = param_2 - *(float *)(*(int *)((int)ppuParm1 + 0x52) + 0xc9); dVar3 = floor((double)(fVar1 / *(float *)((int)ppuParm1 + 0x62))); fVar1 = fVar1 - (float)dVar3 * *(float *)((int)ppuParm1 + 0x62); if (!in_PF) { fVar1 = 0.00000000; } } *(int *)((int)ppuParm1 + 6) = param_1; *(float *)((int)ppuParm1 + 0x66) = param_2; iVar2 = FUN_010074b7(fVar1,(int)ppuParm1,(int)FUN_0101c070); *(int *)((int)ppuParm1 + 0x56) = iVar2; LAB_0101c290: FUN_0101bf98(*(void **)((int)ppuParm1 + 0x52),param_1,param_2); return 0; } // WARNING: Could not reconcile some variable overlaps undefined4 * __thiscall FUN_0101c2ba(undefined4 *puParm1,undefined4 param_1,undefined4 param_2,undefined4 param_3, int param_4,float *param_5,float *param_6,float *param_7,undefined4 param_8, undefined4 param_9,undefined4 param_10,undefined4 param_11,undefined4 param_12) { float fVar1; float fVar2; float fVar3; undefined4 *extraout_ECX; bool in_PF; float10 fVar4; float local_58; float fStack84; float local_50; float local_4c; float local_48; float fStack68; float local_40; float local_3c; float local_38; float local_34; float local_30; undefined4 local_2c; float local_28; float local_24; float local_1c; float local_18; float local_14; float local_10; undefined8 local_c; FUN_01015866(puParm1,param_1,param_2,param_3); *(undefined4 *)((int)puParm1 + 0x19) = param_11; *(undefined4 *)((int)puParm1 + 0x1d) = param_12; *puParm1 = 0x1002854; local_1c = *param_5; local_18 = param_5[1]; local_14 = param_5[2]; local_10 = *param_6; local_24 = param_6[1]; fVar1 = param_6[2]; local_c = *(double *)(param_6 + 1); local_4c = *param_7; local_48 = param_7[1]; fStack68 = param_7[2]; *(undefined4 *)((int)puParm1 + 0xd5) = param_8; *(undefined4 *)((int)puParm1 + 0xd9) = param_9; *(undefined4 *)((int)puParm1 + 0x95) = param_10; *(float *)((int)puParm1 + 0x31) = fVar1 + *(float *)(param_4 + 0x11a); fVar2 = local_14 + *(float *)(param_4 + 0x11a); *(float *)((int)puParm1 + 0x99) = local_10; *(float *)((int)puParm1 + 0x9d) = local_24; *(float *)((int)puParm1 + 0x2d) = fVar2; fVar3 = *(float *)((int)puParm1 + 0x31) * 1.00999999; *(float *)((int)puParm1 + 0xa1) = fVar1; fVar2 = fVar2 * 1.00999999; *(float *)((int)puParm1 + 0x41) = fVar3 * fVar3; *(float *)((int)puParm1 + 0xa5) = local_4c; *(float *)((int)puParm1 + 0xa9) = local_48; *(float *)((int)puParm1 + 0x3d) = fVar2 * fVar2; *(float *)((int)puParm1 + 0x21) = local_1c; *(float *)((int)puParm1 + 0xad) = fStack68; *(float *)((int)puParm1 + 0x25) = local_18; *(float *)((int)puParm1 + 0x39) = *(float *)((int)puParm1 + 0x31) * *(float *)((int)puParm1 + 0x31); *(float *)((int)puParm1 + 0x35) = *(float *)((int)puParm1 + 0x2d) * *(float *)((int)puParm1 + 0x2d); local_28 = local_10 - local_1c; local_24 = local_24 - local_18; local_40 = local_28; local_3c = local_24; FUN_01008ae9(&local_40); local_34 = local_4c - local_1c; local_30 = local_48 - local_18; FUN_01008ae9(&local_34); local_2c = 0; local_38 = 0.00000000; FUN_0101cc4b(&local_40,&local_34); fVar4 = (float10)_CIacos(); *(float *)((int)puParm1 + 0x45) = (float)fVar4; FUN_01008db8(&local_40,&local_34,&local_58); if (!in_PF) { *(float *)((int)puParm1 + 0x45) = -*(float *)((int)puParm1 + 0x45); } *(undefined4 *)((int)puParm1 + 0x15) = 0; *(undefined4 *)((int)puParm1 + 0x4d) = 0; FUN_01008ae9(&local_28); fVar1 = -local_24; *(float *)((int)puParm1 + 0x71) = fVar1 * *(float *)((int)puParm1 + 0x2d) + local_1c; *(float *)((int)puParm1 + 0x75) = local_28 * *(float *)((int)puParm1 + 0x2d) + local_18; *(float *)((int)puParm1 + 0x65) = fVar1 * *(float *)((int)puParm1 + 0x31) + local_10; *(float *)((int)puParm1 + 0x69) = local_28 * *(float *)((int)puParm1 + 0x31) + (float)local_c; local_24 = -local_28; local_28 = -fVar1; *(float *)((int)puParm1 + 0x7d) = local_28 * *(float *)((int)puParm1 + 0x2d) + local_1c; *(float *)((int)puParm1 + 0x81) = local_24 * *(float *)((int)puParm1 + 0x2d) + local_18; *(float *)((int)puParm1 + 0x89) = local_28 * *(float *)((int)puParm1 + 0x31) + local_10; *(float *)((int)puParm1 + 0x8d) = local_24 * *(float *)((int)puParm1 + 0x31) + (float)local_c; if (!in_PF) { FUN_0101b0a4((float *)((int)puParm1 + 0x65),(float *)((int)puParm1 + 0x7d)); FUN_0101b0a4(extraout_ECX,(float *)((int)puParm1 + 0x89)); } fVar1 = local_10 - *(float *)((int)puParm1 + 0x21); fVar2 = (float)local_c - *(float *)((int)puParm1 + 0x25); local_40 = local_10; local_3c = (float)local_c; local_38 = local_c._4_4_; local_58 = local_4c; fStack84 = local_48; local_50 = fStack68; local_c._4_4_ = SQRT(fVar1 * fVar1 + fVar2 * fVar2) + *(float *)(param_4 + 0x11a) + local_c._4_4_; *(float *)((int)puParm1 + 0xb1) = local_c._4_4_ * local_c._4_4_; if (in_PF) { fVar1 = *(float *)((int)puParm1 + 0xd9); } else { fVar1 = *(float *)((int)puParm1 + 0xd5); } local_c = (double)fVar1; fVar4 = FUN_0101cbf5(&local_40,&local_58); fVar4 = fVar4 / (float10)*(float *)((int)puParm1 + 0x31); *(float *)((int)puParm1 + 0xb5) = (float)((float10)local_c / (fVar4 + fVar4)); FUN_0101b0d4(); *(undefined4 *)((int)puParm1 + 0xc5) = 0; *(undefined4 *)((int)puParm1 + 0xc9) = 0; *(undefined4 *)((int)puParm1 + 0x51) = 0; *(undefined4 *)((int)puParm1 + 0xcd) = 0; *(undefined4 *)((int)puParm1 + 0xd1) = 0; return puParm1; } undefined4 * __thiscall FUN_0101c59d(void *this,int param_1,int param_2) { float *pfVar1; float *pfVar2; float *pfVar3; int iVar4; float local_74; float local_70; float local_6c; undefined4 local_68; undefined4 local_64; undefined4 local_54; undefined4 local_50; undefined4 local_20; undefined4 local_1c; undefined4 local_18; void *local_c; float *local_8; FUN_010190b3(this,param_1,param_2,0); *(undefined4 *)this = 0x1002838; FUN_0100950a(param_2,0,&local_54); *(undefined4 *)((int)this + 0x4a) = local_1c; *(undefined4 *)((int)this + 0x46) = local_18; *(undefined4 *)((int)this + 0x36) = local_50; *(undefined4 *)((int)this + 0x56) = 0; *(undefined4 *)((int)this + 0x3a) = local_54; local_c = operator_new(0xe9); if (local_c == (void *)0x0) { iVar4 = 0; } else { pfVar1 = FUN_0100978e(param_2,0,0x323); local_8 = FUN_0100978e(param_2,0,0x325); pfVar2 = FUN_0100978e(param_2,0,0x324); local_64 = *(undefined4 *)((int)this + 0x3a); local_68 = *(undefined4 *)((int)this + 0x36); local_6c = *pfVar1; local_70 = *local_8; local_74 = *pfVar2; pfVar1 = FUN_0100978e(param_2,0,0x322); pfVar2 = FUN_0100978e(param_2,0,0x321); pfVar3 = FUN_0100978e(param_2,0,800); iVar4 = FUN_0101c2ba(this,(int)this + 5,local_20,param_1,pfVar3,pfVar2,pfVar1,local_74,local_70, local_6c,local_68,local_64); } *(int *)((int)this + 0x52) = iVar4; if (iVar4 != 0) { *(float *)((int)this + 0x5a) = *(float *)(iVar4 + 0xd5) / (float)(*(int *)(*(int *)(*(int *)((int)this + 0x22) + 4) + 4) + -1); *(float *)((int)this + 0x5e) = *(float *)(iVar4 + 0xd9) / (float)(*(int *)(*(int *)(*(int *)((int)this + 0x22) + 4) + 4) + -1); } *(undefined4 *)((int)this + 0x4e) = 0; *(undefined4 *)((int)this + 0x66) = 0; return (undefined4 *)this; } undefined4 * __thiscall FUN_0101c6d7(void *this,byte param_1) { FUN_0101c047((undefined4 *)this); if ((param_1 & 1) != 0) { operator_delete(this); } return (undefined4 *)this; } undefined4 * __thiscall FUN_0101c6fd(void *this,undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, undefined4 param_5,undefined4 param_6,undefined4 param_7) { FUN_01015866(this,param_1,param_2,param_3); *(undefined4 *)((int)this + 0x45) = param_4; *(undefined4 *)((int)this + 0x49) = param_5; *(undefined4 *)((int)this + 0x4d) = param_6; *(undefined4 *)((int)this + 0x51) = param_7; *(undefined4 *)this = 0x1002864; FUN_01008beb((int)this + 0x15,param_4,param_5,param_6,param_7); return (undefined4 *)this; } void __thiscall FUN_0101c764(void *this,undefined4 param_1) { FUN_01008c8f(param_1,(int)this + 0x15); return; } undefined4 * __thiscall FUN_0101c77e(void *this,undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4 ,undefined4 *param_5) { undefined4 uVar1; FUN_01015866(this,param_1,param_2,param_3); *(undefined4 *)this = 0x1002864; *(undefined4 *)((int)this + 0x45) = *param_4; *(undefined4 *)((int)this + 0x49) = param_4[1]; *(undefined4 *)((int)this + 0x4d) = *param_5; uVar1 = param_5[1]; *(undefined4 *)((int)this + 0x51) = uVar1; FUN_01008beb((int)this + 0x15,*(undefined4 *)((int)this + 0x45),*(undefined4 *)((int)this + 0x49), *(undefined4 *)((int)this + 0x4d),uVar1); return (undefined4 *)this; } void __thiscall FUN_0101c7e6(void *this,undefined4 param_1,undefined4 param_2) { (**(code **)(**(int **)((int)this + 4) + 0x14)) (param_1,(int)this + 0x39,(int)this + 0x15,param_2,this); return; } void __thiscall FUN_0101c813(void *this,float param_1) { float fVar1; float fVar2; float fVar3; fVar1 = param_1 * *(float *)((int)this + 0x15); param_1 = param_1 * *(float *)((int)this + 0x19); fVar2 = fVar1 + *(float *)((int)this + 0x45); *(float *)((int)this + 0x45) = fVar2; fVar3 = param_1 + *(float *)((int)this + 0x49); *(float *)((int)this + 0x49) = fVar3; fVar1 = fVar1 + *(float *)((int)this + 0x4d); *(float *)((int)this + 0x4d) = fVar1; param_1 = param_1 + *(float *)((int)this + 0x51); *(float *)((int)this + 0x51) = param_1; FUN_01008beb((float *)((int)this + 0x15),fVar2,fVar3,fVar1,param_1); return; } uint __fastcall FUN_0101c87b(int iParm1) { float fVar1; float fVar2; float fVar3; float fVar4; int iVar5; uint uVar6; uint uVar7; bool in_PF; bool bVar8; int local_1c; int local_18; int local_c; uint local_8; local_c = FUN_0100b0f4(*(undefined4 *)(iParm1 + 0x45)); local_8 = FUN_0100b1ae(*(undefined4 *)(iParm1 + 0x49)); iVar5 = FUN_0100b0f4(*(undefined4 *)(iParm1 + 0x4d)); uVar6 = FUN_0100b1ae(*(undefined4 *)(iParm1 + 0x51)); if (in_PF) { local_18 = -1; } else { local_18 = 1; } uVar7 = uVar6 & 0xffff0000 | (uint)(ushort)((ushort)(*(float *)(iParm1 + 0x49) < *(float *)(iParm1 + 0x51)) << 8 | (ushort)(*(float *)(iParm1 + 0x49) == *(float *)(iParm1 + 0x51)) << 0xe); if (in_PF) { local_1c = -1; } else { local_1c = 1; } if (local_8 == uVar6) { if (local_18 == 1) { while (local_c <= iVar5) { uVar7 = FUN_0100b961(DAT_0102503c,local_c,local_8,iParm1); local_c = local_c + 1; } } else { while (iVar5 <= local_c) { uVar7 = FUN_0100b961(DAT_0102503c,local_c,local_8,iParm1); local_c = local_c + -1; } } } else { if (local_c == iVar5) { if (local_1c == 1) { while ((int)local_8 <= (int)uVar6) { uVar7 = FUN_0100b961(DAT_0102503c,local_c,local_8,iParm1); local_8 = local_8 + 1; } } else { while ((int)uVar6 <= (int)local_8) { uVar7 = FUN_0100b961(DAT_0102503c,local_c,local_8,iParm1); local_8 = local_8 - 1; } } } else { fVar1 = (*(float *)(iParm1 + 0x49) - *(float *)(iParm1 + 0x51)) / (*(float *)(iParm1 + 0x45) - *(float *)(iParm1 + 0x4d)); fVar2 = *(float *)(iParm1 + 0x49) - fVar1 * *(float *)(iParm1 + 0x45); FUN_0100b961(DAT_0102503c,local_c,local_8,iParm1); if (local_18 == 1) { bVar8 = local_1c == 1; local_1c = local_c + 1; if (bVar8) { do { if (in_PF) { if (!in_PF) { local_c = local_c + 1; } local_8 = local_8 + 1; } else { local_c = local_c + 1; } uVar7 = FUN_0100b961(DAT_0102503c,local_c,local_8,iParm1); } while ((local_c != iVar5) || (local_8 != uVar6)); } else { do { fVar3 = (float)local_8 * DAT_0102503c[1] + DAT_0102503c[7]; fVar4 = ((float)local_1c * *DAT_0102503c + DAT_0102503c[6]) * fVar1 + fVar2; if ((ushort)((ushort)(fVar4 < fVar3) << 8 | (ushort)(fVar4 == fVar3) << 0xe) == 0) { local_c = local_c + 1; local_1c = local_1c + 1; } else { if (!in_PF) { local_c = local_c + 1; local_1c = local_1c + 1; } local_8 = local_8 - 1; } uVar7 = FUN_0100b961(DAT_0102503c,local_c,local_8,iParm1); } while ((local_c != iVar5) || (local_8 != uVar6)); } } else { if (local_1c == 1) { do { if (in_PF) { if (!in_PF) { local_c = local_c + -1; } local_8 = local_8 + 1; } else { local_c = local_c + -1; } uVar7 = FUN_0100b961(DAT_0102503c,local_c,local_8,iParm1); } while ((local_c != iVar5) || (local_8 != uVar6)); } else { do { fVar3 = (float)local_8 * DAT_0102503c[1] + DAT_0102503c[7]; fVar4 = ((float)local_c * *DAT_0102503c + DAT_0102503c[6]) * fVar1 + fVar2; if ((ushort)((ushort)(fVar4 < fVar3) << 8 | (ushort)(fVar4 == fVar3) << 0xe) == 0) { local_c = local_c + -1; } else { if (!in_PF) { local_c = local_c + -1; } local_8 = local_8 - 1; } uVar7 = FUN_0100b961(DAT_0102503c,local_c,local_8,iParm1); } while ((local_c != iVar5) || (local_8 != uVar6)); } } } } return uVar7; } void FUN_0101cb8e(float *param_1,float *param_2) { *param_1 = *param_1 + *param_2; param_1[1] = param_2[1] + param_1[1]; return; } void FUN_0101cbb1(float *param_1,float param_2,float param_3,float *param_4) { float fVar1; float fVar2; float fVar3; fVar1 = *param_1; fVar2 = *param_4; fVar3 = param_4[1]; *param_1 = ((fVar1 - fVar2) * param_3 - (param_1[1] - fVar3) * param_2) + *param_4; param_1[1] = (param_1[1] - fVar3) * param_3 + (fVar1 - fVar2) * param_2 + param_4[1]; return; } float10 FUN_0101cbf5(float *param_1,float *param_2) { return SQRT(((float10)*param_1 - (float10)*param_2) * ((float10)*param_1 - (float10)*param_2) + ((float10)param_1[1] - (float10)param_2[1]) * ((float10)param_1[1] - (float10)param_2[1])); } float10 FUN_0101cc23(float param_1,float param_2,undefined4 param_3,float param_4,float param_5) { return ((float10)param_1 - (float10)param_4) * ((float10)param_1 - (float10)param_4) + ((float10)param_2 - (float10)param_5) * ((float10)param_2 - (float10)param_5); } float10 FUN_0101cc4b(float *param_1,float *param_2) { return (float10)*param_1 * (float10)*param_2 + (float10)param_1[1] * (float10)param_2[1]; } void FUN_0101cc6b(float param_1,float *param_2,float *param_3) { float10 fVar1; fVar1 = (float10)fsin((float10)param_1); *param_2 = (float)fVar1; fVar1 = (float10)fcos((float10)param_1); *param_3 = (float)fVar1; return; } void __thiscall FUN_0101cc8d(void *this,int param_1,float param_2) { undefined4 extraout_EDX; float local_1c; float local_18; float local_10; float local_c; local_10 = param_2 * *(float *)(param_1 + 0x36) + *(float *)(param_1 + 0x2a); local_c = param_2 * *(float *)(param_1 + 0x3a) + *(float *)(param_1 + 0x2e); local_1c = local_10 - *(float *)((int)this + 0x15); local_18 = local_c - *(float *)((int)this + 0x19); FUN_01008ae9(&local_1c); (**(code **)(**(int **)((int)this + 4) + 0x14))(extraout_EDX,&local_10,&local_1c,param_2,this); return; } void FUN_0101ccf3(float *param_1,float param_2) { float10 fVar1; float10 fVar2; float10 fVar3; fVar1 = (float10)fsin((float10)param_2); fVar2 = (float10)fcos((float10)param_2); fVar3 = fVar2 * (float10)*param_1 - fVar1 * (float10)param_1[1]; *param_1 = (float)fVar3; param_1[1] = (float)(fVar2 * (float10)param_1[1] + fVar3 * fVar1); return; } // Library Function - Single Match // Name: ___security_init_cookie // Library: Visual Studio 2005 Release void __cdecl ___security_init_cookie(void) { DWORD DVar1; DWORD DVar2; DWORD DVar3; uint local_14; uint local_10; _FILETIME local_c; if ((DAT_01024778 == 0) || (DAT_01024778 == 0xbb40)) { GetSystemTimeAsFileTime((LPFILETIME)&local_c); DVar1 = GetCurrentProcessId(); DVar2 = GetCurrentThreadId(); DVar3 = GetTickCount(); QueryPerformanceCounter((LARGE_INTEGER *)&local_14); DAT_01024778 = (local_10 ^ local_14 ^ local_c.dwHighDateTime ^ local_c.dwLowDateTime ^ DVar1 ^ DVar2 ^ DVar3) & 0xffff; if (DAT_01024778 == 0) { DAT_01024778 = 0xbb40; } } DAT_01024774 = ~DAT_01024778; return; } void __fastcall FUN_0101cd9e(uint uParm1,undefined4 uParm2) { HANDLE hProcess; int iVar1; EXCEPTION_RECORD *pEVar2; byte in_PF; byte in_AF; byte in_TF; byte in_IF; byte in_NT; byte in_AC; byte in_VIF; byte in_VIP; byte in_ID; UINT uExitCode; EXCEPTION_RECORD local_334; uint local_2e4; undefined4 local_2e0; undefined4 local_2dc [39]; undefined4 local_234; uint local_230; uint local_21c; _EXCEPTION_POINTERS local_c; if ((uParm1 == DAT_01024778) && ((uParm1 & 0xffff0000) == 0)) { return; } local_21c = (uint)(in_NT & 1) * 0x4000 | (uint)SBORROW4((int)&stack0xfffffffc,0x330) * 0x800 | (uint)(in_IF & 1) * 0x200 | (uint)(in_TF & 1) * 0x100 | (uint)((int)&local_334 < 0) * 0x80 | (uint)((undefined *)register0x00000010 == (undefined *)0x334) * 0x40 | (uint)(in_AF & 1) * 0x10 | (uint)(in_PF & 1) * 4 | (uint)(&stack0xfffffffc < (undefined *)0x330) | (uint)(in_ID & 1) * 0x200000 | (uint)(in_VIP & 1) * 0x100000 | (uint)(in_VIF & 1) * 0x80000 | (uint)(in_AC & 1) * 0x40000; local_2dc[0] = 0x10001; iVar1 = 0x14; pEVar2 = &local_334; while (iVar1 != 0) { iVar1 = iVar1 + -1; pEVar2->ExceptionCode = 0; pEVar2 = (EXCEPTION_RECORD *)&pEVar2->ExceptionFlags; } local_334.ExceptionCode = 0xc0000409; local_c.ExceptionRecord = &local_334; local_c.ContextRecord = (PCONTEXT)local_2dc; local_2e4 = DAT_01024778; local_2e0 = DAT_01024774; local_234 = uParm2; local_230 = uParm1; SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)0x0); UnhandledExceptionFilter(&local_c); uExitCode = 0x502; hProcess = GetCurrentProcess(); TerminateProcess(hProcess,uExitCode); return; } // Library Function - Single Match // Name: ?GetRegisteredLocation@@YGHPAD@Z // Library: Visual Studio 2005 Release // int __stdcall GetRegisteredLocation(char *) int GetRegisteredLocation(char *param_1) { LSTATUS LVar1; uint uVar2; DWORD local_c; HKEY local_8; LVar1 = RegOpenKeyExA((HKEY)0x80000000, "CLSID\\{ADB880A6-D8FF-11CF-9377-00AA003B7A11}\\InprocServer32",0,0x20019, (PHKEY)&local_8); if (LVar1 == 0) { local_c = 0x104; LVar1 = RegQueryValueExA(local_8,"",(LPDWORD)0x0,(LPDWORD)0x0,(LPBYTE)param_1,&local_c); uVar2 = (uint)(LVar1 == 0); RegCloseKey(local_8); } else { uVar2 = 0; } return uVar2; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address // Library Function - Single Match // Name: _HtmlHelpA@16 // Library: Visual Studio 2005 Release void _HtmlHelpA_16(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { int iVar1; char local_10c [260]; undefined4 local_8; local_8 = DAT_01024778; if ((DAT_0102572c == (HMODULE)0x0) && (_DAT_01025728 == 0)) { iVar1 = GetRegisteredLocation(local_10c); if (iVar1 != 0) { DAT_0102572c = LoadLibraryA(local_10c); } if (DAT_0102572c != (HMODULE)0x0) goto LAB_0101cf89; DAT_0102572c = LoadLibraryA("hhctrl.ocx"); if (DAT_0102572c != (HMODULE)0x0) goto LAB_0101cf89; LAB_0101cfa4: _DAT_01025728 = 1; } else { LAB_0101cf89: if (DAT_01025720 == (FARPROC)0x0) { DAT_01025720 = GetProcAddress(DAT_0102572c,(LPCSTR)0xe); if (DAT_01025720 == (FARPROC)0x0) goto LAB_0101cfa4; } (*DAT_01025720)(param_1,param_2,param_3,param_4); } FUN_0101cd9e(); return; } short * FUN_0101cfd0(short *param_1) { if (((param_1 == (short *)0x0) || (*param_1 != 0x5432)) || (param_1[0xde] != 0x5432)) { MessageBeep(0xffffffff); wsprintfA(s_WaveMix_V_2_3_by_Angel_M__Diaz__J_01024780, "Invalid session handle 0x%04X passed to WaveMix API",param_1); MessageBoxA((HWND)0x0,s_WaveMix_V_2_3_by_Angel_M__Diaz__J_01024780,"WavMix32",0x30); param_1 = (short *)0x0; } return param_1; } uint FUN_0101d02c(uint param_1) { if (param_1 != 0) { param_1 = (uint)(*(short *)(param_1 + 0x40) == 0x5432); } return param_1; } uint FUN_0101d04e(int *param_1) { int iVar1; int *piVar2; bool bVar3; iVar1 = 4; bVar3 = true; piVar2 = (int *)(DAT_01027be0 + 0x17c); do { if (iVar1 == 0) break; iVar1 = iVar1 + -1; bVar3 = *param_1 == *piVar2; param_1 = param_1 + 1; piVar2 = piVar2 + 1; } while (bVar3); return (uint)bVar3; } undefined4 FUN_0101d079(undefined4 param_1) { DWORD DVar1; DVar1 = GetVersion(); if ((0x7fffffff < DVar1) && (DVar1 = GetVersion(), 3 < (byte)DVar1)) { param_1 = 0; } return param_1; } void FUN_0101d0a5(UINT_PTR param_1) { UINT UVar1; tagWAVEOUTCAPSA local_3c; undefined4 local_8; local_8 = DAT_01024778; UVar1 = waveOutGetNumDevs(); if ((((int)param_1 <= (int)UVar1) && (-1 < (int)param_1)) && (UVar1 != 0)) { waveOutGetDevCapsA(param_1,(LPWAVEOUTCAPSA)&local_3c,0x34); } FUN_0101cd9e(); return; } void FUN_0101d0fc(HWAVEOUT param_1,int param_2) { UINT local_14; undefined4 local_10; undefined4 local_8; local_8 = DAT_01024778; if (param_2 == 0) { timeGetTime(); } else { local_14 = 4; waveOutGetPosition(param_1,(LPMMTIME)&local_14,0xc); (**(code **)(DAT_01027be0 + 0x1b4))(local_10,*(undefined4 *)(DAT_01027be0 + 0x1a8)); } FUN_0101cd9e(); return; } int FUN_0101d178(int param_1,int param_2) { return param_2 + param_1; } int FUN_0101d18e(int param_1,int param_2) { return param_1 - param_2; } void FUN_0101d1a2(uint param_1) { uint *puVar1; int iVar2; DWORD DVar3; UINT local_14; uint local_10; undefined4 local_8; local_8 = DAT_01024778; local_14 = 4; if (*(HWAVEOUT *)(DAT_01027be0 + 0xc) == (HWAVEOUT)0x0) { local_10 = 0; } else { waveOutGetPosition(*(HWAVEOUT *)(DAT_01027be0 + 0xc),(LPMMTIME)&local_14,0xc); } iVar2 = DAT_01027be0; if (local_10 < param_1) { *(int *)(DAT_01027be0 + 0x1a8) = param_1 - local_10; *(undefined4 *)(iVar2 + 0x1b4) = 0x101d178; } else { *(int *)(DAT_01027be0 + 0x1a8) = local_10 - param_1; *(undefined4 *)(iVar2 + 0x1b4) = 0x101d18e; } DVar3 = timeGetTime(); iVar2 = DAT_01027be0; puVar1 = (uint *)(DAT_01027be0 + 0x184); *(uint *)(DAT_01027be0 + 0x19c) = param_1; *(int *)(iVar2 + 0x1a0) = DVar3 - (param_1 * 1000) / *puVar1; FUN_0101cd9e(); return; } void FUN_0101d251(HWAVEOUT param_1) { uint uVar1; uVar1 = FUN_0101d0fc(param_1,*(int *)(DAT_01027be0 + 0x1a4)); waveOutReset(param_1); FUN_0101d1a2(uVar1); return; } void FUN_0101d285(undefined *param_1,byte **param_2,ushort *param_3,int param_4,ushort param_5) { ushort *puVar1; int *piVar2; ushort uVar3; ushort uVar4; ushort *puVar5; undefined uVar6; uint uVar7; undefined uVar8; byte *pbVar9; uint local_c; if (*(short *)(DAT_01027be0 + 0x17e) == 2) { if (param_4 == 1) { pbVar9 = *param_2; uVar3 = *param_3; uVar4 = param_3[1]; if (param_5 != 0) { uVar7 = (uint)(ushort)((param_5 - 1 >> 1) + 1); do { *param_1 = (&DAT_01025970)[(uint)uVar3 * 0x100 + (uint)*pbVar9]; param_1[1] = (&DAT_01025970)[(uint)uVar4 * 0x100 + (uint)pbVar9[1]]; param_1 = param_1 + 2; pbVar9 = pbVar9 + 2; uVar7 = uVar7 - 1; } while (uVar7 != 0); } } else { uVar3 = 0; if (param_5 != 0) { local_c = (uint)(ushort)((param_5 - 1 >> 1) + 1); do { _uVar6 = 0x80; uVar6 = 0x80; _uVar8 = 0x80; uVar8 = 0x80; if (0 < param_4) { _param_5 = param_4; puVar5 = param_3; do { pbVar9 = (byte *)((uint)uVar3 + *(int *)((int)((int)param_2 - (int)param_3) + (int)puVar5)); _uVar8 = _uVar8 + -0x80 + (uint)(byte)(&DAT_01025970)[(uint)*pbVar9 + (uint)*puVar5 * 0x100]; uVar8 = (undefined)_uVar8; puVar1 = puVar5 + 1; puVar5 = puVar5 + 2; _param_5 = _param_5 + -1; _uVar6 = _uVar6 + -0x80 + (uint)(byte)(&DAT_01025970)[(uint)pbVar9[1] + (uint)*puVar1 * 0x100]; uVar6 = (undefined)_uVar6; } while (_param_5 != 0); if (_uVar8 < 0) { uVar8 = 0; } else { if (0xff < _uVar8) { uVar8 = 0xff; } } if (_uVar6 < 0) { uVar6 = 0; } else { if (0xff < _uVar6) { uVar6 = 0xff; } } } uVar3 = uVar3 + 2; *param_1 = uVar8; param_1[1] = uVar6; param_1 = param_1 + 2; local_c = local_c - 1; } while (local_c != 0); } } } else { if (param_4 == 1) { pbVar9 = *param_2; uVar3 = param_3[1]; uVar4 = *param_3; if (param_5 != 0) { uVar7 = (uint)param_5; do { *param_1 = (&DAT_01025970) [((int)((uint)uVar3 + (uint)uVar4) / 2 & 0xffffU) * 0x100 + (uint)*pbVar9]; param_1 = param_1 + 1; pbVar9 = pbVar9 + 1; uVar7 = uVar7 - 1; } while (uVar7 != 0); } } else { uVar3 = 0; if (param_5 != 0) { local_c = (uint)param_5; do { _uVar8 = 0x80; uVar8 = 0x80; if (0 < param_4) { _param_5 = param_4; puVar5 = param_3; do { uVar4 = *puVar5; puVar1 = puVar5 + 1; piVar2 = (int *)((int)puVar5 + (int)((int)param_2 - (int)param_3)); puVar5 = puVar5 + 2; _param_5 = _param_5 + -1; _uVar8 = _uVar8 + -0x80 + (uint)(byte)(&DAT_01025970) [(uint)*(byte *)(*piVar2 + (uint)uVar3) + ((int)((uint)*puVar1 + (uint)uVar4) / 2 & 0xffffU) * 0x100]; uVar8 = (undefined)_uVar8; } while (_param_5 != 0); if (_uVar8 < 0) { uVar8 = 0; } else { if (0xff < _uVar8) { uVar8 = 0xff; } } } uVar3 = uVar3 + 1; local_c = local_c - 1; *param_1 = uVar8; param_1 = param_1 + 1; } while (local_c != 0); } } } return; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address void FUN_0101d491(void) { undefined4 *puVar1; undefined4 *puVar2; puVar2 = &DAT_01026470; do { puVar1 = puVar2 + 0xf; *(undefined4 **)puVar2 = puVar1; puVar2 = puVar1; } while ((int)puVar1 < 0x1027b68); DAT_01025964 = &DAT_01026470; _DAT_01027ba4 = 0; return; } void FUN_0101d4b9(void) { undefined4 uVar1; if (DAT_01025964 == (undefined4 *)0x0) { return; } uVar1 = *DAT_01025964; *DAT_01025964 = 0; DAT_01025964 = (undefined4 *)uVar1; return; } void FUN_0101d4d4(undefined4 *param_1) { if (param_1 != (undefined4 *)0x0) { *(undefined4 **)param_1 = DAT_01025964; DAT_01025964 = param_1; } return; } void FUN_0101d4f6(HWAVEOUT param_1,int param_2) { LPWAVEHDR *ppwVar1; HGLOBAL hMem; int iVar2; iVar2 = 0; do { ppwVar1 = (LPWAVEHDR *)(param_2 + iVar2 * 4); if (*ppwVar1 != (LPWAVEHDR)0x0) { waveOutUnprepareHeader(param_1,*ppwVar1,0x20); hMem = GlobalHandle(*ppwVar1); GlobalUnlock(hMem); hMem = GlobalHandle(*ppwVar1); GlobalFree(hMem); *ppwVar1 = (LPWAVEHDR)0x0; } iVar2 = iVar2 + 1; } while (iVar2 < 10); return; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address undefined4 FUN_0101d549(HWAVEOUT param_1,int param_2) { uint *puVar1; int **ppiVar2; HGLOBAL hMem; int *piVar3; MMRESULT MVar4; int iVar5; iVar5 = 0; do { hMem = GlobalAlloc(0x2000,0x2b41); piVar3 = (int *)GlobalLock(hMem); ppiVar2 = (int **)(param_2 + iVar5 * 4); *ppiVar2 = piVar3; if (piVar3 == (int *)0x0) { if (_DAT_01027be4 != 0) { MessageBoxA((HWND)0x0, "Unable to allocate memory for waveform data. Try making more memory available by closing other applications." ,"WavMix32",0x30); } while (iVar5 = iVar5 + -1, -1 < iVar5) { hMem = GlobalHandle(*(LPCVOID *)(param_2 + iVar5 * 4)); GlobalUnlock(hMem); hMem = GlobalHandle(*(LPCVOID *)(param_2 + iVar5 * 4)); GlobalFree(hMem); *(undefined4 *)(param_2 + iVar5 * 4) = 0; } return 0; } *(int **)piVar3 = piVar3 + 0xc; (*ppiVar2)[1] = *(int *)(DAT_01027be0 + 0x18c); (*ppiVar2)[4] = 0; (*ppiVar2)[5] = 0; (*ppiVar2)[8] = 1; iVar5 = iVar5 + 1; (*ppiVar2)[9] = 0; } while (iVar5 < 10); iVar5 = 0; do { MVar4 = waveOutPrepareHeader(param_1,*(LPWAVEHDR *)(param_2 + iVar5 * 4),0x20); if (MVar4 != 0) { if (_DAT_01027be4 != 0) { MessageBoxA((HWND)0x0,"Unable to prepare wave header.","WavMix32",0x30); } FUN_0101d4f6(param_1,param_2); return 0; } puVar1 = (uint *)(*(int *)(param_2 + iVar5 * 4) + 0x10); *puVar1 = *puVar1 | 1; iVar5 = iVar5 + 1; } while (iVar5 < 10); return 1; } void FUN_0101d649(void) { undefined4 *puVar1; puVar1 = (undefined4 *)(DAT_01027be0 + 0x198); if ((undefined *)*puVar1 == &DAT_010257e4) { *puVar1 = 0x1025770; return; } *puVar1 = 0x10257e4; return; } int * FUN_0101d66b(void) { int iVar1; int iVar2; int *piVar3; iVar1 = *(int *)(DAT_01027be0 + 400); iVar2 = 0; if (0 < iVar1) { piVar3 = *(int **)(DAT_01027be0 + 0x198); do { if (*(int *)(*piVar3 + 0x20) != 0) break; iVar2 = iVar2 + 1; piVar3 = piVar3 + 1; } while (iVar2 < iVar1); } if (iVar2 < iVar1) { iVar1 = *(int *)(DAT_01027be0 + 0x18c); piVar3 = *(int **)(*(int *)(DAT_01027be0 + 0x198) + iVar2 * 4); piVar3[8] = 0; piVar3[1] = iVar1; *(int **)piVar3 = piVar3 + 0xc; piVar3[10] = DAT_01025798; return piVar3; } return (int *)0x0; } int FUN_0101d6c8(int param_1) { int iVar1; int iVar2; int iVar3; bool bVar4; if (DAT_01027bec != 0) { if (param_1 == DAT_01027bec) { DAT_01027bec = *(int *)(param_1 + 0x2c); if (DAT_01027bec == 0) { DAT_01027bf0 = 0; } LAB_0101d727: *(undefined4 *)(param_1 + 0x2c) = 0; return param_1; } iVar2 = *(int *)(DAT_01027bec + 0x2c); iVar3 = DAT_01027bec; if (*(int *)(DAT_01027bec + 0x2c) != 0) { do { iVar1 = iVar2; iVar2 = iVar1; if (iVar1 == param_1) break; iVar2 = *(int *)(iVar1 + 0x2c); iVar3 = iVar1; } while (iVar2 != 0); if (iVar2 != 0) { bVar4 = iVar2 == DAT_01027bf0; *(undefined4 *)(iVar3 + 0x2c) = *(undefined4 *)(iVar2 + 0x2c); if (bVar4) { DAT_01027bf0 = iVar3; } goto LAB_0101d727; } } } return 0; } void thunk_FUN_0101d743(void) { int iVar1; while (iVar1 = DAT_01027bec, DAT_01027bec != 0) { *(undefined4 *)(DAT_01027bec + 0x20) = 1; FUN_0101d6c8(iVar1); } return; } void FUN_0101d743(void) { int iVar1; while (iVar1 = DAT_01027bec, DAT_01027bec != 0) { *(undefined4 *)(DAT_01027bec + 0x20) = 1; FUN_0101d6c8(iVar1); } return; } void FUN_0101d752(int param_1) { if ((*(int *)(param_1 + 0x10) != 0) && (*(HWAVEOUT *)(param_1 + 0xc) != (HWAVEOUT)0x0)) { FUN_0101d251(*(HWAVEOUT *)(param_1 + 0xc)); thunk_FUN_0101d743(); FUN_0101d4f6(*(HWAVEOUT *)(param_1 + 0xc),(int)&DAT_010257e4); FUN_0101d4f6(*(HWAVEOUT *)(param_1 + 0xc),(int)&DAT_01025770); waveOutClose(*(HWAVEOUT *)(param_1 + 0xc)); *(undefined4 *)(param_1 + 0xc) = 0; DestroyWindow(*(HWND *)(param_1 + 4)); *(undefined4 *)(param_1 + 4) = 0; } return; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address MMRESULT FUN_0101d7b1(void) { HWND *ppHVar1; HWND pHVar2; int iVar3; MMRESULT MVar4; WAVEFORMATEX local_18; if (*(int *)(DAT_01027be0 + 0xc) == 0) { pHVar2 = CreateWindowExA(0,"WavMix32","",0x8000000,0,0,0,0,(HWND)0x0,(HMENU)0x0,DAT_010257e0, (LPVOID)0x0); iVar3 = DAT_01027be0; *(HWND *)(DAT_01027be0 + 4) = pHVar2; if (pHVar2 == (HWND)0x0) { if (_DAT_01027be4 != 0) { MessageBoxA((HWND)0x0,"Failed to create callback window.","WavMix32",0x30); } } else { local_18.wFormatTag = *(WORD *)(iVar3 + 0x17c); local_18.nChannels = *(WORD *)(iVar3 + 0x17e); local_18.nSamplesPerSec = *(DWORD *)(iVar3 + 0x180); local_18.nAvgBytesPerSec = *(DWORD *)(iVar3 + 0x184); local_18.nBlockAlign = *(WORD *)(iVar3 + 0x188); local_18.wBitsPerSample = *(WORD *)(iVar3 + 0x18a); local_18.cbSize = 0; MVar4 = waveOutOpen((LPHWAVEOUT)(iVar3 + 0xc),0xffffffff,(LPCWAVEFORMATEX)&local_18, *(DWORD_PTR *)(iVar3 + 4),0,0x10000); if (MVar4 != 0) { DestroyWindow(*(HWND *)(DAT_01027be0 + 4)); *(undefined4 *)(DAT_01027be0 + 4) = 0; return MVar4; } iVar3 = FUN_0101d549(*(HWAVEOUT *)(DAT_01027be0 + 0xc),(int)&DAT_010257e4); if ((iVar3 != 0) && (iVar3 = FUN_0101d549(*(HWAVEOUT *)(DAT_01027be0 + 0xc),(int)&DAT_01025770), iVar3 != 0)) { *(undefined4 *)(DAT_01027be0 + 0x198) = 0x10257e4; goto LAB_0101d8cc; } FUN_0101d4f6(*(HWAVEOUT *)(DAT_01027be0 + 0xc),(int)&DAT_010257e4); FUN_0101d4f6(*(HWAVEOUT *)(DAT_01027be0 + 0xc),(int)&DAT_01025770); waveOutClose(*(HWAVEOUT *)(DAT_01027be0 + 0xc)); ppHVar1 = (HWND *)(DAT_01027be0 + 4); *(undefined4 *)(DAT_01027be0 + 0xc) = 0; DestroyWindow(*ppHVar1); } MVar4 = 1; } else { LAB_0101d8cc: MVar4 = 0; } return MVar4; } undefined4 FUN_0101d918(short *param_1,int param_2,uint param_3) { short *psVar1; int *piVar2; undefined4 uVar3; psVar1 = FUN_0101cfd0(param_1); if (psVar1 == (short *)0x0) { DAT_01027be0 = psVar1; return 5; } if (param_3 < 3) { if (param_3 == 0) { if (param_2 < 0x10) { LAB_0101d959: if (param_3 == 0) { if (*(int *)(psVar1 + param_2 * 2 + 0x7a) == -1) { DAT_01027be0 = psVar1; *(int *)(psVar1 + param_2 * 2 + 0x7a) = 0; psVar1[param_2 * 2 + 0x5a] = psVar1[0x58]; psVar1[param_2 * 2 + 0x5b] = psVar1[0x59]; *(int *)(psVar1 + 0x9a) = *(int *)(psVar1 + 0x9a) + 1; return 0; } DAT_01027be0 = psVar1; return 4; } if (param_3 == 1) { param_2 = 0x10; LAB_0101d96c: DAT_01027be0 = psVar1; if (-1 < param_2 + -1) { piVar2 = (int *)(psVar1 + (param_2 + -1) * 2 + 0x7a); DAT_01027be0 = psVar1; do { if (*piVar2 == -1) { *piVar2 = 0; *(short *)(piVar2 + -0x10) = psVar1[0x58]; *(short *)((int)piVar2 + -0x3e) = psVar1[0x59]; *(int *)(psVar1 + 0x9a) = *(int *)(psVar1 + 0x9a) + 1; } piVar2 = piVar2 + -1; param_2 = param_2 + -1; } while (param_2 != 0); } return 0; } if (param_3 == 2) goto LAB_0101d96c; goto LAB_0101d964; } } else { if ((param_3 != 2) || ((param_2 < 0x11 && (0 < param_2)))) goto LAB_0101d959; } uVar3 = 0xb; } else { LAB_0101d964: uVar3 = 10; } DAT_01027be0 = psVar1; return uVar3; } void FUN_0101d9e7(int param_1) { int iVar1; iVar1 = DAT_01027bec; *(undefined4 *)(param_1 + 0x2c) = 0; if (iVar1 == 0) { DAT_01027bec = param_1; } else { *(int *)(DAT_01027bf0 + 0x2c) = param_1; } DAT_01027bf0 = param_1; return; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address undefined4 FUN_0101da1d(LPWAVEHDR param_1,int param_2) { uint *puVar1; DWORD *pDVar2; undefined4 uVar3; int *piVar4; uint uVar5; uint uVar6; int **ppiVar7; MMRESULT MVar8; uint uVar9; int iVar10; uint uVar11; int iVar12; undefined4 *puVar13; uint local_20; uint local_1c; uint local_18; undefined4 *local_14; int local_10; uint local_c; uint local_8; iVar12 = DAT_01027be0; if (param_1 == (LPWAVEHDR)0x0) { uVar3 = 0; } else { local_c = 0xffffffff; local_8 = 0; ppiVar7 = (int **)(DAT_01027be0 + 0xf4); iVar10 = 0x10; do { piVar4 = *ppiVar7; if ((piVar4 != (int *)0xffffffff) && (piVar4 != (int *)0x0)) { do { if (*(uint *)(iVar12 + 0x19c) <= (uint)piVar4[0xb] && piVar4[0xb] != *(uint *)(iVar12 + 0x19c)) break; piVar4 = (int *)*piVar4; } while (piVar4 != (int *)0x0); if (piVar4 != (int *)0x0) { if ((uint)piVar4[10] < local_c) { local_c = piVar4[10]; } *(int **)(&DAT_01025730 + local_8) = piVar4; local_8 = local_8 + 1; } } ppiVar7 = ppiVar7 + 1; iVar10 = iVar10 + -1; } while (iVar10 != 0); if (local_8 == 0) { if (param_2 != 0) { param_1[1].lpData = (LPSTR)0x1; } uVar3 = 0; } else { local_14 = (undefined4 *)param_1->lpData; uVar11 = *(undefined4 *)(iVar12 + 0x19c); local_18 = (uint)*(ushort *)(iVar12 + 0x18c); local_20 = uVar11; LAB_0101dc1d: if ((short)local_18 != 0) { if (uVar11 < local_c) { uVar5 = local_18 & 0xffff; if (local_c <= uVar5 + uVar11) { uVar5 = local_c - uVar11; } uVar9 = (uVar5 & 0xffff) >> 2; puVar13 = local_14; while (uVar9 != 0) { uVar9 = uVar9 - 1; *puVar13 = 0x80808080; puVar13 = puVar13 + 1; } uVar9 = uVar5 & 3; while (uVar9 != 0) { uVar9 = uVar9 - 1; *(undefined *)puVar13 = 0x80; puVar13 = (undefined4 *)((int)puVar13 + 1); } local_14 = (undefined4 *)((int)local_14 + uVar5); uVar11 = uVar11 + uVar5; local_18 = local_18 - uVar5; local_20 = uVar11; } else { local_1c = 0; local_10 = 0; uVar5 = (local_18 & 0xffff) + uVar11; if (local_8 != 0) { do { iVar10 = (&DAT_01025730)[local_1c]; uVar9 = *(uint *)(iVar10 + 0x28); if (uVar11 < uVar9) { if (uVar9 < uVar5) { uVar5 = uVar9; } } else { if (*(uint *)(iVar10 + 0x2c) < uVar5) { uVar5 = *(uint *)(iVar10 + 0x2c); } uVar9 = uVar11 - uVar9; if (*(short *)(iVar10 + 0x1a) != 0) { uVar9 = uVar9 % *(uint *)(iVar10 + 0x24); uVar6 = (*(uint *)(iVar10 + 0x24) - uVar9) + local_20; uVar11 = local_20; if (uVar6 < uVar5) { uVar5 = uVar6; uVar11 = local_20; } } *(uint *)(&DAT_010257a0 + local_10 * 4) = *(int *)(iVar10 + 0x30) + uVar9; *(undefined2 *)(&DAT_01025810 + local_10 * 4) = *(undefined2 *)(iVar10 + 0x38); *(undefined2 *)(&DAT_01025812 + local_10 * 4) = *(undefined2 *)(iVar10 + 0x3a); local_10 = local_10 + 1; } local_1c = local_1c + 1; } while (local_1c < local_8); if (local_10 != 0) { iVar10 = uVar5 - uVar11; (**(code **)(iVar12 + 0x1ac))(local_14,&DAT_010257a0,&DAT_01025810,local_10,iVar10); local_14 = (undefined4 *)((int)local_14 + iVar10); local_18 = local_18 - iVar10; local_c = 0xffffffff; uVar11 = uVar11 + iVar10; uVar5 = 0; ppiVar7 = (int **)&DAT_01025730; do { if (*ppiVar7 == (int *)0x0) { LAB_0101dbea: local_8 = local_8 - 1; *ppiVar7 = (int *)(&DAT_01025730)[local_8]; iVar12 = DAT_01027be0; local_20 = uVar11; if (local_8 == 0) break; } else { do { puVar1 = (uint *)(*ppiVar7 + 0xb); if (uVar11 <= *puVar1 && *puVar1 != uVar11) break; piVar4 = (int *)**ppiVar7; *ppiVar7 = piVar4; } while (piVar4 != (int *)0x0); if (*ppiVar7 == (int *)0x0) goto LAB_0101dbea; uVar9 = (*ppiVar7)[10]; if (uVar9 < local_c) { local_c = uVar9; } uVar5 = uVar5 + 1; ppiVar7 = ppiVar7 + 1; } iVar12 = DAT_01027be0; local_20 = uVar11; } while (uVar5 < local_8); } } } goto LAB_0101dc1d; } pDVar2 = (DWORD *)(iVar12 + 0x19c); param_1[1].dwBufferLength = *pDVar2; *pDVar2 = *pDVar2 + *(int *)(iVar12 + 0x18c); uVar3 = 1; if (param_2 != 0) { FUN_0101d9e7((int)param_1); MVar8 = waveOutWrite(*(HWAVEOUT *)(iVar12 + 0xc),param_1,0x20); if (MVar8 != 0) { if (_DAT_01027be4 != 0) { MessageBoxA((HWND)0x0,"Failed to write block to device","WavMix32",0x30); } param_1[1].lpData = (LPSTR)0x1; FUN_0101d6c8((int)param_1); } } } } return uVar3; } void FUN_0101dc8c(void) { uint uVar1; int iVar2; int lParam; undefined4 *puVar3; WPARAM local_8; uVar1 = FUN_0101d0fc(*(HWAVEOUT *)(DAT_01027be0 + 0xc),*(int *)(DAT_01027be0 + 0x1a4)); local_8 = 0; iVar2 = 0xf4; lParam = DAT_01027be0; do { puVar3 = *(undefined4 **)(iVar2 + lParam); if ((puVar3 != (undefined4 *)0x0) && (puVar3 != (undefined4 *)0xffffffff)) { do { if (uVar1 < (uint)puVar3[0xb]) break; *(undefined4 *)(iVar2 + lParam) = *puVar3; if (*(HWND *)((int)puVar3 + 0x12) != (HWND)0x0) { PostMessageA(*(HWND *)((int)puVar3 + 0x12),0x3bd,local_8,puVar3[8]); lParam = DAT_01027be0; } FUN_0101d4d4(puVar3); puVar3 = *(undefined4 **)(iVar2 + lParam); } while (puVar3 != (undefined4 *)0x0); } local_8 = local_8 + 1; iVar2 = iVar2 + 4; if (0x133 < iVar2) { if ((*(int *)(lParam + 0x1a4) == 0) && (DAT_01027bec == 0)) { iVar2 = 0xf4; do { if ((*(int *)(iVar2 + lParam) != 0) && (*(int *)(iVar2 + lParam) != -1)) { PostMessageA(*(HWND *)(lParam + 4),0x400,0,lParam); lParam = DAT_01027be0; } iVar2 = iVar2 + 4; } while (iVar2 < 0x134); } return; } } while( true ); } void FUN_0101dd5d(void) { LPWAVEHDR pwVar1; int iVar2; DAT_01027be0 = DAT_01025798; iVar2 = DAT_01027bec; if (DAT_01025798 != 0) { while (iVar2 != 0) { if ((*(byte *)(iVar2 + 0x10) & 1) == 0) { iVar2 = *(int *)(iVar2 + 0x2c); } else { FUN_0101d6c8(iVar2); *(undefined4 *)(iVar2 + 0x20) = 1; iVar2 = DAT_01027bec; } } FUN_0101dc8c(); do { iVar2 = 1; pwVar1 = (LPWAVEHDR)FUN_0101d66b(); iVar2 = FUN_0101da1d(pwVar1,iVar2); } while (iVar2 != 0); } return; } LRESULT FUN_0101ddad(HWND param_1,UINT param_2,WPARAM param_3,LPARAM param_4) { LRESULT LVar1; if ((param_2 != 0x3bd) && (param_2 != 0x400)) { // WARNING: Could not recover jumptable at 0x0101ddc2. Too many branches // WARNING: Treating indirect jump as call LVar1 = DefWindowProcA(param_1,param_2,param_3,param_4); return LVar1; } FUN_0101dd5d(); return 0; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address undefined4 FUN_0101dde8(undefined4 param_1) { int *piVar1; undefined4 uVar2; bool bVar3; int iVar4; LPWAVEHDR pwh; MMRESULT MVar5; int local_8; *(undefined4 *)(DAT_01027be0 + 0x19c) = param_1; thunk_FUN_0101d743(); FUN_0101d649(); do { pwh = (LPWAVEHDR)FUN_0101d66b(); if (pwh == (LPWAVEHDR)0x0) { LAB_0101de3a: uVar2 = *(undefined4 *)(DAT_01027be0 + 0x19c); FUN_0101d251(*(HWAVEOUT *)(DAT_01027be0 + 0xc)); iVar4 = DAT_01027be0; piVar1 = (int *)(DAT_01027be0 + 0x194); *(undefined4 *)(DAT_01027be0 + 0x19c) = uVar2; bVar3 = 0 < *piVar1; if (bVar3) { waveOutPause(*(HWAVEOUT *)(iVar4 + 0xc)); iVar4 = DAT_01027be0; } local_8 = 0; pwh = DAT_01027bec; while (pwh != (LPWAVEHDR)0x0) { MVar5 = waveOutWrite(*(HWAVEOUT *)(iVar4 + 0xc),pwh,0x20); if (MVar5 != 0) { if (_DAT_01027be4 != 0) { MessageBoxA((HWND)0x0,"Failed to write block to device","WavMix32",0x30); } pwh[1].lpData = (LPSTR)0x1; FUN_0101d6c8((int)pwh); } if ((bVar3) && (local_8 = local_8 + 1, *(int *)(DAT_01027be0 + 0x194) <= local_8)) { waveOutRestart(*(HWAVEOUT *)(DAT_01027be0 + 0xc)); bVar3 = false; } pwh = (LPWAVEHDR)pwh[1].dwUser; iVar4 = DAT_01027be0; } if (bVar3) { waveOutRestart(*(HWAVEOUT *)(iVar4 + 0xc)); } return 1; } iVar4 = FUN_0101da1d(pwh,0); if (iVar4 == 0) { pwh[1].lpData = (LPSTR)0x1; goto LAB_0101de3a; } FUN_0101d9e7((int)pwh); } while( true ); } void FUN_0101df07(void) { int *piVar1; int iVar2; if (DAT_01027bec == 0) { iVar2 = 0; piVar1 = (int *)(DAT_01027be0 + 0xf4); do { if ((*piVar1 != 0) && (*piVar1 != -1)) { return; } iVar2 = iVar2 + 1; piVar1 = piVar1 + 1; } while (iVar2 < 0x10); FUN_0101d1a2(0); } return; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address undefined4 FUN_0101df3d(undefined4 *param_1) { bool bVar1; short *psVar2; uint uVar3; uint *puVar4; undefined4 *puVar5; uint uVar6; undefined4 *puVar7; LPWAVEHDR pwVar8; int iVar9; int iVar10; short sVar11; int *piVar12; undefined4 *puVar13; bool bVar14; undefined8 uVar15; HWND hWnd; char *lpText; undefined4 local_8; iVar10 = _DAT_01027bf8; _DAT_01027bf8 = _DAT_01027bf8 + 1; local_8 = 0xc; bVar1 = false; if (iVar10 != 0 && 0 < _DAT_01027bf8) goto LAB_0101e360; if (param_1 == (undefined4 *)0x0) { if (_DAT_01027be4 != 0) { MessageBoxA((HWND)0x0,"NULL parameters pointer passed to WaveMixPlay!","WavMix32",0x30); } local_8 = 5; goto LAB_0101e360; } psVar2 = FUN_0101cfd0(*(short **)((int)param_1 + 2)); if (psVar2 == (short *)0x0) { DAT_01027be0 = psVar2; if (_DAT_01027be4 != 0) { lpText = "Invalid session handle passed to WaveMixPlay"; DAT_01027be0 = psVar2; LAB_0101dfc0: hWnd = (HWND)0x0; LAB_0101dfc1: MessageBoxA(hWnd,lpText,"WavMix32",0x30); } } else { piVar12 = *(int **)((int)param_1 + 10); DAT_01027be0 = psVar2; hWnd = (HWND)FUN_0101d02c((uint)piVar12); if (hWnd == (HWND)0x0) { if (_DAT_01027be4 != 0) { lpText = "Invalid or NULL wave pointer passed to WaveMixPlay!"; goto LAB_0101dfc1; } } else { uVar3 = FUN_0101d04e(piVar12); if (uVar3 == 0) { wsprintfA(s_WaveMix_V_2_3_by_Angel_M__Diaz__J_01024780, "The LPMIXWAVE 0x%lx is not in the current output format, close the wave and reopen it." ,piVar12); if (_DAT_01027be4 != 0) { MessageBoxA((HWND)0x0,s_WaveMix_V_2_3_by_Angel_M__Diaz__J_01024780,"WavMix32",0x30); } local_8 = 8; goto LAB_0101e360; } if (*(int *)(psVar2 + 8) == 0) { if (_DAT_01027be4 != 0) { MessageBoxA((HWND)0x0,"Wave device not allocated, call WaveMixActivate(hMixSession,TRUE)", "WavMix32",0x30); } local_8 = 4; goto LAB_0101e360; } if (*(int *)(psVar2 + 0x9a) == 0) { if (_DAT_01027be4 != 0) { lpText = "You must open a channel before you can play a wave!"; goto LAB_0101dfc0; } } else { if ((*(byte *)((int)param_1 + 0x12) & 2) == 0) { iVar10 = *(int *)((int)param_1 + 6); } else { iVar10 = 0; iVar9 = 0; puVar4 = (uint *)(psVar2 + 0x9c); do { if (puVar4[-0x11] != 0xffffffff) { if (*(int *)(psVar2 + iVar10 * 2 + 0x7a) == 0) break; if ((iVar9 != iVar10) && (*puVar4 < *(uint *)(psVar2 + iVar10 * 2 + 0x9c))) { iVar10 = iVar9; } } iVar9 = iVar9 + 1; puVar4 = puVar4 + 1; } while (iVar9 < 0x10); *(int *)((int)param_1 + 6) = iVar10; } piVar12 = (int *)(psVar2 + 0xbc); *piVar12 = *piVar12 + 1; *(int *)(psVar2 + iVar10 * 2 + 0x9c) = *piVar12; if (*(int *)(psVar2 + iVar10 * 2 + 0x7a) != -1) { uVar15 = FUN_0101d4b9(); puVar5 = (undefined4 *)uVar15; if (puVar5 == (undefined4 *)0x0) goto LAB_0101e360; iVar10 = 7; puVar13 = puVar5; while (puVar13 = puVar13 + 1, iVar10 != 0) { iVar10 = iVar10 + -1; *puVar13 = *param_1; param_1 = param_1 + 1; } iVar10 = *(int *)((int)puVar5 + 0xe); puVar5[8] = iVar10; puVar5[9] = *(undefined4 *)(iVar10 + 0x14); iVar10 = *(int *)(iVar10 + 0x10); puVar5[0xc] = iVar10; piVar12 = (int *)(psVar2 + 0xdc); puVar5[0xd] = (iVar10 - (uint)(ushort)psVar2[0xc4]) + puVar5[9]; *(undefined4 *)((int)puVar5 + 10) = (int)((ulonglong)uVar15 >> 0x20); if ((undefined4 *)*piVar12 == (undefined4 *)0x0) { *(undefined4 **)piVar12 = puVar5; *(undefined4 **)puVar5 = puVar5; } else { *puVar5 = *(undefined4 *)*piVar12; *(undefined4 **)*piVar12 = puVar5; *(undefined4 **)piVar12 = puVar5; } if ((*(byte *)((int)puVar5 + 0x16) & 8) == 0) { FUN_0101df07(); if (*(code **)(DAT_01027be0 + 0xd8) == FUN_0101dde8) { uVar3 = FUN_0101d0fc(*(HWAVEOUT *)(DAT_01027be0 + 6),*(int *)(DAT_01027be0 + 0xd2)); } else { uVar3 = *(uint *)(DAT_01027be0 + 0xce); } psVar2 = DAT_01027be0; if (*(int *)(DAT_01027be0 + 0xdc) != 0) { do { puVar5 = *(undefined4 **)(psVar2 + 0xdc); puVar13 = (undefined4 *)*puVar5; if (puVar13 == puVar5) { *(undefined4 *)(psVar2 + 0xdc) = 0; } else { *puVar5 = *puVar13; } iVar10 = *(int *)((int)puVar13 + 10); *puVar13 = 0; if ((*(uint *)((int)puVar13 + 0x16) & 0x10) == 0) { *(short *)(puVar13 + 0xe) = psVar2[iVar10 * 2 + 0x5a]; sVar11 = psVar2[iVar10 * 2 + 0x5b]; } else { *(undefined2 *)(puVar13 + 0xe) = *(undefined2 *)(puVar13 + 7); sVar11 = *(short *)((int)puVar13 + 0x1e); } *(short *)((int)puVar13 + 0x3a) = sVar11; if (10 < *(ushort *)(puVar13 + 0xe)) { *(undefined2 *)(puVar13 + 0xe) = 10; } if (10 < *(ushort *)((int)puVar13 + 0x3a)) { *(undefined2 *)((int)puVar13 + 0x3a) = 10; } if ((*(uint *)((int)puVar13 + 0x16) & 1) == 0) { puVar5 = *(undefined4 **)(psVar2 + iVar10 * 2 + 0x7a); if (puVar5 == (undefined4 *)0x0) { *(undefined4 **)(psVar2 + iVar10 * 2 + 0x7a) = puVar13; uVar6 = uVar3; if ((*(byte *)((int)puVar13 + 0x16) & 4) == 0) { uVar6 = *(uint *)(psVar2 + 0xce); } } else { do { puVar7 = puVar5; puVar5 = (undefined4 *)*puVar7; } while ((undefined4 *)*puVar7 != (undefined4 *)0x0); *(undefined4 **)puVar7 = puVar13; uVar6 = puVar7[0xb]; if ((*(byte *)((int)puVar13 + 0x16) & 4) == 0) { if (uVar6 < *(uint *)(psVar2 + 0xce)) { uVar6 = *(uint *)(psVar2 + 0xce); } } else { if (uVar6 <= uVar3) { uVar6 = uVar3; } } } puVar13[10] = uVar6; if ((uint)puVar13[10] <= *(uint *)(psVar2 + 0xce) && *(uint *)(psVar2 + 0xce) != puVar13[10]) { bVar1 = true; } } else { puVar5 = *(undefined4 **)(psVar2 + iVar10 * 2 + 0x7a); while (puVar5 != (undefined4 *)0x0) { puVar7 = (undefined4 *)*puVar5; FUN_0101d4d4(puVar5); puVar5 = puVar7; } bVar14 = DAT_01027bec != 0; *(undefined4 **)(psVar2 + iVar10 * 2 + 0x7a) = puVar13; if (bVar14) { bVar1 = true; } uVar6 = uVar3; if ((*(byte *)((int)puVar13 + 0x16) & 4) == 0) { uVar6 = *(uint *)(psVar2 + 0xce); } puVar13[10] = uVar6; } if (*(ushort *)((int)puVar13 + 0x1a) == 0xffff) { puVar13[0xb] = 0xffffffff; } else { puVar13[0xb] = (((uint)*(ushort *)((int)puVar13 + 0x1a) + 1) * puVar13[9] - (uint)(ushort)psVar2[0xc4]) + puVar13[10]; } } while (*(int *)(psVar2 + 0xdc) != 0); if ((bVar1) && (iVar10 = (**(code **)(psVar2 + 0xd8))(uVar3,0), psVar2 = DAT_01027be0, iVar10 != 0 )) goto LAB_0101e35a; } iVar10 = 0; if ((DAT_01027bec == 0) && (0 < *(int *)(psVar2 + 0xca))) { waveOutPause(*(HWAVEOUT *)(psVar2 + 6)); bVar1 = true; } else { bVar1 = false; } iVar9 = 1; pwVar8 = (LPWAVEHDR)FUN_0101d66b(); iVar9 = FUN_0101da1d(pwVar8,iVar9); while (iVar9 != 0) { if ((bVar1) && (iVar10 = iVar10 + 1, *(int *)(DAT_01027be0 + 0xca) <= iVar10)) { waveOutRestart(*(HWAVEOUT *)(DAT_01027be0 + 6)); bVar1 = false; } iVar9 = 1; pwVar8 = (LPWAVEHDR)FUN_0101d66b(); iVar9 = FUN_0101da1d(pwVar8,iVar9); } if (bVar1) { waveOutRestart(*(HWAVEOUT *)(DAT_01027be0 + 6)); } } LAB_0101e35a: local_8 = 0; goto LAB_0101e360; } } } } local_8 = 5; LAB_0101e360: _DAT_01027bf8 = _DAT_01027bf8 + -1; return local_8; }