Installed JDK 21 + Ghidra 12.1.2 (no admin, %LOCALAPPDATA%\bt411-tools beside DXSDK/cmake; runner uses 8.3 SHORT paths because Ghidra's .bat expands %JAVA_HOME% unquoted and the profile has a space). New tooling: reference/ghidra_scripts/ExportGaps.java -- ExportAll's exact output contract PLUS a gap-fill pass (force disassembly + createFunction at E8 call targets outside functions, data->code pointers at a plausible prologue, and the census's discovered starts; iterated to a fixpoint, logged to gapfill_report.tsv). tools/ghidra_reexport.sh (headless runner, 'reprocess' mode) and tools/gapdiff.py (score two censused exports); gapcensus.py now censuses any export dir. Results: 6267 -> 6472 functions (+205 created in 2 rounds: 195 census starts, 6 call targets, 4 data pointers; 56.1KB newly covered), ZERO decompile failures. Dark real code 90.4 -> 40.8 KB (54.8% recovered); game-side dark 53.1 -> 21.1 KB; regions 428 -> 321. EVERY historically dark function now has pseudocode -- including @0x4c05c4 VehicleDead, the absence that opened this issue. VALIDATION: the new pseudocode confirms this week's hand reconstruction of the crouch field-for-field (mapPosture/duckState/squatCapable/myomerEff/ novice gate/SetLegAnimation/ForceUpdate/stability alarm) -- and exposed one branch the raw pass missed: AIRBORNE AUTO-RISE (mode 3|4 && legState 1 -> forced squ), now implemented in mech4.cpp and re-benched un-regressed. PROMOTION: the re-export is canonical reference/decomp/; the previous export is preserved at reference/decomp/archive_2025export/ so old `part_0NN.c:LINE` citations still resolve (addresses are stable across both; line/shard membership is NOT -- cite @ADDR). New lead recorded: @0x4c0904 is the MASTER BTPlayer Performance (team resolution, EndMission console post, score heartbeat) -- our @0x4c083c PlayerSimulation attribution needs a re-check. KB: source-completeness, gotcha #20 (the rule is cheap now -- look it up), CLAUDE.md router/layout. Log: phases/phase-04-gap-census.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
12958 lines
292 KiB
C
12958 lines
292 KiB
C
/* @004d2be0 file=? name=FUN_004d2be0 */
|
|
|
|
undefined4 * __cdecl FUN_004d2be0(undefined4 *param_1,int param_2,int param_3)
|
|
|
|
{
|
|
FUN_0049b54c(param_1,param_2,param_3);
|
|
*param_1 = &PTR_FUN_0051e870;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d2c04 file=? name=FUN_004d2c04 */
|
|
|
|
void __cdecl FUN_004d2c04(int *param_1,byte param_2)
|
|
|
|
{
|
|
if (param_1 != (int *)0x0) {
|
|
*param_1 = (int)&PTR_FUN_0051e870;
|
|
FUN_0049b648(param_1,0);
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d2c30 file=bt_l4/btl4mssn.cpp name=FUN_004d2c30 */
|
|
|
|
void __cdecl FUN_004d2c30(int param_1,int param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
uint *puVar2;
|
|
int *piVar3;
|
|
char *pcVar4;
|
|
int iVar5;
|
|
undefined3 extraout_var;
|
|
undefined4 *puVar6;
|
|
uint uVar7;
|
|
undefined3 extraout_var_00;
|
|
undefined3 extraout_var_01;
|
|
char *pcVar8;
|
|
bool bVar9;
|
|
int local_a4 [5];
|
|
int local_90 [5];
|
|
undefined4 local_7c;
|
|
int local_78;
|
|
float local_74;
|
|
int *local_70;
|
|
int *local_6c;
|
|
int *local_68;
|
|
int *local_64;
|
|
int *local_60;
|
|
int *local_5c;
|
|
undefined4 *local_58;
|
|
uint *local_54;
|
|
uint *local_50;
|
|
uint *local_4c;
|
|
char *local_48;
|
|
char *local_44;
|
|
int *local_40;
|
|
char *local_3c;
|
|
float local_38;
|
|
int local_34;
|
|
char *local_30;
|
|
int *local_2c;
|
|
int *local_28;
|
|
char *local_24;
|
|
char *local_20;
|
|
int *local_1c;
|
|
char *local_18;
|
|
char *local_14;
|
|
char *local_10;
|
|
char *local_c;
|
|
int *local_8;
|
|
|
|
local_8 = *(int **)(*(int *)(*(int *)(DAT_004efc94 + 0x2c) + 0x14) + 0x1064);
|
|
local_8[3] = local_8[3] + 1;
|
|
*(undefined4 *)(param_1 + 0x2c) = 0;
|
|
local_c = (char *)0x0;
|
|
FUN_00404088(param_2,(char *)local_8[2],s_vehicle_0051e5b5,&local_c);
|
|
if (local_c == (char *)0x0) {
|
|
FUN_004dbb24(&DAT_00524e20,s_Error__vehicle_not_specified__0051e5bd,(char *)0x0);
|
|
FUN_004036a0(1);
|
|
}
|
|
pcVar4 = FUN_00402300(local_c);
|
|
*(char **)(param_1 + 0x2c) = pcVar4;
|
|
*(undefined4 *)(param_1 + 0x28) = 0;
|
|
local_10 = (char *)0x0;
|
|
FUN_00404088(param_2,(char *)local_8[2],s_dropzone_0051e5dc,&local_10);
|
|
if (local_10 == (char *)0x0) {
|
|
FUN_004dbb24(&DAT_00524e20,s_Error__dropzone_not_specified__0051e5e5,(char *)0x0);
|
|
FUN_004036a0(1);
|
|
}
|
|
pcVar4 = FUN_00402300(local_10);
|
|
*(char **)(param_1 + 0x28) = pcVar4;
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
FUN_004040d8(param_2,(char *)local_8[2],s_loadzones_0051e605,(int *)(param_1 + 0x3c));
|
|
*(undefined4 *)(param_1 + 0x20) = 0;
|
|
local_14 = (char *)0x0;
|
|
FUN_00404088(param_2,(char *)local_8[2],s_color_0051e60f,&local_14);
|
|
if (local_14 == (char *)0x0) {
|
|
FUN_004dbb24(&DAT_00524e20,s_Error__color_not_specified__0051e615,(char *)0x0);
|
|
FUN_004036a0(1);
|
|
}
|
|
pcVar4 = FUN_00402300(local_14);
|
|
*(char **)(param_1 + 0x20) = pcVar4;
|
|
local_18 = (char *)0x0;
|
|
FUN_00404088(param_2,(char *)local_8[2],s_patch_0051e632,&local_18);
|
|
if (local_18 == (char *)0x0) {
|
|
FUN_004dbb24(&DAT_00524e20,s_Error__patch_not_specified__0051e638,(char *)0x0);
|
|
FUN_004036a0(1);
|
|
}
|
|
FUN_00402a98((int *)&local_1c,(int *)(param_1 + 0xf8),local_18);
|
|
piVar3 = local_1c + 3;
|
|
*piVar3 = *piVar3 + -1;
|
|
if (*piVar3 == 0) {
|
|
FUN_004024d8(local_1c,3);
|
|
}
|
|
*(undefined4 *)(param_1 + 0x24) = 0;
|
|
local_20 = (char *)0x0;
|
|
FUN_00404088(param_2,(char *)local_8[2],s_badge_0051e655,&local_20);
|
|
if (local_20 == (char *)0x0) {
|
|
FUN_004dbb24(&DAT_00524e20,s_Error__badge_not_specified__0051e65b,(char *)0x0);
|
|
FUN_004036a0(1);
|
|
}
|
|
pcVar4 = FUN_00402300(local_20);
|
|
*(char **)(param_1 + 0x24) = pcVar4;
|
|
iVar5 = FUN_00404088(param_2,(char *)local_8[2],s_badge_0051e678,&local_24);
|
|
if (iVar5 == 0) {
|
|
FUN_00402a98((int *)&local_2c,(int *)(param_1 + 0xec),s_DEFAULT_0051e67e);
|
|
piVar3 = local_2c + 3;
|
|
*piVar3 = *piVar3 + -1;
|
|
if (*piVar3 == 0) {
|
|
FUN_004024d8(local_2c,3);
|
|
}
|
|
}
|
|
else {
|
|
FUN_00402a98((int *)&local_28,(int *)(param_1 + 0xec),local_24);
|
|
piVar3 = local_28 + 3;
|
|
*piVar3 = *piVar3 + -1;
|
|
if (*piVar3 == 0) {
|
|
FUN_004024d8(local_28,3);
|
|
}
|
|
}
|
|
local_30 = s_Unspecified_0051e686;
|
|
iVar5 = FUN_00404088(param_2,(char *)local_8[2],s_experience_0051e692,&local_30);
|
|
if (iVar5 == 0) {
|
|
pcVar4 = *(char **)(param_1 + 0x2c);
|
|
pcVar8 = s_camera_0051e69d;
|
|
do {
|
|
bVar9 = *pcVar4 == *pcVar8;
|
|
if (!bVar9) break;
|
|
if (*pcVar4 == '\0') goto LAB_004d2f3e;
|
|
pcVar1 = pcVar4 + 1;
|
|
bVar9 = *pcVar1 == pcVar8[1];
|
|
if (!bVar9) break;
|
|
pcVar4 = pcVar4 + 2;
|
|
pcVar8 = pcVar8 + 2;
|
|
bVar9 = *pcVar1 == '\0';
|
|
} while (!bVar9);
|
|
if (!bVar9) {
|
|
FUN_004dbb24((int *)&DAT_00524e68,(char *)local_8[2],(char *)0x0);
|
|
FUN_004dbb24((int *)&DAT_00524e68,s_page_missing_expereince__0051e6a4,(char *)0x0);
|
|
FUN_004d9c38((int *)&DAT_00524e68);
|
|
FUN_0040385c(s_Exiting_0051e6be,s_d__tesla_bt_bt_l4_BTL4MSSN_CPP_0051e6c6,0xf0);
|
|
goto LAB_004d3052;
|
|
}
|
|
}
|
|
LAB_004d2f3e:
|
|
pcVar8 = s_Unspecified_0051e6e5;
|
|
pcVar4 = local_30;
|
|
do {
|
|
if (*pcVar8 != *pcVar4) goto LAB_004d2f68;
|
|
bVar9 = true;
|
|
if (*pcVar8 == '\0') break;
|
|
pcVar1 = pcVar8 + 1;
|
|
if (*pcVar1 != pcVar4[1]) goto LAB_004d2f68;
|
|
pcVar8 = pcVar8 + 2;
|
|
pcVar4 = pcVar4 + 2;
|
|
bVar9 = *pcVar1 == '\0';
|
|
} while (!bVar9);
|
|
if (!bVar9) {
|
|
LAB_004d2f68:
|
|
iVar5 = FUN_004d4b58(local_30,s_novice_0051e6f1);
|
|
if (iVar5 == 0) {
|
|
*(undefined4 *)(param_1 + 0xe4) = 0;
|
|
}
|
|
else {
|
|
iVar5 = FUN_004d4b58(local_30,s_standard_0051e6f8);
|
|
if (iVar5 == 0) {
|
|
*(undefined4 *)(param_1 + 0xe4) = 1;
|
|
}
|
|
else {
|
|
iVar5 = FUN_004d4b58(local_30,s_veteran_0051e701);
|
|
if (iVar5 == 0) {
|
|
*(undefined4 *)(param_1 + 0xe4) = 2;
|
|
}
|
|
else {
|
|
iVar5 = FUN_004d4b58(local_30,s_expert_0051e709);
|
|
pcVar4 = local_30;
|
|
if (iVar5 == 0) {
|
|
*(undefined4 *)(param_1 + 0xe4) = 3;
|
|
}
|
|
else {
|
|
FUN_004dbb24((int *)&DAT_00524e68,(char *)local_8[2],(char *)0x0);
|
|
FUN_004dbb24((int *)&DAT_00524e68,s_has_an_unknown_experience_field_o_0051e710,
|
|
(char *)0x0);
|
|
FUN_004dbb24((int *)&DAT_00524e68,pcVar4,(char *)0x0);
|
|
FUN_004d9c38((int *)&DAT_00524e68);
|
|
FUN_0040385c(s_Exiting_0051e735,s_d__tesla_bt_bt_l4_BTL4MSSN_CPP_0051e73d,0x108);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
LAB_004d3052:
|
|
local_34 = 0;
|
|
bVar9 = FUN_004040d8(param_2,(char *)local_8[2],s_advancedDamage_0051e75c,&local_34);
|
|
if (CONCAT31(extraout_var,bVar9) != 0) {
|
|
if (local_34 == 0) {
|
|
*(undefined4 *)(param_1 + 0xf0) = 0;
|
|
}
|
|
else {
|
|
*(undefined4 *)(param_1 + 0xf0) = 1;
|
|
}
|
|
}
|
|
iVar5 = FUN_00404088(param_2,(char *)local_8[2],&DAT_0051e76b,&local_3c);
|
|
if (iVar5 == 0) {
|
|
FUN_004dbb24((int *)&DAT_00524e68,s_Each_Player_page_must_have_a_rol_0051e7fd,(char *)0x0);
|
|
FUN_004d9c38((int *)&DAT_00524e68);
|
|
FUN_0040385c(s_Exiting_0051e827,s_d__tesla_bt_bt_l4_BTL4MSSN_CPP_0051e82f,0x1c3);
|
|
}
|
|
else {
|
|
FUN_00402a98((int *)&local_40,(int *)(param_1 + 0xe8),local_3c);
|
|
piVar3 = local_40 + 3;
|
|
*piVar3 = *piVar3 + -1;
|
|
if (*piVar3 == 0) {
|
|
FUN_004024d8(local_40,3);
|
|
}
|
|
iVar5 = FUN_00404088(param_2,local_3c,s_model_0051e770,&local_44);
|
|
if (iVar5 == 0) {
|
|
FUN_004dbb24((int *)&DAT_00524e68,local_3c,(char *)0x0);
|
|
FUN_004dbb24((int *)&DAT_00524e68,s_page_or_model_field_missing___0051e7b7,(char *)0x0);
|
|
FUN_004d9c38((int *)&DAT_00524e68);
|
|
FUN_0040385c(s_Exiting_0051e7d6,s_d__tesla_bt_bt_l4_BTL4MSSN_CPP_0051e7de,0x1bd);
|
|
}
|
|
else {
|
|
FUN_004323c7(local_90,param_1 + 0x50);
|
|
puVar6 = (undefined4 *)(**(code **)(local_90[0] + 0x54))(local_90,param_1 + 0xe8);
|
|
FUN_00432405(local_90,2);
|
|
if (puVar6 == (undefined4 *)0x0) {
|
|
puVar6 = (undefined4 *)FUN_00402298(0x2c);
|
|
if (puVar6 == (undefined4 *)0x0) {
|
|
puVar6 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
local_48 = local_44;
|
|
local_50 = (uint *)FUN_00402298(0x10);
|
|
if (local_50 == (uint *)0x0) {
|
|
local_4c = (uint *)0x0;
|
|
}
|
|
else {
|
|
local_4c = FUN_00402460(local_50,local_48);
|
|
}
|
|
local_4c[3] = local_4c[3] + 1;
|
|
puVar6 = FUN_00429a9c(puVar6,(int *)(param_1 + 0xe8),(int *)&local_4c);
|
|
}
|
|
local_54 = local_4c;
|
|
puVar2 = local_4c + 3;
|
|
*puVar2 = *puVar2 - 1;
|
|
if (*puVar2 == 0) {
|
|
FUN_004024d8((int *)local_4c,3);
|
|
}
|
|
local_5c = puVar6 + 9;
|
|
local_60 = (int *)*local_5c;
|
|
local_60[3] = local_60[3] + 1;
|
|
local_58 = puVar6;
|
|
FUN_004323c7(local_a4,param_1 + 0x50);
|
|
iVar5 = (**(code **)(local_a4[0] + 0x54))(local_a4,&local_60);
|
|
FUN_00432405(local_a4,2);
|
|
uVar7 = (uint)(iVar5 == 0);
|
|
local_64 = local_60;
|
|
piVar3 = local_60 + 3;
|
|
*piVar3 = *piVar3 + -1;
|
|
if (*piVar3 == 0) {
|
|
FUN_004024d8(local_60,3);
|
|
}
|
|
if (uVar7 != 0) {
|
|
local_68 = local_58 + 9;
|
|
local_6c = (int *)*local_68;
|
|
local_6c[3] = local_6c[3] + 1;
|
|
(**(code **)(*(int *)(param_1 + 0x50) + 8))(param_1 + 0x50,local_58,&local_6c);
|
|
local_70 = local_6c;
|
|
piVar3 = local_6c + 3;
|
|
*piVar3 = *piVar3 + -1;
|
|
if (*piVar3 == 0) {
|
|
FUN_004024d8(local_6c,3);
|
|
}
|
|
}
|
|
}
|
|
iVar5 = FUN_00404118(param_2,local_3c,s_dmgInflctdMdfr_0051e776,&local_38);
|
|
if (iVar5 != 0) {
|
|
puVar6[3] = local_38;
|
|
}
|
|
iVar5 = FUN_00404118(param_2,local_3c,s_dmgRcvdMdfr_0051e785,&local_38);
|
|
if (iVar5 != 0) {
|
|
local_74 = local_38;
|
|
puVar6[4] = local_38;
|
|
}
|
|
iVar5 = FUN_00404118(param_2,local_3c,s_dmgBias_0051e791,&local_38);
|
|
if (iVar5 != 0) {
|
|
puVar6[6] = local_38;
|
|
}
|
|
iVar5 = FUN_00404118(param_2,local_3c,s_friendlyFire_0051e799,&local_38);
|
|
if (iVar5 != 0) {
|
|
puVar6[5] = local_38;
|
|
}
|
|
bVar9 = FUN_004040d8(param_2,local_3c,s_return_0051e7a6,&local_78);
|
|
if (CONCAT31(extraout_var_00,bVar9) != 0) {
|
|
puVar6[10] = local_78;
|
|
}
|
|
iVar5 = FUN_00404118(param_2,local_3c,s_killBonus_0051e7ad,&local_38);
|
|
if (iVar5 != 0) {
|
|
puVar6[7] = local_38;
|
|
}
|
|
}
|
|
}
|
|
bVar9 = FUN_004040d8(param_2,(char *)local_8[2],s_bitmapindex_0051e84e,(int *)(param_1 + 0x4c));
|
|
if (CONCAT31(extraout_var_01,bVar9) == 0) {
|
|
FUN_004dbb24(&DAT_00524e20,s_No_Bitmap_for_player_0051e85a,(char *)0x0);
|
|
FUN_004dbb24(&DAT_00524e20,(char *)local_8[2],(char *)0x0);
|
|
FUN_004d9c38(&DAT_00524e20);
|
|
}
|
|
else {
|
|
local_7c = *(undefined4 *)(param_1 + 0x4c);
|
|
iVar5 = (**(code **)(*(int *)(param_1 + 0x68) + 0xc))(param_1 + 0x68,&local_7c);
|
|
if (((iVar5 != 0) && (*(int *)(DAT_004efc94 + 0x4c) != 0)) &&
|
|
(piVar3 = *(int **)(*(int *)(DAT_004efc94 + 0x4c) + 0x1c530), piVar3 != (int *)0x0)) {
|
|
(**(code **)(*piVar3 + 0x28))
|
|
(piVar3,1,0,0xff,0,0,0,0,iVar5,0,0,*(int *)(iVar5 + 0xc) + -1,
|
|
*(int *)(iVar5 + 0x10) + -1);
|
|
(**(code **)(*piVar3 + 8))(piVar3,1);
|
|
(**(code **)(*piVar3 + 0xc))(piVar3);
|
|
}
|
|
}
|
|
piVar3 = local_8 + 3;
|
|
*piVar3 = *piVar3 + -1;
|
|
if (*piVar3 == 0) {
|
|
FUN_004024d8(local_8,3);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d34b0 file=? name=FUN_004d34b0 */
|
|
|
|
undefined4 FUN_004d34b0(void)
|
|
|
|
{
|
|
FUN_0044d828();
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d34c4 file=? name=FUN_004d34c4 */
|
|
|
|
undefined4 * __cdecl
|
|
FUN_004d34c4(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
{
|
|
FUN_0047b410(param_1,param_2,1,param_3,param_4);
|
|
*param_1 = &PTR_FUN_0051ed9c;
|
|
FUN_004dbb24(&DAT_00524e20,s_BTL4Application__BTL4Application_0051ebd6,(char *)0x0);
|
|
FUN_004d9c38(&DAT_00524e20);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d350c file=? name=FUN_004d350c */
|
|
|
|
void __cdecl FUN_004d350c(int *param_1,byte param_2)
|
|
|
|
{
|
|
if (param_1 != (int *)0x0) {
|
|
*param_1 = (int)&PTR_FUN_0051ed9c;
|
|
FUN_0047b624(param_1,0);
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3538 file=? name=FUN_004d3538 */
|
|
|
|
undefined4 * FUN_004d3538(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)FUN_00402298(0x10);
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
puVar1 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar1 = FUN_004c1548(puVar1);
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3564 file=? name=FUN_004d3564 */
|
|
|
|
undefined4 * __cdecl FUN_004d3564(int param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
if (*(int *)(param_1 + 0xd0) == 0) {
|
|
puVar1 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar1 = (undefined4 *)FUN_00402298(0x3e0);
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
return (undefined4 *)0x0;
|
|
}
|
|
puVar1 = FUN_004ceecc(puVar1,DAT_004e8238,DAT_004e823c,1,0,1);
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d35b0 file=? name=FUN_004d35b0 */
|
|
|
|
undefined4 * __cdecl FUN_004d35b0(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
undefined4 *puVar3;
|
|
float10 fVar4;
|
|
undefined4 uVar5;
|
|
|
|
iVar1 = FUN_004dee74(s_AWE_FRONT_0051ec1e);
|
|
iVar2 = FUN_004dee74(s_AWE_REAR_0051ec28);
|
|
if ((iVar1 == 0) || (iVar2 == 0)) {
|
|
puVar3 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar3 = (undefined4 *)FUN_00402298(0x1b0);
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
puVar3 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
uVar5 = DAT_004fd550;
|
|
fVar4 = FUN_0044e19c(param_1);
|
|
puVar3 = FUN_004d2b6c(puVar3,(float)fVar4,uVar5);
|
|
}
|
|
}
|
|
return puVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3614 file=? name=FUN_004d3614 */
|
|
|
|
undefined4 * FUN_004d3614(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)FUN_00402298(0xc);
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
FUN_0044c2d0(puVar1,0x50421);
|
|
*puVar1 = &PTR_FUN_0051ed98;
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3644 file=? name=FUN_004d3644 */
|
|
|
|
undefined4 * __cdecl FUN_004d3644(undefined4 param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)FUN_00402298(0xd10);
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
puVar1 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar1 = FUN_00475c18(puVar1);
|
|
}
|
|
(**(code **)(puVar1[0x68] + 0x14))(puVar1 + 0x68,0xffffffff,param_1,7,param_1);
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d368c file=? name=FUN_004d368c */
|
|
|
|
int * FUN_004d368c(void)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
|
|
iVar1 = FUN_004dee74(s_L4GAUGE_0051ec31);
|
|
if (iVar1 == 0) {
|
|
piVar2 = (int *)0x0;
|
|
}
|
|
else {
|
|
piVar2 = (int *)FUN_00402298(0x1c53c);
|
|
if (piVar2 == (int *)0x0) {
|
|
return (int *)0x0;
|
|
}
|
|
piVar2 = FUN_004cbea0(piVar2);
|
|
}
|
|
return piVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d36c4 file=? name=FUN_004d36c4 */
|
|
|
|
undefined4 * __cdecl FUN_004d36c4(undefined4 param_1,int param_2,int param_3)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)FUN_00402298(0xfc);
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
puVar1 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar1 = FUN_004d2be0(puVar1,param_2,param_3);
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d36f4 file=bt_l4/btl4app.cpp name=FUN_004d36f4 */
|
|
|
|
int * __cdecl FUN_004d36f4(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint *puVar2;
|
|
undefined4 *puVar3;
|
|
int iVar4;
|
|
int *piVar5;
|
|
char *pcVar6;
|
|
char *pcVar7;
|
|
undefined4 uVar8;
|
|
undefined *puVar9;
|
|
char local_60 [2];
|
|
char acStack_5e [30];
|
|
undefined4 local_40;
|
|
undefined4 local_3c;
|
|
int *local_30;
|
|
uint *local_2c;
|
|
undefined4 *local_28;
|
|
uint *local_24;
|
|
undefined4 *local_20;
|
|
int *local_1c;
|
|
undefined4 *local_18;
|
|
undefined4 *local_14;
|
|
undefined4 *local_10;
|
|
int *local_c;
|
|
char *local_8;
|
|
|
|
piVar5 = (int *)0x0;
|
|
iVar1 = *(int *)(param_1 + 0x3c);
|
|
local_8 = (char *)0x0;
|
|
if (*(int *)(param_2 + 0x1c) == 0x45) {
|
|
piVar5 = FUN_0042d16c(param_2);
|
|
pcVar6 = s_ControlsMapper_0051ec39;
|
|
pcVar7 = local_60;
|
|
local_c = piVar5;
|
|
for (iVar4 = 3; iVar4 != 0; iVar4 = iVar4 + -1) {
|
|
*(undefined4 *)pcVar7 = *(undefined4 *)pcVar6;
|
|
pcVar6 = pcVar6 + 4;
|
|
pcVar7 = pcVar7 + 4;
|
|
}
|
|
*(undefined2 *)pcVar7 = *(undefined2 *)pcVar6;
|
|
pcVar7[2] = pcVar6[2];
|
|
local_40 = 0xf;
|
|
local_3c = 0x30;
|
|
if (*(int *)(iVar1 + 0xc98) == 2) {
|
|
local_10 = (undefined4 *)FUN_00402298(0x110);
|
|
if (local_10 == (undefined4 *)0x0) {
|
|
puVar3 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar3 = FUN_0047ac5c(local_10,local_c,0,local_60,&DAT_004fd318);
|
|
}
|
|
local_8 = s_Thrustmaster_0051ec48;
|
|
}
|
|
else if (*(int *)(iVar1 + 0xc98) == 4) {
|
|
local_14 = (undefined4 *)FUN_00402298(0x108);
|
|
if (local_14 == (undefined4 *)0x0) {
|
|
puVar3 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar3 = FUN_0047ad3c(local_14,local_c,0,local_60,&DAT_004fd364);
|
|
}
|
|
local_8 = &DAT_0051ec55;
|
|
}
|
|
else {
|
|
local_18 = (undefined4 *)FUN_00402298(0x108);
|
|
if (local_18 == (undefined4 *)0x0) {
|
|
puVar3 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar3 = FUN_0047aa78(local_18,local_c,0,local_60,&DAT_004fd2b0);
|
|
}
|
|
}
|
|
FUN_0042c630((int)local_c,puVar3);
|
|
}
|
|
else if (*(int *)(param_2 + 0x1c) == 0xbb9) {
|
|
piVar5 = FUN_004a2d48(param_2);
|
|
local_1c = piVar5;
|
|
FUN_00476eac(iVar1,0.05);
|
|
FUN_00476eec(iVar1,0.05);
|
|
FUN_00476f10(iVar1,0.05);
|
|
if (*(int *)(iVar1 + 0xc98) == 2) {
|
|
local_20 = (undefined4 *)FUN_00402298(0x1bc);
|
|
if (local_20 == (undefined4 *)0x0) {
|
|
puVar3 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar9 = &DAT_0051dc68;
|
|
uVar8 = 0x7dc;
|
|
local_24 = (uint *)FUN_00402298(0x10);
|
|
if (local_24 == (uint *)0x0) {
|
|
puVar2 = (uint *)0x0;
|
|
}
|
|
else {
|
|
puVar2 = FUN_00402460(local_24,s_ControlsMapper_0051ec58);
|
|
}
|
|
puVar2[3] = puVar2[3] + 1;
|
|
puVar3 = FUN_004d21d0(local_20,local_1c,0,(int *)puVar2,uVar8,puVar9);
|
|
}
|
|
local_8 = s_Thrustmaster_0051ec67;
|
|
}
|
|
else if (*(int *)(iVar1 + 0xc98) == 4) {
|
|
local_28 = (undefined4 *)FUN_00402298(0x1bc);
|
|
if (local_28 == (undefined4 *)0x0) {
|
|
puVar3 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar9 = &DAT_0051dcf0;
|
|
uVar8 = 0x7dc;
|
|
local_2c = (uint *)FUN_00402298(0x10);
|
|
if (local_2c == (uint *)0x0) {
|
|
puVar2 = (uint *)0x0;
|
|
}
|
|
else {
|
|
puVar2 = FUN_00402460(local_2c,s_ControlsMapper_0051ec74);
|
|
}
|
|
puVar2[3] = puVar2[3] + 1;
|
|
puVar3 = FUN_004d266c(local_28,local_1c,0,(int *)puVar2,uVar8,puVar9);
|
|
}
|
|
local_8 = &DAT_0051ec83;
|
|
}
|
|
else {
|
|
FUN_004dbb24(&DAT_00524e20,s______Mech_has_no_controls_mappin_0051ec86,(char *)0x0);
|
|
FUN_0040385c(s_BTL4Application__MakeViewpointEn_0051ecae,
|
|
s_d__tesla_bt_bt_l4_BTL4APP_CPP_0051ecd3,400);
|
|
puVar3 = (undefined4 *)0x0;
|
|
}
|
|
FUN_0049fe40((int)local_1c,puVar3);
|
|
(**(code **)(*local_1c + 0x38))(local_1c);
|
|
}
|
|
if (((local_8 != (char *)0x0) &&
|
|
(local_30 = (int *)FUN_00407064(*(int *)(DAT_004efc94 + 0x68),piVar5[0x6f],6),
|
|
local_30 != (int *)0x0)) &&
|
|
(local_30 = (int *)FUN_004070dc(*(int *)(param_1 + 0x68),*local_30,local_8),
|
|
local_30 != (int *)0x0)) {
|
|
iVar4 = local_30[1];
|
|
local_30[1] = local_30[1] + 1;
|
|
if (iVar4 == 0) {
|
|
FUN_00406cd0((int)local_30);
|
|
}
|
|
FUN_0047703c(iVar1,(int)piVar5,(int *)local_30[0xf]);
|
|
local_30[1] = local_30[1] + -1;
|
|
}
|
|
if (*(int **)(param_1 + 0x4c) != (int *)0x0) {
|
|
FUN_0046ff64(*(int **)(param_1 + 0x4c),&DAT_0051ecf1,piVar5);
|
|
}
|
|
return piVar5;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3a2c file=? name=FUN_004d3a2c */
|
|
|
|
void __cdecl FUN_004d3a2c(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
FUN_004dbb24(&DAT_00524e20,s_BTL4Application__RunMissionMessa_0051ecf6,(char *)0x0);
|
|
FUN_004d9c38(&DAT_00524e20);
|
|
iVar1 = *(int *)(param_1 + 0x50);
|
|
*(undefined4 *)(iVar1 + 8) = *(undefined4 *)(iVar1 + 4);
|
|
*(uint *)(iVar1 + 4) = *(uint *)(iVar1 + 4) | 0x400000;
|
|
FUN_004dbb24(&DAT_00524e20,s_Turning_Plasma_Score_Display_On_0051ed20,(char *)0x0);
|
|
FUN_004d9c38(&DAT_00524e20);
|
|
FUN_0047b788(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3a94 file=? name=FUN_004d3a94 */
|
|
|
|
void __cdecl FUN_004d3a94(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x50);
|
|
*(undefined4 *)(iVar1 + 8) = *(undefined4 *)(iVar1 + 4);
|
|
*(uint *)(iVar1 + 4) = *(uint *)(iVar1 + 4) & 0xffbfffff;
|
|
FUN_0047b864(param_1);
|
|
FUN_004dbb24(&DAT_00524e20,s_Turning_Plasma_Score_Display_Off_0051ed40,(char *)0x0);
|
|
FUN_004d9c38(&DAT_00524e20);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3b74 file=? name=FUN_004d3b74 */
|
|
|
|
undefined4 * __cdecl FUN_004d3b74(undefined4 *param_1)
|
|
|
|
{
|
|
FUN_0047c5d8(param_1);
|
|
*param_1 = &PTR_FUN_0051f204;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3b90 file=? name=FUN_004d3b90 */
|
|
|
|
void __cdecl FUN_004d3b90(undefined4 param_1,uint *param_2)
|
|
|
|
{
|
|
FUN_004d3ecc(DAT_004efc94,param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3bb8 file=? name=FUN_004d3bb8 */
|
|
|
|
void __cdecl FUN_004d3bb8(int *param_1,byte param_2)
|
|
|
|
{
|
|
if (param_1 != (int *)0x0) {
|
|
*param_1 = (int)&PTR_FUN_0051f204;
|
|
FUN_0047c734(param_1,0);
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3be4 file=? name=FUN_004d3be4 */
|
|
|
|
undefined4 * __cdecl FUN_004d3be4(undefined4 *param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
{
|
|
FUN_004d34c4(param_1,param_2,0x3eb,&DAT_0051ee5c);
|
|
*param_1 = &PTR_FUN_0051f1a4;
|
|
param_1[6] = param_3;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3c14 file=? name=FUN_004d3c14 */
|
|
|
|
undefined4 * FUN_004d3c14(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)FUN_00402298(0x28);
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
puVar1 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar1 = FUN_0047bfc4(puVar1);
|
|
}
|
|
return puVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3c34 file=? name=FUN_004d3c34 */
|
|
|
|
void __cdecl FUN_004d3c34(int *param_1)
|
|
|
|
{
|
|
FUN_0047b468(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3c44 file=? name=FUN_004d3c44 */
|
|
|
|
void __cdecl FUN_004d3c44(int param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = (undefined4 *)FUN_00402298(0x10);
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
puVar1 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
puVar1 = FUN_004d3b74(puVar1);
|
|
}
|
|
FUN_0044de1c(*(int *)(param_1 + 100),puVar1);
|
|
puVar1 = (undefined4 *)FUN_00402298(0x10);
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
FUN_0044dd08(puVar1,0x48);
|
|
*puVar1 = &PTR_FUN_004f037c;
|
|
}
|
|
FUN_0044de1c(*(int *)(param_1 + 100),puVar1);
|
|
puVar1 = (undefined4 *)FUN_00402298(0x10);
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
FUN_0044dd08(puVar1,0x48);
|
|
*puVar1 = &PTR_FUN_004f031c;
|
|
}
|
|
FUN_0044de1c(*(int *)(param_1 + 100),puVar1);
|
|
puVar1 = (undefined4 *)FUN_00402298(0x10);
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
FUN_0044dd08(puVar1,0x48);
|
|
*puVar1 = &PTR_FUN_004f0304;
|
|
}
|
|
FUN_0044de1c(*(int *)(param_1 + 100),puVar1);
|
|
puVar1 = (undefined4 *)FUN_00402298(0x10);
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
FUN_0044dd08(puVar1,0x48);
|
|
*puVar1 = &PTR_FUN_004f0364;
|
|
}
|
|
FUN_0044de1c(*(int *)(param_1 + 100),puVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3d40 file=? name=FUN_004d3d40 */
|
|
|
|
undefined4 __cdecl FUN_004d3d40(int param_1,int param_2)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int *piVar2;
|
|
|
|
if ((*(int *)(param_1 + 0x70) == 0) || (*(int *)(param_1 + 0x88) == 1)) {
|
|
if ((*(int *)(param_1 + 0x70) == 0) || (DAT_004efc98 != 0)) {
|
|
uVar1 = 0;
|
|
}
|
|
else {
|
|
uVar1 = 1;
|
|
}
|
|
}
|
|
else {
|
|
FUN_004dcd94();
|
|
if (DAT_004fd550 == 2) {
|
|
(**(code **)(**(int **)(param_1 + 0x3c) + 0x18))(*(int **)(param_1 + 0x3c));
|
|
}
|
|
FUN_00435794(*(int *)(param_1 + 0x34));
|
|
FUN_004363ec(*(int *)(param_1 + 0x38),param_2);
|
|
FUN_00434a08();
|
|
FUN_0043649c(*(int *)(param_1 + 0x38));
|
|
FUN_00436440(*(int *)(param_1 + 0x38),param_2);
|
|
(**(code **)(**(int **)(param_1 + 0x40) + 0x24))(*(int **)(param_1 + 0x40));
|
|
if (*(int *)(param_1 + 0x88) == 5) {
|
|
piVar2 = (int *)FUN_00414b60();
|
|
*(float *)(param_1 + 0x58) =
|
|
*(float *)(*(int *)(param_1 + 200) + 0xe0) -
|
|
(float)(*piVar2 - *(int *)(param_1 + 0x5c)) / DAT_0052140c;
|
|
}
|
|
if ((*(int *)(param_1 + 0x70) == 0) || (DAT_004efc98 != 0)) {
|
|
uVar1 = 0;
|
|
}
|
|
else {
|
|
uVar1 = 1;
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3e78 file=? name=FUN_004d3e78 */
|
|
|
|
void __cdecl FUN_004d3e78(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = FUN_0041b07c(*(int *)(param_1 + 0x60),3);
|
|
if (iVar1 == 0) {
|
|
(**(code **)(**(int **)(param_1 + 100) + 0x14))(*(int **)(param_1 + 100));
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3ea0 file=? name=FUN_004d3ea0 */
|
|
|
|
void __cdecl FUN_004d3ea0(int *param_1,byte param_2)
|
|
|
|
{
|
|
if (param_1 != (int *)0x0) {
|
|
*param_1 = (int)&PTR_FUN_0051f1a4;
|
|
FUN_004d350c(param_1,0);
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3ecc file=? name=FUN_004d3ecc */
|
|
|
|
void __cdecl FUN_004d3ecc(int param_1,uint *param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
|
|
piVar1 = (int *)FUN_0041d7f0(*(int *)(param_1 + 0x20),*param_2);
|
|
(**(code **)(*piVar1 + 0x14))(piVar1,param_2,param_2 + 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3ef8 file=? name=FUN_004d3ef8 */
|
|
|
|
void __cdecl FUN_004d3ef8(int param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int *piVar3;
|
|
|
|
if (*(int *)(param_1 + 0x88) == 3) {
|
|
piVar1 = *(int **)(param_1 + 0x18);
|
|
iVar2 = (**(code **)*piVar1)(piVar1);
|
|
piVar3 = (int *)FUN_00414b60();
|
|
*(int *)(param_1 + 0xd4) = *piVar3 - *(int *)(iVar2 + 0xc);
|
|
FUN_0044f850(piVar1);
|
|
}
|
|
FUN_004d3a2c(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d3f44 file=? name=FUN_004d3f44 */
|
|
|
|
void __cdecl FUN_004d3f44(int param_1)
|
|
|
|
{
|
|
char *pcVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
char *pcVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
char *pcVar7;
|
|
bool bVar8;
|
|
uint local_30 [5];
|
|
int local_1c [3];
|
|
int local_10;
|
|
char *local_c;
|
|
int local_8;
|
|
|
|
iVar3 = FUN_0044e13c(param_1);
|
|
if (*(int **)(param_1 + 0x18) != (int *)0x0) {
|
|
FUN_0044fac0(iVar3,*(int **)(param_1 + 0x18));
|
|
*(undefined4 *)(param_1 + 0x18) = 0;
|
|
local_8 = FUN_00403ad0(*(int *)(DAT_004efc94 + 0x24) + 0x18,s_DropZones_0051f19a);
|
|
local_c = &DAT_0051ee67;
|
|
iVar3 = 0;
|
|
while( true ) {
|
|
iVar6 = FUN_0042efe4(iVar3);
|
|
if (iVar6 == 0) break;
|
|
*local_c = (char)iVar3 + '1';
|
|
FUN_00421414(local_1c,local_8 + 0x10);
|
|
LAB_004d3fea:
|
|
do {
|
|
iVar5 = (**(code **)(local_1c[0] + 0x28))(local_1c);
|
|
if (iVar5 == 0) break;
|
|
pcVar4 = (char *)(iVar5 + 0x1c8);
|
|
pcVar7 = &DAT_0051ee64;
|
|
do {
|
|
if (*pcVar4 != *pcVar7) goto LAB_004d3fea;
|
|
bVar8 = true;
|
|
if (*pcVar4 == '\0') break;
|
|
pcVar1 = pcVar4 + 1;
|
|
if (*pcVar1 != pcVar7[1]) goto LAB_004d3fea;
|
|
pcVar4 = pcVar4 + 2;
|
|
pcVar7 = pcVar7 + 2;
|
|
bVar8 = *pcVar1 == '\0';
|
|
} while (!bVar8);
|
|
} while (!bVar8);
|
|
if (iVar5 == 0) {
|
|
FUN_00421452(local_1c,2);
|
|
}
|
|
else {
|
|
piVar2 = *(int **)(iVar6 + 0x1fc);
|
|
if (piVar2[1] == 0xbb9) {
|
|
FUN_0049fb74((int)piVar2,(undefined4 *)(iVar5 + 0x100),0);
|
|
piVar2[7] = (int)PTR_FUN_0051ee69;
|
|
piVar2[8] = DAT_0051ee6d;
|
|
piVar2[9] = DAT_0051ee71;
|
|
FUN_00419cb8((int)piVar2);
|
|
local_10 = *(int *)(DAT_004efc94 + 0x38);
|
|
FUN_00436668(local_30,(int)piVar2);
|
|
FUN_004364e4(local_10,piVar2,local_30);
|
|
}
|
|
FUN_00421452(local_1c,2);
|
|
}
|
|
iVar3 = iVar3 + 1;
|
|
}
|
|
iVar3 = *(int *)(param_1 + 0x48);
|
|
FUN_00460840(iVar3);
|
|
FUN_0045a7a8(iVar3,4);
|
|
}
|
|
FUN_004d3a94(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d40d8 file=? name=FUN_004d40d8 */
|
|
|
|
void __cdecl FUN_004d40d8(int param_1)
|
|
|
|
{
|
|
FUN_0041a1a4(**(int **)(param_1 + 0xc),0x51ee2c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4179 file=? name=FUN_004d4179 */
|
|
|
|
undefined2 FUN_004d4179(void)
|
|
|
|
{
|
|
code *pcVar1;
|
|
undefined2 uVar2;
|
|
|
|
pcVar1 = (code *)swi(0x11);
|
|
uVar2 = (*pcVar1)();
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4183 file=? name=FUN_004d4183 */
|
|
|
|
undefined2 FUN_004d4183(void)
|
|
|
|
{
|
|
code *pcVar1;
|
|
undefined2 uVar2;
|
|
|
|
pcVar1 = (code *)swi(0x12);
|
|
uVar2 = (*pcVar1)();
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d418d file=? name=FUN_004d418d */
|
|
|
|
undefined4 FUN_004d418d(void)
|
|
|
|
{
|
|
code *pcVar1;
|
|
undefined2 extraout_CX;
|
|
undefined2 extraout_DX;
|
|
|
|
pcVar1 = (code *)swi(0x1a);
|
|
(*pcVar1)();
|
|
return CONCAT22(extraout_CX,extraout_DX);
|
|
}
|
|
|
|
|
|
|
|
/* @004d45b0 file=? name=FUN_004d45b0 */
|
|
|
|
undefined4 FUN_004d45b0(void)
|
|
|
|
{
|
|
undefined4 in_EAX;
|
|
|
|
LOCK();
|
|
UNLOCK();
|
|
return in_EAX;
|
|
}
|
|
|
|
|
|
|
|
/* @004d45c6 file=? name=FUN_004d45c6 */
|
|
|
|
undefined2 __cdecl FUN_004d45c6(undefined2 param_1)
|
|
|
|
{
|
|
undefined2 uVar1;
|
|
|
|
uVar1 = in(param_1);
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d45d3 file=? name=FUN_004d45d3 */
|
|
|
|
undefined1 __cdecl FUN_004d45d3(undefined2 param_1)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
|
|
uVar1 = in(param_1);
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d45df file=? name=FUN_004d45df */
|
|
|
|
undefined2 __cdecl FUN_004d45df(undefined2 param_1)
|
|
|
|
{
|
|
undefined2 uVar1;
|
|
|
|
uVar1 = in(param_1);
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d45ec file=? name=FUN_004d45ec */
|
|
|
|
undefined1 __cdecl FUN_004d45ec(undefined2 param_1)
|
|
|
|
{
|
|
undefined1 uVar1;
|
|
|
|
uVar1 = in(param_1);
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d461f file=? name=FUN_004d461f */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void __cdecl FUN_004d461f(undefined4 param_1,int param_2,undefined4 *param_3,undefined2 *param_4)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
undefined4 uVar2;
|
|
uint uVar3;
|
|
undefined4 uVar4;
|
|
undefined4 extraout_ECX;
|
|
undefined4 extraout_EDX;
|
|
undefined2 uVar5;
|
|
undefined2 uVar6;
|
|
undefined2 uVar7;
|
|
undefined2 uVar8;
|
|
byte bVar9;
|
|
byte in_PF;
|
|
byte in_AF;
|
|
byte in_ZF;
|
|
byte in_SF;
|
|
byte in_TF;
|
|
byte in_IF;
|
|
byte in_OF;
|
|
byte in_NT;
|
|
byte in_AC;
|
|
byte in_VIF;
|
|
byte in_VIP;
|
|
byte in_ID;
|
|
|
|
uVar5 = *param_4;
|
|
uVar7 = param_4[4];
|
|
uVar8 = param_4[5];
|
|
uVar6 = param_4[3];
|
|
uVar1 = *(undefined4 *)(param_2 + 4);
|
|
uVar2 = *(undefined4 *)(param_2 + 0x14);
|
|
bVar9 = 0;
|
|
uVar4 = FUN_004d45b0();
|
|
uVar3 = (uint)(bVar9 & 1);
|
|
*param_3 = uVar4;
|
|
param_3[1] = uVar1;
|
|
param_3[2] = extraout_ECX;
|
|
param_3[3] = extraout_EDX;
|
|
param_3[4] = param_3;
|
|
param_3[5] = uVar2;
|
|
param_3[7] = (uint)(in_NT & 1) * 0x4000 | (uint)(in_OF & 1) * 0x800 | (uint)(in_IF & 1) * 0x200 |
|
|
(uint)(in_TF & 1) * 0x100 | (uint)(in_SF & 1) * 0x80 | (uint)(in_ZF & 1) * 0x40 |
|
|
(uint)(in_AF & 1) * 0x10 | (uint)(in_PF & 1) * 4 | uVar3 |
|
|
(uint)(in_ID & 1) * 0x200000 | (uint)(in_VIP & 1) * 0x100000 |
|
|
(uint)(in_VIF & 1) * 0x80000 | (uint)(in_AC & 1) * 0x40000;
|
|
param_3[6] = uVar3;
|
|
*param_4 = uVar5;
|
|
param_4[3] = uVar6;
|
|
param_4[4] = uVar7;
|
|
param_4[5] = uVar8;
|
|
if (uVar3 == 0) {
|
|
DAT_00520bcc = uVar4;
|
|
_DAT_00524dd0 = uVar4;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d46a5 file=? name=FUN_004d46a5 */
|
|
|
|
void FUN_004d46a5(void)
|
|
|
|
{
|
|
if (DAT_00525224 != 2) {
|
|
FUN_004ded48(s_This_DPMI32_module_cannot_be_run_0051f224);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d46c0 file=? name=FUN_004d46c0 */
|
|
|
|
undefined2 __cdecl FUN_004d46c0(undefined2 param_1,undefined2 param_2)
|
|
|
|
{
|
|
out(param_1,param_2);
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d46cf file=? name=FUN_004d46cf */
|
|
|
|
undefined1 __cdecl FUN_004d46cf(undefined2 param_1,undefined1 param_2)
|
|
|
|
{
|
|
out(param_1,param_2);
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d46dc file=? name=FUN_004d46dc */
|
|
|
|
undefined6 __cdecl FUN_004d46dc(undefined2 param_1,ushort param_2)
|
|
|
|
{
|
|
out(param_1,param_2);
|
|
return CONCAT24(param_1,(uint)param_2);
|
|
}
|
|
|
|
|
|
|
|
/* @004d46ed file=? name=FUN_004d46ed */
|
|
|
|
undefined6 __cdecl FUN_004d46ed(undefined2 param_1,byte param_2)
|
|
|
|
{
|
|
out(param_1,param_2);
|
|
return CONCAT24(param_1,(uint)param_2);
|
|
}
|
|
|
|
|
|
|
|
/* @004d46fc file=? name=FUN_004d46fc */
|
|
|
|
void __cdecl FUN_004d46fc(undefined2 *param_1)
|
|
|
|
{
|
|
undefined2 in_ES;
|
|
undefined2 in_CS;
|
|
undefined2 in_SS;
|
|
undefined2 in_DS;
|
|
undefined2 in_FS;
|
|
undefined2 in_GS;
|
|
|
|
*param_1 = in_ES;
|
|
param_1[1] = in_CS;
|
|
param_1[2] = in_SS;
|
|
param_1[3] = in_DS;
|
|
param_1[4] = in_FS;
|
|
param_1[5] = in_GS;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4718 file=? name=FUN_004d4718 */
|
|
|
|
uint FUN_004d4718(void)
|
|
|
|
{
|
|
HANDLE hConsoleHandle;
|
|
BOOL BVar1;
|
|
uint uVar2;
|
|
short *psVar3;
|
|
DWORD DStack_28;
|
|
uint local_24;
|
|
_INPUT_RECORD local_20;
|
|
|
|
uVar2 = DAT_0051f5d8;
|
|
if (DAT_0051f5dc == '\0') {
|
|
if (DAT_0051f5d8 == 0xffffffff) {
|
|
hConsoleHandle = GetStdHandle(0xfffffff6);
|
|
BVar1 = GetConsoleMode(hConsoleHandle,&local_24);
|
|
if (BVar1 == 1) {
|
|
if (((local_24 & 7) == 0) ||
|
|
(BVar1 = SetConsoleMode(hConsoleHandle,local_24 & 0xfffffff8), BVar1 == 1)) {
|
|
do {
|
|
do {
|
|
do {
|
|
BVar1 = ReadConsoleInputA(hConsoleHandle,&local_20,1,&DStack_28);
|
|
if (BVar1 != 1) {
|
|
uVar2 = 0xffffffff;
|
|
goto LAB_004d483d;
|
|
}
|
|
} while (local_20.Event.KeyEvent.bKeyDown == 0);
|
|
uVar2 = (uint)local_20.Event.KeyEvent.wVirtualKeyCode;
|
|
for (psVar3 = &DAT_0051f254; (uVar2 != (int)*psVar3 && (*psVar3 != -1));
|
|
psVar3 = psVar3 + 5) {
|
|
}
|
|
} while (*psVar3 == -1);
|
|
if ((local_20.Event.KeyEvent.dwControlKeyState & 3) == 0) {
|
|
if ((local_20.Event.KeyEvent.dwControlKeyState & 0xc) == 0) {
|
|
if ((local_20.Event.KeyEvent.dwControlKeyState & 0x10) == 0) {
|
|
if ((uVar2 < 0x41) || (0x5a < uVar2)) {
|
|
uVar2 = (uint)psVar3[1];
|
|
}
|
|
else {
|
|
uVar2 = (uint)(char)local_20.Event.MouseEvent.dwControlKeyState._2_1_;
|
|
}
|
|
}
|
|
else {
|
|
uVar2 = (uint)psVar3[2];
|
|
}
|
|
}
|
|
else {
|
|
uVar2 = (uint)psVar3[3];
|
|
}
|
|
}
|
|
else {
|
|
uVar2 = (uint)psVar3[4];
|
|
}
|
|
} while (uVar2 == 0xffffffff);
|
|
if ((uVar2 & 0x100) != 0) {
|
|
DAT_0051f5d8 = uVar2 & 0xff;
|
|
uVar2 = 0;
|
|
}
|
|
LAB_004d483d:
|
|
if (((local_24 & 7) != 0) && (BVar1 = SetConsoleMode(hConsoleHandle,local_24), BVar1 != 1)
|
|
) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
DAT_0051f5d8 = 0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
DAT_0051f5dc = '\0';
|
|
uVar2 = (uint)DAT_0051f5dd;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4860 file=? name=FUN_004d4860 */
|
|
|
|
uint __cdecl FUN_004d4860(byte param_1)
|
|
|
|
{
|
|
if (DAT_0051f5dc != '\0') {
|
|
return 0xffffffff;
|
|
}
|
|
DAT_0051f5dc = 1;
|
|
DAT_0051f5dd = param_1;
|
|
return (uint)param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4888 file=? name=FUN_004d4888 */
|
|
|
|
undefined4 FUN_004d4888(void)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
HANDLE hConsoleInput;
|
|
BOOL BVar2;
|
|
DWORD DStack_24;
|
|
DWORD local_20;
|
|
_INPUT_RECORD local_1c;
|
|
|
|
if (DAT_0051f5dc == '\0') {
|
|
hConsoleInput = GetStdHandle(0xfffffff6);
|
|
do {
|
|
BVar2 = GetNumberOfConsoleInputEvents(hConsoleInput,&local_20);
|
|
if (((BVar2 != 1) || (local_20 == 0)) ||
|
|
(BVar2 = PeekConsoleInputA(hConsoleInput,&local_1c,1,&DStack_24), BVar2 != 1)) break;
|
|
if ((((byte)local_1c.EventType & 1) != 0) && (local_1c.Event.KeyEvent.bKeyDown != 0)) {
|
|
return 1;
|
|
}
|
|
BVar2 = ReadConsoleInputA(hConsoleInput,&local_1c,1,&DStack_24);
|
|
} while (BVar2 == 1);
|
|
uVar1 = 0;
|
|
}
|
|
else {
|
|
uVar1 = 1;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d48f8 file=? name=FUN_004d48f8 */
|
|
|
|
char * __cdecl FUN_004d48f8(char *param_1,char param_2,int param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
undefined1 in_ZF;
|
|
|
|
if (param_3 != 0) {
|
|
do {
|
|
pcVar1 = param_1;
|
|
if (param_3 == 0) break;
|
|
param_3 = param_3 + -1;
|
|
pcVar1 = param_1 + 1;
|
|
in_ZF = param_2 == *param_1;
|
|
param_1 = pcVar1;
|
|
} while (!(bool)in_ZF);
|
|
if ((bool)in_ZF) {
|
|
return pcVar1 + -1;
|
|
}
|
|
}
|
|
return (char *)0x0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4918 file=? name=FUN_004d4918 */
|
|
|
|
undefined4 * __cdecl FUN_004d4918(undefined4 *param_1,undefined4 *param_2,uint param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 *puVar2;
|
|
|
|
puVar2 = param_1;
|
|
for (uVar1 = param_3 >> 2; uVar1 != 0; uVar1 = uVar1 - 1) {
|
|
*puVar2 = *param_2;
|
|
param_2 = param_2 + 1;
|
|
puVar2 = puVar2 + 1;
|
|
}
|
|
for (uVar1 = param_3 & 3; uVar1 != 0; uVar1 = uVar1 - 1) {
|
|
*(undefined1 *)puVar2 = *(undefined1 *)param_2;
|
|
param_2 = (undefined4 *)((int)param_2 + 1);
|
|
puVar2 = (undefined4 *)((int)puVar2 + 1);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d493c file=? name=FUN_004d493c */
|
|
|
|
undefined4 * __cdecl FUN_004d493c(undefined4 *param_1,undefined4 *param_2,uint param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined1 *puVar2;
|
|
undefined4 *puVar3;
|
|
undefined1 *puVar4;
|
|
undefined4 *puVar5;
|
|
|
|
if (param_1 < param_2) {
|
|
puVar3 = param_1;
|
|
for (uVar1 = param_3 >> 2; uVar1 != 0; uVar1 = uVar1 - 1) {
|
|
*puVar3 = *param_2;
|
|
param_2 = param_2 + 1;
|
|
puVar3 = puVar3 + 1;
|
|
}
|
|
for (uVar1 = param_3 & 3; uVar1 != 0; uVar1 = uVar1 - 1) {
|
|
*(undefined1 *)puVar3 = *(undefined1 *)param_2;
|
|
param_2 = (undefined4 *)((int)param_2 + 1);
|
|
puVar3 = (undefined4 *)((int)puVar3 + 1);
|
|
}
|
|
}
|
|
else if (param_1 != param_2) {
|
|
puVar2 = (undefined1 *)((int)param_2 + (param_3 - 1));
|
|
puVar4 = (undefined1 *)((int)param_1 + (param_3 - 1));
|
|
for (uVar1 = param_3 & 3; uVar1 != 0; uVar1 = uVar1 - 1) {
|
|
*puVar4 = *puVar2;
|
|
puVar2 = puVar2 + -1;
|
|
puVar4 = puVar4 + -1;
|
|
}
|
|
puVar3 = (undefined4 *)(puVar2 + -3);
|
|
puVar5 = (undefined4 *)(puVar4 + -3);
|
|
for (uVar1 = param_3 >> 2; uVar1 != 0; uVar1 = uVar1 - 1) {
|
|
*puVar5 = *puVar3;
|
|
puVar3 = puVar3 + -1;
|
|
puVar5 = puVar5 + -1;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4988 file=? name=FUN_004d4988 */
|
|
|
|
undefined4 * __cdecl FUN_004d4988(undefined4 *param_1,undefined1 param_2,uint param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 *puVar2;
|
|
|
|
puVar2 = param_1;
|
|
for (uVar1 = param_3 >> 2; uVar1 != 0; uVar1 = uVar1 - 1) {
|
|
*puVar2 = CONCAT22(CONCAT11(param_2,param_2),CONCAT11(param_2,param_2));
|
|
puVar2 = puVar2 + 1;
|
|
}
|
|
for (uVar1 = param_3 & 3; uVar1 != 0; uVar1 = uVar1 - 1) {
|
|
*(undefined1 *)puVar2 = param_2;
|
|
puVar2 = (undefined4 *)((int)puVar2 + 1);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d49b8 file=? name=FUN_004d49b8 */
|
|
|
|
char * __cdecl FUN_004d49b8(char *param_1,char *param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
char *pcVar5;
|
|
char *pcVar6;
|
|
|
|
iVar2 = -1;
|
|
pcVar5 = param_1;
|
|
do {
|
|
pcVar6 = pcVar5;
|
|
if (iVar2 == 0) break;
|
|
iVar2 = iVar2 + -1;
|
|
pcVar6 = pcVar5 + 1;
|
|
cVar1 = *pcVar5;
|
|
pcVar5 = pcVar6;
|
|
} while (cVar1 != '\0');
|
|
uVar3 = 0xffffffff;
|
|
do {
|
|
pcVar5 = param_2;
|
|
if (uVar3 == 0) break;
|
|
uVar3 = uVar3 - 1;
|
|
pcVar5 = param_2 + 1;
|
|
cVar1 = *param_2;
|
|
param_2 = pcVar5;
|
|
} while (cVar1 != '\0');
|
|
uVar3 = ~uVar3;
|
|
pcVar5 = pcVar5 + -uVar3;
|
|
pcVar6 = pcVar6 + -1;
|
|
for (uVar4 = uVar3 >> 2; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
*(undefined4 *)pcVar6 = *(undefined4 *)pcVar5;
|
|
pcVar5 = pcVar5 + 4;
|
|
pcVar6 = pcVar6 + 4;
|
|
}
|
|
for (uVar3 = uVar3 & 3; uVar3 != 0; uVar3 = uVar3 - 1) {
|
|
*pcVar6 = *pcVar5;
|
|
pcVar5 = pcVar5 + 1;
|
|
pcVar6 = pcVar6 + 1;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d49f4 file=? name=FUN_004d49f4 */
|
|
|
|
char * __cdecl FUN_004d49f4(char *param_1,char param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
uint uVar2;
|
|
bool bVar3;
|
|
|
|
uVar2 = 0xffffffff;
|
|
bVar3 = true;
|
|
pcVar1 = param_1;
|
|
do {
|
|
if (uVar2 == 0) break;
|
|
uVar2 = uVar2 - 1;
|
|
bVar3 = *pcVar1 == '\0';
|
|
pcVar1 = pcVar1 + 1;
|
|
} while (!bVar3);
|
|
uVar2 = ~uVar2;
|
|
do {
|
|
pcVar1 = param_1;
|
|
if (uVar2 == 0) break;
|
|
uVar2 = uVar2 - 1;
|
|
pcVar1 = param_1 + 1;
|
|
bVar3 = param_2 == *param_1;
|
|
param_1 = pcVar1;
|
|
} while (!bVar3);
|
|
if (bVar3) {
|
|
pcVar1 = pcVar1 + -1;
|
|
}
|
|
else {
|
|
pcVar1 = (char *)0x0;
|
|
}
|
|
return pcVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4a1c file=? name=FUN_004d4a1c */
|
|
|
|
int __cdecl FUN_004d4a1c(char *param_1,char *param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
char cVar2;
|
|
uint uVar3;
|
|
char *pcVar4;
|
|
char *pcVar5;
|
|
|
|
uVar3 = 0xffffffff;
|
|
pcVar4 = param_2;
|
|
do {
|
|
if (uVar3 == 0) break;
|
|
uVar3 = uVar3 - 1;
|
|
cVar1 = *pcVar4;
|
|
pcVar4 = pcVar4 + 1;
|
|
} while (cVar1 != '\0');
|
|
uVar3 = ~uVar3;
|
|
do {
|
|
pcVar4 = param_1;
|
|
pcVar5 = param_2;
|
|
if (uVar3 == 0) break;
|
|
uVar3 = uVar3 - 1;
|
|
pcVar5 = param_2 + 1;
|
|
pcVar4 = param_1 + 1;
|
|
cVar2 = *param_2;
|
|
cVar1 = *param_1;
|
|
param_1 = pcVar4;
|
|
param_2 = pcVar5;
|
|
} while (cVar1 == cVar2);
|
|
return (uint)(byte)pcVar4[-1] - (uint)(byte)pcVar5[-1];
|
|
}
|
|
|
|
|
|
|
|
/* @004d4a48 file=? name=FUN_004d4a48 */
|
|
|
|
char * __cdecl FUN_004d4a48(char *param_1,char *param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
char *pcVar4;
|
|
|
|
uVar2 = 0xffffffff;
|
|
pcVar4 = param_2;
|
|
do {
|
|
if (uVar2 == 0) break;
|
|
uVar2 = uVar2 - 1;
|
|
cVar1 = *pcVar4;
|
|
pcVar4 = pcVar4 + 1;
|
|
} while (cVar1 != '\0');
|
|
pcVar4 = param_1;
|
|
for (uVar3 = ~uVar2 >> 2; uVar3 != 0; uVar3 = uVar3 - 1) {
|
|
*(undefined4 *)pcVar4 = *(undefined4 *)param_2;
|
|
param_2 = param_2 + 4;
|
|
pcVar4 = pcVar4 + 4;
|
|
}
|
|
for (uVar2 = ~uVar2 & 3; uVar2 != 0; uVar2 = uVar2 - 1) {
|
|
*pcVar4 = *param_2;
|
|
param_2 = param_2 + 1;
|
|
pcVar4 = pcVar4 + 1;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4a78 file=? name=FUN_004d4a78 */
|
|
|
|
int __cdecl FUN_004d4a78(char *param_1)
|
|
|
|
{
|
|
char cVar1;
|
|
uint uVar2;
|
|
|
|
uVar2 = 0xffffffff;
|
|
do {
|
|
if (uVar2 == 0) break;
|
|
uVar2 = uVar2 - 1;
|
|
cVar1 = *param_1;
|
|
param_1 = param_1 + 1;
|
|
} while (cVar1 != '\0');
|
|
return ~uVar2 - 1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4a94 file=? name=FUN_004d4a94 */
|
|
|
|
char * __cdecl FUN_004d4a94(char *param_1,char *param_2,uint param_3)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
char *pcVar6;
|
|
char *pcVar7;
|
|
|
|
iVar2 = -1;
|
|
pcVar6 = param_1;
|
|
do {
|
|
pcVar7 = pcVar6;
|
|
if (iVar2 == 0) break;
|
|
iVar2 = iVar2 + -1;
|
|
pcVar7 = pcVar6 + 1;
|
|
cVar1 = *pcVar6;
|
|
pcVar6 = pcVar7;
|
|
} while (cVar1 != '\0');
|
|
uVar3 = 0xffffffff;
|
|
do {
|
|
pcVar6 = param_2;
|
|
if (uVar3 == 0) break;
|
|
uVar3 = uVar3 - 1;
|
|
pcVar6 = param_2 + 1;
|
|
cVar1 = *param_2;
|
|
param_2 = pcVar6;
|
|
} while (cVar1 != '\0');
|
|
uVar4 = ~uVar3 - 1;
|
|
if (param_3 < uVar4) {
|
|
uVar4 = param_3;
|
|
}
|
|
pcVar6 = pcVar6 + -~uVar3;
|
|
pcVar7 = pcVar7 + -1;
|
|
for (uVar5 = uVar4 >> 2; uVar5 != 0; uVar5 = uVar5 - 1) {
|
|
*(undefined4 *)pcVar7 = *(undefined4 *)pcVar6;
|
|
pcVar6 = pcVar6 + 4;
|
|
pcVar7 = pcVar7 + 4;
|
|
}
|
|
for (uVar4 = uVar4 & 3; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
*pcVar7 = *pcVar6;
|
|
pcVar6 = pcVar6 + 1;
|
|
pcVar7 = pcVar7 + 1;
|
|
}
|
|
*pcVar7 = '\0';
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4ae0 file=? name=FUN_004d4ae0 */
|
|
|
|
int __cdecl FUN_004d4ae0(char *param_1,char *param_2,int param_3)
|
|
|
|
{
|
|
char cVar1;
|
|
char cVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
char *pcVar5;
|
|
char *pcVar6;
|
|
|
|
iVar3 = 0;
|
|
iVar4 = param_3;
|
|
pcVar5 = param_2;
|
|
if (param_3 != 0) {
|
|
do {
|
|
if (iVar4 == 0) break;
|
|
iVar4 = iVar4 + -1;
|
|
cVar1 = *pcVar5;
|
|
pcVar5 = pcVar5 + 1;
|
|
} while (cVar1 != '\0');
|
|
iVar4 = param_3 - iVar4;
|
|
do {
|
|
pcVar5 = param_1;
|
|
pcVar6 = param_2;
|
|
if (iVar4 == 0) break;
|
|
iVar4 = iVar4 + -1;
|
|
pcVar6 = param_2 + 1;
|
|
pcVar5 = param_1 + 1;
|
|
cVar2 = *param_2;
|
|
cVar1 = *param_1;
|
|
param_1 = pcVar5;
|
|
param_2 = pcVar6;
|
|
} while (cVar1 == cVar2);
|
|
iVar3 = (uint)(byte)pcVar5[-1] - (uint)(byte)pcVar6[-1];
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4b14 file=? name=FUN_004d4b14 */
|
|
|
|
int __cdecl FUN_004d4b14(byte *param_1,byte *param_2,int param_3)
|
|
|
|
{
|
|
if (param_3 == 0) {
|
|
return 0;
|
|
}
|
|
while( true ) {
|
|
if (param_3 == 0) {
|
|
return (uint)param_1[-1] - (uint)param_2[-1];
|
|
}
|
|
if (*param_1 != *param_2) break;
|
|
param_1 = param_1 + 1;
|
|
param_2 = param_2 + 1;
|
|
param_3 = param_3 + -1;
|
|
}
|
|
return (uint)*param_1 - (uint)*param_2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4b58 file=? name=FUN_004d4b58 */
|
|
|
|
int __cdecl FUN_004d4b58(char *param_1,char *param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
char cVar3;
|
|
|
|
while( true ) {
|
|
uVar1 = FUN_004dc8c4((int)*param_1);
|
|
uVar2 = FUN_004dc8c4((int)*param_2);
|
|
cVar3 = (char)uVar1;
|
|
if ((cVar3 != (char)uVar2) || (cVar3 == '\0')) break;
|
|
param_1 = param_1 + 1;
|
|
param_2 = param_2 + 1;
|
|
}
|
|
return (int)cVar3 - (int)(char)uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4b9c file=? name=FUN_004d4b9c */
|
|
|
|
undefined4 * __cdecl FUN_004d4b9c(undefined4 *param_1,char *param_2,uint param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = FUN_004d4a78(param_2);
|
|
if (param_3 < uVar1) {
|
|
FUN_004d4918(param_1,(undefined4 *)param_2,param_3);
|
|
}
|
|
else {
|
|
FUN_004d4918(param_1,(undefined4 *)param_2,uVar1);
|
|
FUN_004d4988((undefined4 *)(uVar1 + (int)param_1),0,param_3 - uVar1);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4bec file=? name=FUN_004d4bec */
|
|
|
|
int __cdecl FUN_004d4bec(char *param_1,char *param_2,int param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
|
|
while( true ) {
|
|
uVar1 = FUN_004dc8c4((int)*param_1);
|
|
uVar2 = FUN_004dc8c4((int)*param_2);
|
|
if (((uVar1 != uVar2) || (*param_1 == '\0')) || (param_3 == 0)) break;
|
|
param_3 = param_3 + -1;
|
|
param_1 = param_1 + 1;
|
|
param_2 = param_2 + 1;
|
|
}
|
|
if (param_3 == 0) {
|
|
iVar3 = 0;
|
|
}
|
|
else {
|
|
uVar1 = FUN_004dc8c4((int)*param_1);
|
|
uVar2 = FUN_004dc8c4((int)*param_2);
|
|
iVar3 = uVar1 - uVar2;
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4c4c file=? name=FUN_004d4c4c */
|
|
|
|
char * __cdecl FUN_004d4c4c(char *param_1,char param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
char *pcVar2;
|
|
|
|
iVar1 = FUN_004d4a78(param_1);
|
|
pcVar2 = param_1 + iVar1;
|
|
while( true ) {
|
|
if (param_2 == *pcVar2) {
|
|
return pcVar2;
|
|
}
|
|
if (param_1 == pcVar2) break;
|
|
pcVar2 = pcVar2 + -1;
|
|
}
|
|
return (char *)0x0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4c78 file=? name=FUN_004d4c78 */
|
|
|
|
char * __cdecl FUN_004d4c78(char *param_1,char *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
char *pcVar5;
|
|
int iVar6;
|
|
char *local_10;
|
|
|
|
iVar1 = FUN_004d4a78(param_1);
|
|
iVar2 = FUN_004d4a78(param_2);
|
|
if (iVar2 != 0) {
|
|
if (iVar1 == 0) {
|
|
param_1 = (char *)0x0;
|
|
}
|
|
else {
|
|
iVar3 = 0;
|
|
while( true ) {
|
|
for (pcVar5 = param_1 + iVar3; (iVar3 < iVar1 && (*pcVar5 != *param_2)); pcVar5 = pcVar5 + 1
|
|
) {
|
|
iVar3 = iVar3 + 1;
|
|
}
|
|
if (iVar1 == iVar3) {
|
|
return (char *)0x0;
|
|
}
|
|
iVar6 = 0;
|
|
local_10 = param_2;
|
|
iVar4 = iVar3;
|
|
for (pcVar5 = param_1 + iVar3;
|
|
((iVar4 < iVar1 && (iVar6 < iVar2)) && (*pcVar5 == *local_10)); pcVar5 = pcVar5 + 1) {
|
|
iVar4 = iVar4 + 1;
|
|
iVar6 = iVar6 + 1;
|
|
local_10 = local_10 + 1;
|
|
}
|
|
if (iVar6 == iVar2) {
|
|
return param_1 + iVar3;
|
|
}
|
|
if (iVar1 == iVar4) break;
|
|
iVar3 = iVar3 + 1;
|
|
}
|
|
param_1 = (char *)0x0;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4d1c file=? name=FUN_004d4d1c */
|
|
|
|
char * __cdecl FUN_004d4d1c(char *param_1,char *param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char *pcVar2;
|
|
|
|
if (param_1 == (char *)0x0) {
|
|
param_1 = DAT_00524c54;
|
|
}
|
|
for (; pcVar1 = param_2, *param_1 != '\0'; param_1 = param_1 + 1) {
|
|
for (; (*pcVar1 != '\0' && (*pcVar1 != *param_1)); pcVar1 = pcVar1 + 1) {
|
|
}
|
|
if (*pcVar1 == '\0') break;
|
|
}
|
|
DAT_00524c54 = param_1;
|
|
if (*param_1 == '\0') {
|
|
pcVar2 = (char *)0x0;
|
|
}
|
|
else {
|
|
for (; pcVar1 = param_2, pcVar2 = param_1, *DAT_00524c54 != '\0';
|
|
DAT_00524c54 = DAT_00524c54 + 1) {
|
|
for (; *pcVar1 != '\0'; pcVar1 = pcVar1 + 1) {
|
|
if (*pcVar1 == *DAT_00524c54) {
|
|
*DAT_00524c54 = '\0';
|
|
DAT_00524c54 = DAT_00524c54 + 1;
|
|
return param_1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return pcVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4d84 file=? name=FUN_004d4d84 */
|
|
|
|
int __cdecl FUN_004d4d84(undefined4 *param_1,char *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = FUN_004d4a78(param_2);
|
|
FUN_004d4918(param_1,(undefined4 *)param_2,iVar1 + 1);
|
|
return iVar1 + (int)param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4db0 file=? name=FUN_004d4db0 */
|
|
|
|
void FUN_004d4db0(void)
|
|
|
|
{
|
|
code *UNRECOVERED_JUMPTABLE;
|
|
|
|
/* WARNING: Could not recover jumptable at 0x004d4db4. Too many branches */
|
|
/* WARNING: Treating indirect jump as call */
|
|
(*UNRECOVERED_JUMPTABLE)();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4db7 file=? name=FUN_004d4db7 */
|
|
|
|
char * __cdecl FUN_004d4db7(int param_1)
|
|
|
|
{
|
|
if (param_1 == 0) {
|
|
return s_<notype>_0051f6d8;
|
|
}
|
|
return (char *)(param_1 + (uint)*(ushort *)(param_1 + 6));
|
|
}
|
|
|
|
|
|
|
|
/* @004d4dd0 file=? name=FUN_004d4dd0 */
|
|
|
|
undefined4 __cdecl FUN_004d4dd0(int *param_1,int *param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
char cVar2;
|
|
char *pcVar3;
|
|
char *pcVar4;
|
|
|
|
if (param_2 == param_1) {
|
|
return 1;
|
|
}
|
|
if (((short)param_1[1] == (short)param_2[1]) && (*param_1 == *param_2)) {
|
|
if (((*(ushort *)(param_1 + 1) | *(ushort *)(param_2 + 1)) & 0x80) != 0) {
|
|
return 0;
|
|
}
|
|
pcVar3 = (char *)((int)param_1 + (uint)*(ushort *)((int)param_1 + 6));
|
|
pcVar4 = (char *)((int)param_2 + (uint)*(ushort *)((int)param_2 + 6));
|
|
do {
|
|
cVar1 = *pcVar3;
|
|
pcVar3 = pcVar3 + 1;
|
|
cVar2 = *pcVar4;
|
|
pcVar4 = pcVar4 + 1;
|
|
if (cVar2 != cVar1) {
|
|
return 0;
|
|
}
|
|
} while (cVar1 != '\0');
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d4e36 file=? name=FUN_004d4e36 */
|
|
|
|
undefined4 __cdecl FUN_004d4e36(int param_1,int *param_2,undefined4 param_3,int param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
undefined4 *puVar4;
|
|
|
|
puVar4 = (undefined4 *)((uint)*(ushort *)(param_1 + 0x12) + param_1);
|
|
do {
|
|
piVar1 = (int *)*puVar4;
|
|
if (piVar1 == (int *)0x0) {
|
|
puVar4 = (undefined4 *)((uint)*(ushort *)(param_1 + 0x10) + param_1);
|
|
while( true ) {
|
|
piVar1 = (int *)*puVar4;
|
|
if (piVar1 == (int *)0x0) {
|
|
return 0;
|
|
}
|
|
if ((param_4 == 0) || ((puVar4[2] & 3) != 3)) {
|
|
iVar2 = 0;
|
|
}
|
|
else {
|
|
iVar2 = 1;
|
|
}
|
|
iVar3 = FUN_004d4dd0(param_2,piVar1);
|
|
if ((iVar3 != 0) && (iVar2 != 0)) break;
|
|
if (((*(byte *)(piVar1 + 3) & 4) != 0) &&
|
|
(iVar2 = FUN_004d4e36((int)piVar1,param_2,param_3,iVar2), iVar2 != 0)) {
|
|
return 1;
|
|
}
|
|
puVar4 = puVar4 + 3;
|
|
}
|
|
return 1;
|
|
}
|
|
if ((*(byte *)(puVar4 + 2) & 8) == 0) {
|
|
if ((param_4 == 0) || ((puVar4[2] & 3) != 3)) {
|
|
iVar2 = 0;
|
|
}
|
|
else {
|
|
iVar2 = 1;
|
|
}
|
|
iVar3 = FUN_004d4dd0(param_2,piVar1);
|
|
if ((iVar3 != 0) && (iVar2 != 0)) {
|
|
return 1;
|
|
}
|
|
if (((*(byte *)(piVar1 + 3) & 4) != 0) &&
|
|
(iVar2 = FUN_004d4e36((int)piVar1,param_2,param_3,iVar2), iVar2 != 0)) {
|
|
return 1;
|
|
}
|
|
}
|
|
puVar4 = puVar4 + 3;
|
|
} while( true );
|
|
}
|
|
|
|
|
|
|
|
/* @004d4f30 file=? name=FUN_004d4f30 */
|
|
|
|
undefined4 __cdecl FUN_004d4f30(int *param_1,int *param_2,int param_3,undefined4 param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
ushort uVar2;
|
|
ushort uVar3;
|
|
int iVar4;
|
|
undefined4 uVar5;
|
|
uint uVar6;
|
|
|
|
while( true ) {
|
|
while( true ) {
|
|
if (param_2 == param_1) {
|
|
return 1;
|
|
}
|
|
uVar2 = *(ushort *)(param_1 + 1);
|
|
uVar3 = *(ushort *)(param_2 + 1);
|
|
if ((uVar3 & uVar2 & 0x10) == 0) break;
|
|
uVar6 = uVar2 & 0x300;
|
|
uVar1 = uVar3 & 0x300;
|
|
if (uVar6 != uVar1) {
|
|
if ((param_3 != 0) || (uVar6 == uVar1)) {
|
|
return 0;
|
|
}
|
|
if ((byte)(~(byte)(uVar1 >> 8) & (byte)(uVar6 >> 8)) != 0) {
|
|
return 0;
|
|
}
|
|
}
|
|
param_3 = 1;
|
|
param_1 = (int *)param_1[2];
|
|
param_2 = (int *)param_2[2];
|
|
}
|
|
if ((uVar3 & uVar2 & 0x400) == 0) break;
|
|
if ((param_1[3] != param_2[3]) && ((param_3 != 0 || (param_1[3] != 0 || param_2[3] != 0)))) {
|
|
return 0;
|
|
}
|
|
param_3 = 1;
|
|
param_1 = (int *)param_1[2];
|
|
param_2 = (int *)param_2[2];
|
|
}
|
|
iVar4 = FUN_004d4dd0(param_1,param_2);
|
|
if (iVar4 != 0) {
|
|
return 1;
|
|
}
|
|
if ((((uVar2 & 2) != 0) && ((uVar3 & 1) != 0)) && ((*(byte *)(param_1 + 3) & 4) != 0)) {
|
|
uVar5 = FUN_004d4e36((int)param_1,param_2,param_4,1);
|
|
return uVar5;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d503f file=? name=FUN_004d503f */
|
|
|
|
int * __cdecl FUN_004d503f(uint param_1)
|
|
|
|
{
|
|
uint *puVar1;
|
|
int *piVar2;
|
|
int unaff_FS_OFFSET;
|
|
|
|
piVar2 = FUN_004de55c(param_1);
|
|
if (piVar2 == (int *)0x0) {
|
|
if ((0x80 < param_1) || ((*(byte *)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 4) & 1) != 0)
|
|
) {
|
|
FUN_004dedb8();
|
|
}
|
|
puVar1 = (uint *)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 4);
|
|
*puVar1 = *puVar1 | 1;
|
|
piVar2 = *(int **)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 0x1c);
|
|
}
|
|
return piVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5089 file=? name=FUN_004d5089 */
|
|
|
|
void __cdecl FUN_004d5089(int *param_1)
|
|
|
|
{
|
|
uint *puVar1;
|
|
int unaff_FS_OFFSET;
|
|
|
|
if (param_1 == *(int **)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 0x1c)) {
|
|
puVar1 = (uint *)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 4);
|
|
*puVar1 = *puVar1 & 0xfffffffe;
|
|
return;
|
|
}
|
|
FUN_004de420(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d50b6 file=? name=FUN_004d50b6 */
|
|
|
|
bool __cdecl FUN_004d50b6(int *param_1,undefined4 param_2,int *param_3,byte param_4)
|
|
|
|
{
|
|
ushort uVar1;
|
|
ushort uVar2;
|
|
int iVar3;
|
|
|
|
iVar3 = FUN_004d4f30(param_1,param_3,0,param_2);
|
|
if (iVar3 != 0) {
|
|
return true;
|
|
}
|
|
uVar1 = *(ushort *)(param_1 + 1);
|
|
uVar2 = *(ushort *)(param_3 + 1);
|
|
if ((uVar2 & 0x20) != 0) {
|
|
iVar3 = FUN_004d4f30(param_1,(int *)param_3[2],1,param_2);
|
|
if (iVar3 != 0) {
|
|
return true;
|
|
}
|
|
uVar2 = *(ushort *)((int *)param_3[2] + 1);
|
|
if ((uVar2 & 0x10) == 0) {
|
|
return false;
|
|
}
|
|
iVar3 = FUN_004d4f30(param_1,(int *)param_3[2],0,param_2);
|
|
if (iVar3 != 0) {
|
|
return true;
|
|
}
|
|
}
|
|
if ((uVar2 & 0x10) != 0) {
|
|
if ((param_4 & 1) != 0) {
|
|
return true;
|
|
}
|
|
if ((uVar1 & 0x10) == 0) {
|
|
return false;
|
|
}
|
|
if ((uVar2 & 0x40) != 0) {
|
|
return (uVar1 & 0x300) == (uVar2 & 0x300);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5177 file=? name=FUN_004d5177 */
|
|
|
|
void __cdecl FUN_004d5177(undefined4 param_1,undefined4 param_2,undefined *param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
if ((param_4 & 0x1000) == 0) {
|
|
uVar1 = param_4 & 7;
|
|
if (uVar1 == 1) {
|
|
(*(code *)param_3)(param_1,param_2);
|
|
return;
|
|
}
|
|
if (uVar1 == 2) {
|
|
(*(code *)param_3)(param_2,param_1);
|
|
return;
|
|
}
|
|
if (uVar1 == 3) {
|
|
(*(code *)param_3)();
|
|
return;
|
|
}
|
|
if (uVar1 != 5) {
|
|
return;
|
|
}
|
|
(*(code *)param_3)(param_1,param_2);
|
|
}
|
|
else {
|
|
uVar1 = param_4 & 7;
|
|
if (uVar1 == 1) {
|
|
(*(code *)param_3)(param_1,0,param_2);
|
|
return;
|
|
}
|
|
if (uVar1 == 2) {
|
|
(*(code *)param_3)(param_1,param_2,0);
|
|
return;
|
|
}
|
|
if (uVar1 == 3) {
|
|
(*(code *)param_3)();
|
|
return;
|
|
}
|
|
if (uVar1 == 5) {
|
|
(*(code *)param_3)(param_1,0,param_2);
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d51fb file=? name=FUN_004d51fb */
|
|
|
|
void __cdecl FUN_004d51fb(undefined4 param_1,undefined *param_2,uint param_3,int param_4)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
|
|
uVar1 = 2;
|
|
if (param_4 == 0) {
|
|
uVar1 = 0;
|
|
}
|
|
uVar2 = param_3 & 7;
|
|
if (uVar2 == 1) {
|
|
(*(code *)param_2)(param_1,uVar1);
|
|
return;
|
|
}
|
|
if (uVar2 == 2) {
|
|
(*(code *)param_2)(param_1,uVar1);
|
|
return;
|
|
}
|
|
if (uVar2 != 3) {
|
|
if (uVar2 != 5) {
|
|
return;
|
|
}
|
|
(*(code *)param_2)(param_1,uVar1);
|
|
return;
|
|
}
|
|
(*(code *)param_2)();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5248 file=? name=FUN_004d5248 */
|
|
|
|
void __cdecl FUN_004d5248(undefined4 param_1,undefined *param_2,uint param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = param_3 & 7;
|
|
if (uVar1 == 1) {
|
|
(*(code *)param_2)(param_1);
|
|
return;
|
|
}
|
|
if (uVar1 == 2) {
|
|
(*(code *)param_2)(param_1);
|
|
return;
|
|
}
|
|
if (uVar1 == 3) {
|
|
(*(code *)param_2)();
|
|
return;
|
|
}
|
|
if (uVar1 != 5) {
|
|
return;
|
|
}
|
|
(*(code *)param_2)(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5282 file=? name=FUN_004d5282 */
|
|
|
|
void __cdecl
|
|
FUN_004d5282(uint *param_1,undefined4 *param_2,int param_3,undefined *param_4,uint param_5,
|
|
int param_6,int param_7,int param_8,undefined4 param_9,int param_10)
|
|
|
|
{
|
|
ushort uVar1;
|
|
uint uVar2;
|
|
undefined4 *unaff_FS_OFFSET;
|
|
ULONG_PTR local_40;
|
|
undefined4 local_3c;
|
|
int *local_38;
|
|
undefined4 local_34;
|
|
int *local_30;
|
|
uint local_2c;
|
|
uint *local_28;
|
|
undefined4 local_24;
|
|
undefined2 local_14;
|
|
|
|
FUN_004d66b8();
|
|
local_28 = param_1;
|
|
*(uint *)(*(int *)(unaff_FS_OFFSET[1] + -8) + 0x18) =
|
|
(uint)*(ushort *)((int)param_1 + 6) + (int)param_1;
|
|
*(int *)(*(int *)(unaff_FS_OFFSET[1] + -8) + 0x14) = param_7;
|
|
*(int *)(*(int *)(unaff_FS_OFFSET[1] + -8) + 0x10) = param_8;
|
|
uVar2 = *param_1;
|
|
uVar1 = (ushort)param_1[1];
|
|
if ((uVar1 & 2) == 0) {
|
|
local_2c = 0;
|
|
}
|
|
else {
|
|
local_2c = param_1[3];
|
|
}
|
|
if ((uVar1 & 0x30) != 0) {
|
|
param_1 = (uint *)param_1[2];
|
|
}
|
|
local_30 = FUN_004d503f(uVar2 + 0x46);
|
|
*local_30 = **(int **)(unaff_FS_OFFSET[1] + -8);
|
|
**(undefined4 **)(unaff_FS_OFFSET[1] + -8) = local_30;
|
|
local_30[1] = (int)local_28;
|
|
local_30[3] = param_6;
|
|
local_30[4] = uVar2;
|
|
*(ushort *)(local_30 + 6) = uVar1;
|
|
*(undefined2 *)((int)local_30 + 0x1a) = (undefined2)local_2c;
|
|
local_30[5] = (int)param_1;
|
|
local_30[2] = param_3;
|
|
local_30[10] = 0;
|
|
local_30[0xb] = 0;
|
|
local_30[7] = (int)FUN_004d5089;
|
|
local_30[0xd] = param_7;
|
|
local_30[0xe] = param_8;
|
|
local_30[8] = (int)param_4;
|
|
local_30[9] = param_5;
|
|
*(undefined1 *)((int)local_30 + 0x45) = 0;
|
|
*(undefined1 *)(local_30 + 0x11) = 1;
|
|
FUN_004d4918((undefined4 *)((int)local_30 + 0x46),param_2,uVar2);
|
|
if ((local_2c & 1) != 0) {
|
|
local_34 = *DAT_00524c68;
|
|
local_14 = 8;
|
|
FUN_004d5177((int)local_30 + 0x46,param_2,param_4,param_5);
|
|
local_14 = 0;
|
|
*DAT_00524c68 = local_34;
|
|
}
|
|
if ((param_10 == 0) && ((local_2c & 2) != 0)) {
|
|
local_14 = 0x14;
|
|
FUN_004d51fb(param_2,(undefined *)local_28[10],(uint)(ushort)local_28[0xb],1);
|
|
local_14 = 0;
|
|
}
|
|
local_40 = *(ULONG_PTR *)(*(int *)(unaff_FS_OFFSET[1] + -8) + 0x18);
|
|
local_3c = param_9;
|
|
local_38 = local_30;
|
|
RaiseException(0xeefface,1,3,&local_40);
|
|
*unaff_FS_OFFSET = local_24;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5488 file=? name=FUN_004d5488 */
|
|
|
|
void __cdecl
|
|
FUN_004d5488(uint *param_1,undefined4 *param_2,int param_3,undefined *param_4,uint param_5,
|
|
int param_6,int param_7,int param_8)
|
|
|
|
{
|
|
undefined4 unaff_retaddr;
|
|
|
|
FUN_004d5282(param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,unaff_retaddr,0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d54b5 file=? name=FUN_004d54b5 */
|
|
|
|
void __cdecl FUN_004d54b5(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 *puVar2;
|
|
int unaff_FS_OFFSET;
|
|
undefined4 unaff_retaddr;
|
|
|
|
iVar1 = **(int **)(*(int *)(unaff_FS_OFFSET + 4) + -8);
|
|
if (iVar1 == 0) {
|
|
FUN_004d6723();
|
|
}
|
|
if (*(char *)(iVar1 + 0x44) == '\0') {
|
|
puVar2 = *(undefined4 **)(iVar1 + 0x40);
|
|
}
|
|
else {
|
|
puVar2 = (undefined4 *)(iVar1 + 0x46);
|
|
}
|
|
FUN_004d5282(*(uint **)(iVar1 + 4),puVar2,*(int *)(iVar1 + 8),*(undefined **)(iVar1 + 0x20),
|
|
*(uint *)(iVar1 + 0x24),*(int *)(iVar1 + 0xc),param_1,param_2,unaff_retaddr,1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5506 file=? name=FUN_004d5506 */
|
|
|
|
void __cdecl FUN_004d5506(undefined4 param_1,undefined4 *param_2)
|
|
|
|
{
|
|
undefined4 local_54;
|
|
undefined4 local_50;
|
|
undefined4 local_44;
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
local_54 = 0x26;
|
|
local_50 = 2;
|
|
local_44 = 0;
|
|
param_2 = &local_54;
|
|
}
|
|
param_2[1] = param_2[1] | 2;
|
|
FUN_004d69ea(param_2,(PEXCEPTION_RECORD)param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5545 file=? name=FUN_004d5545 */
|
|
|
|
void __cdecl FUN_004d5545(undefined4 param_1,undefined *param_2,uint param_3)
|
|
|
|
{
|
|
undefined4 *unaff_FS_OFFSET;
|
|
undefined4 local_24;
|
|
|
|
FUN_004d66b8();
|
|
FUN_004d51fb(param_1,param_2,param_3,1);
|
|
*unaff_FS_OFFSET = local_24;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5593 file=? name=FUN_004d5593 */
|
|
|
|
void __cdecl FUN_004d5593(int param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int iVar2;
|
|
|
|
if (*(char *)(param_1 + 0x44) != '\0') {
|
|
if ((*(byte *)(param_1 + 0x1a) & 2) != 0) {
|
|
uVar1 = *DAT_00524c68;
|
|
FUN_004d5545(param_1 + 0x46,*(undefined **)(*(int *)(param_1 + 4) + 0x28),
|
|
(uint)*(ushort *)(*(int *)(param_1 + 4) + 0x2c));
|
|
*DAT_00524c68 = uVar1;
|
|
}
|
|
*(undefined1 *)(param_1 + 0x44) = 0;
|
|
}
|
|
if (*(char *)(param_1 + 0x45) != '\0') {
|
|
iVar2 = *(int *)(param_1 + 0x3c);
|
|
if (((*(byte *)(iVar2 + 4) & 2) != 0) && ((*(byte *)(iVar2 + 0xc) & 2) != 0)) {
|
|
FUN_004d5545(*(undefined4 *)(param_1 + 0x40),*(undefined **)(iVar2 + 0x28),
|
|
(uint)*(ushort *)(iVar2 + 0x2c));
|
|
}
|
|
*(undefined1 *)(param_1 + 0x45) = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5603 file=? name=FUN_004d5603 */
|
|
|
|
void FUN_004d5603(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
int unaff_FS_OFFSET;
|
|
|
|
puVar1 = (undefined4 *)**(int **)(*(int *)(unaff_FS_OFFSET + 4) + -8);
|
|
**(undefined4 **)(*(int *)(unaff_FS_OFFSET + 4) + -8) = *puVar1;
|
|
iVar2 = puVar1[10];
|
|
*(undefined2 *)(iVar2 + 0x10) =
|
|
*(undefined2 *)(*(int *)(iVar2 + 8) + (uint)*(ushort *)(iVar2 + 0x10));
|
|
FUN_004d5593((int)puVar1);
|
|
(*(code *)puVar1[7])(puVar1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d563c file=? name=FUN_004d563c */
|
|
|
|
undefined4 __cdecl FUN_004d563c(undefined4 *param_1,int param_2,int *param_3,int *param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
undefined4 *local_8;
|
|
|
|
while( true ) {
|
|
piVar1 = (int *)*param_1;
|
|
if (piVar1 == (int *)0x0) {
|
|
return 0;
|
|
}
|
|
local_8 = (undefined4 *)(*param_4 + param_1[1]);
|
|
if (param_2 != 0) {
|
|
local_8 = (undefined4 *)*local_8;
|
|
}
|
|
iVar2 = FUN_004d4dd0(piVar1,param_3);
|
|
if (iVar2 != 0) break;
|
|
if ((((*(byte *)(piVar1 + 1) & 2) != 0) &&
|
|
((undefined4 *)((int)piVar1 + (uint)*(ushort *)(piVar1 + 4)) != (undefined4 *)0x0)) &&
|
|
(iVar2 = FUN_004d563c((undefined4 *)((int)piVar1 + (uint)*(ushort *)(piVar1 + 4)),0,param_3,
|
|
(int *)&local_8), iVar2 != 0)) {
|
|
*param_4 = (int)local_8;
|
|
return 1;
|
|
}
|
|
param_1 = param_1 + 3;
|
|
}
|
|
*param_4 = (int)local_8;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d56c2 file=? name=FUN_004d56c2 */
|
|
|
|
int __cdecl FUN_004d56c2(int param_1,int param_2,int *param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
piVar1 = param_3;
|
|
iVar3 = param_2;
|
|
if (((param_1 != 0) &&
|
|
(iVar2 = FUN_004d563c((undefined4 *)((uint)*(ushort *)(param_2 + 0x10) + param_2),0,param_3,
|
|
¶m_1), iVar2 == 0)) &&
|
|
(iVar3 = FUN_004d563c((undefined4 *)((uint)*(ushort *)(iVar3 + 0x12) + iVar3),1,piVar1,¶m_1
|
|
), iVar3 == 0)) {
|
|
param_1 = 0;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d571e file=? name=FUN_004d571e */
|
|
|
|
void __cdecl FUN_004d571e(int param_1,undefined4 param_2,int param_3,int *param_4,int param_5)
|
|
|
|
{
|
|
ushort uVar1;
|
|
uint uVar2;
|
|
undefined4 *puVar3;
|
|
int iVar4;
|
|
ushort uVar5;
|
|
uint *puVar6;
|
|
bool bVar7;
|
|
bool bVar8;
|
|
undefined4 *local_8;
|
|
|
|
puVar6 = *(uint **)(param_1 + 4);
|
|
*(uint **)(param_3 + 0x3c) = puVar6;
|
|
if ((puVar6 != (uint *)0x0) && ((*(byte *)(param_1 + 8) & 0x80) == 0)) {
|
|
bVar7 = (*(uint *)(param_1 + 8) & 1) == 0;
|
|
local_8 = (undefined4 *)(param_3 + 0x46);
|
|
*(undefined1 *)(param_3 + 0x45) = 1;
|
|
*(int *)(param_3 + 0x40) = *param_4 + param_5;
|
|
uVar2 = *puVar6;
|
|
uVar1 = (ushort)puVar6[1];
|
|
uVar5 = uVar1;
|
|
if ((uVar1 & 0x30) != 0) {
|
|
puVar6 = (uint *)puVar6[2];
|
|
uVar5 = (ushort)puVar6[1];
|
|
}
|
|
if (((uVar1 & 0x10) == 0) || ((*(byte *)(param_3 + 0xc) & 1) == 0)) {
|
|
if (((uVar5 & 1) == 0) || ((uVar1 & 0x30) == 0)) {
|
|
if ((*(byte *)(param_3 + 0x18) & 1) == 0) {
|
|
if ((uVar1 & 0x20) == 0) {
|
|
FUN_004d4918(*(undefined4 **)(param_3 + 0x40),local_8,uVar2);
|
|
}
|
|
else {
|
|
FUN_004d4918(*(undefined4 **)(param_3 + 0x40),&local_8,uVar2);
|
|
bVar7 = true;
|
|
}
|
|
}
|
|
else {
|
|
iVar4 = FUN_004d4dd0(*(int **)(param_3 + 0x14),(int *)puVar6);
|
|
if (iVar4 == 0) {
|
|
local_8 = (undefined4 *)
|
|
FUN_004d56c2((int)local_8,*(int *)(param_3 + 0x14),(int *)puVar6);
|
|
}
|
|
bVar7 = iVar4 == 0 || bVar7;
|
|
if ((puVar6[3] & 1) == 0) {
|
|
FUN_004d4918(*(undefined4 **)(param_3 + 0x40),local_8,uVar2);
|
|
}
|
|
else {
|
|
FUN_004d5177(*(undefined4 *)(param_3 + 0x40),local_8,*(undefined **)(param_1 + 0xc),
|
|
*(uint *)(param_1 + 0x10));
|
|
bVar7 = true;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
bVar8 = (uVar1 & 0x20) == 0;
|
|
if (bVar8) {
|
|
local_8 = (undefined4 *)*local_8;
|
|
}
|
|
bVar7 = !bVar8 || bVar7;
|
|
iVar4 = FUN_004d4dd0(*(int **)(param_3 + 0x14),(int *)puVar6);
|
|
puVar3 = local_8;
|
|
if ((iVar4 == 0) &&
|
|
(local_8 = (undefined4 *)
|
|
FUN_004d56c2((int)local_8,*(int *)(param_3 + 0x14),(int *)puVar6),
|
|
local_8 != puVar3)) {
|
|
bVar7 = true;
|
|
}
|
|
FUN_004d4918(*(undefined4 **)(param_3 + 0x40),&local_8,uVar2);
|
|
}
|
|
}
|
|
else {
|
|
FUN_004d4988(*(undefined4 **)(param_3 + 0x40),0,uVar2);
|
|
bVar7 = true;
|
|
}
|
|
if (!bVar7) {
|
|
if ((puVar6[3] & 2) != 0) {
|
|
FUN_004d5545(local_8,(undefined *)puVar6[10],(uint)(ushort)puVar6[0xb]);
|
|
}
|
|
*(undefined1 *)(param_3 + 0x44) = 0;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d58d2 file=? name=FUN_004d58d2 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void __cdecl FUN_004d58d2(int param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
int *piVar2;
|
|
undefined4 uVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
undefined1 *puVar6;
|
|
uint uVar7;
|
|
int unaff_FS_OFFSET;
|
|
|
|
puVar6 = &stack0xfffffffc;
|
|
uVar7 = (uint)*(ushort *)(param_1 + 0x10);
|
|
do {
|
|
while( true ) {
|
|
do {
|
|
while( true ) {
|
|
uVar5 = uVar7;
|
|
if ((uVar5 == 0) || (uVar5 == *(uint *)(puVar6 + 0xc))) {
|
|
return;
|
|
}
|
|
uVar7 = (uint)*(ushort *)(*(int *)(puVar6 + -4) + uVar5);
|
|
uVar4 = (uint)*(ushort *)(*(int *)(puVar6 + -4) + uVar5 + 2);
|
|
*(ushort *)(*(int *)(puVar6 + 8) + 0x10) = *(ushort *)(*(int *)(puVar6 + -4) + uVar5);
|
|
if (uVar4 != 0) break;
|
|
_DAT_00524c58 = *(undefined4 *)(*(int *)(puVar6 + -4) + 4 + uVar5 + 4);
|
|
*(undefined2 *)(*(int *)(puVar6 + 8) + 0x12) = 1;
|
|
FUN_004d69ff();
|
|
*(undefined2 *)(*(int *)(puVar6 + 8) + 0x12) = 0;
|
|
}
|
|
} while (uVar4 - 1 < 3);
|
|
if (uVar4 == 4) break;
|
|
if (uVar4 - 1 == 4) {
|
|
uVar3 = FUN_004d5fe6(*(int **)(*(int *)(puVar6 + -4) + uVar5 + 8),
|
|
*(int *)(*(int *)(puVar6 + -4) + uVar5 + 4) + *(int *)(puVar6 + -0xc),
|
|
*(int *)(puVar6 + 8),*(int *)(puVar6 + -8));
|
|
*(undefined4 *)(puVar6 + -0xc) = uVar3;
|
|
}
|
|
}
|
|
piVar1 = *(int **)(*(int *)(unaff_FS_OFFSET + 4) + -8);
|
|
do {
|
|
piVar2 = piVar1;
|
|
piVar1 = (int *)*piVar2;
|
|
if (piVar1 == (int *)0x0) break;
|
|
} while ((piVar1[10] != *(int *)(puVar6 + 8)) || (uVar5 != piVar1[0xc]));
|
|
*piVar2 = *piVar1;
|
|
FUN_004d5593((int)piVar1);
|
|
(*(code *)piVar1[7])(piVar1);
|
|
} while( true );
|
|
}
|
|
|
|
|
|
|
|
/* @004d59e0 file=? name=FUN_004d59e0 */
|
|
|
|
void __cdecl FUN_004d59e0(int param_1)
|
|
|
|
{
|
|
FUN_004d58d2(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d59f3 file=? name=FUN_004d59f3 */
|
|
|
|
void __cdecl FUN_004d59f3(undefined4 *param_1)
|
|
|
|
{
|
|
undefined4 *unaff_FS_OFFSET;
|
|
|
|
FUN_004d58d2((int)param_1);
|
|
*unaff_FS_OFFSET = *param_1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5a10 file=? name=FUN_004d5a10 */
|
|
|
|
int * __cdecl FUN_004d5a10(int param_1,int param_2)
|
|
|
|
{
|
|
bool bVar1;
|
|
undefined3 extraout_var;
|
|
int *piVar2;
|
|
|
|
piVar2 = (int *)(param_1 + 8);
|
|
while( true ) {
|
|
if (*piVar2 == 0) {
|
|
return (int *)0x0;
|
|
}
|
|
if ((int *)piVar2[1] == (int *)0x0) break;
|
|
bVar1 = FUN_004d50b6(*(int **)(param_2 + 4),*(undefined4 *)(param_2 + 8),(int *)piVar2[1],
|
|
(byte)*(undefined4 *)(param_2 + 0xc));
|
|
if (CONCAT31(extraout_var,bVar1) != 0) {
|
|
return piVar2;
|
|
}
|
|
piVar2 = piVar2 + 5;
|
|
}
|
|
return piVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5a65 file=? name=FUN_004d5a65 */
|
|
|
|
/* WARNING (jumptable): Unable to track spacebase fully for stack */
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
undefined4 FUN_004d5a65(void)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
bool bVar2;
|
|
undefined3 extraout_var;
|
|
int *piVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
int unaff_EBP;
|
|
int iVar6;
|
|
undefined4 *unaff_FS_OFFSET;
|
|
|
|
*(undefined4 *)(unaff_EBP + -4) = *(undefined4 *)(unaff_EBP + 8);
|
|
*(undefined4 *)(unaff_EBP + -8) = *(undefined4 *)(unaff_EBP + 0xc);
|
|
*(undefined4 *)(unaff_EBP + -0xc) = *(undefined4 *)(unaff_EBP + 0x10);
|
|
*(undefined4 *)(unaff_EBP + -0x10) = *(undefined4 *)(*(int *)(unaff_EBP + -4) + 0x1c);
|
|
piVar4 = *(int **)(*(int *)(unaff_EBP + -8) + 8);
|
|
*(int *)(unaff_EBP + -0x18) = *(int *)(unaff_EBP + -8) - piVar4[1];
|
|
*(undefined4 *)(unaff_EBP + -0x1c) = *(undefined4 *)(*(int *)(unaff_EBP + -8) + 0xc);
|
|
if ((*(byte *)(*(int *)(unaff_EBP + -4) + 4) & 6) == 0) {
|
|
uVar5 = (uint)*(ushort *)(*(int *)(unaff_EBP + -8) + 0x10);
|
|
while (uVar5 != 0) {
|
|
*(uint *)(unaff_EBP + -0x14) = (uint)*(ushort *)((int)piVar4 + uVar5);
|
|
*(uint *)(unaff_EBP + -0x20) = (uint)*(ushort *)((int)piVar4 + uVar5 + 2);
|
|
iVar6 = uVar5 + 4;
|
|
switch(*(undefined4 *)(unaff_EBP + -0x20)) {
|
|
case 1:
|
|
if (**(int **)(unaff_EBP + -4) != 0xeefface) {
|
|
*(undefined4 *)(unaff_EBP + -0x34) = *(undefined4 *)(unaff_EBP + -4);
|
|
*(undefined4 *)(unaff_EBP + -0x30) = *(undefined4 *)(unaff_EBP + -0xc);
|
|
*(undefined4 *)(*(int *)(unaff_EBP + -8) + 0x14) = **(undefined4 **)(unaff_EBP + -4);
|
|
*(int *)(*(int *)(unaff_EBP + -8) + 0x18) = unaff_EBP + -0x34;
|
|
_DAT_00524c5c = *(undefined4 *)((int)piVar4 + iVar6);
|
|
iVar6 = FUN_004d69ff();
|
|
LAB_004d5c8d:
|
|
if (iVar6 < 0) {
|
|
if ((*(byte *)(*(int *)(unaff_EBP + -4) + 4) & 1) != 0) {
|
|
*(undefined2 *)(*(int *)(unaff_EBP + -8) + 0x10) = *(undefined2 *)(unaff_EBP + -0x14);
|
|
}
|
|
return 0;
|
|
}
|
|
if (iVar6 != 0) {
|
|
*(undefined4 *)(*(int *)(unaff_EBP + -8) + 0x18) = 0;
|
|
*(undefined4 *)(unaff_EBP + -0x2c) = *(undefined4 *)(unaff_EBP + -0x14);
|
|
LAB_004d5bb9:
|
|
FUN_004d5506(*(undefined4 *)(unaff_EBP + -8),*(undefined4 **)(unaff_EBP + -4));
|
|
FUN_004d58d2(*(int *)(unaff_EBP + -8));
|
|
*(undefined2 *)(*(int *)(unaff_EBP + -8) + 0x10) = *(undefined2 *)(unaff_EBP + -0x2c);
|
|
if (*(int *)(unaff_EBP + -0x20) == 3) {
|
|
FUN_004d571e(*(int *)(unaff_EBP + -0x24),*(undefined4 *)(unaff_EBP + -8),
|
|
*(int *)(unaff_EBP + -0x10),*(int **)(unaff_EBP + -0x28),
|
|
*(int *)(unaff_EBP + -0x18));
|
|
}
|
|
FUN_004d4db0();
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (**(int **)(unaff_EBP + -4) != 0xeefface) {
|
|
*(undefined4 *)(*(int *)(unaff_EBP + -8) + 0x14) = **(undefined4 **)(unaff_EBP + -4);
|
|
iVar6 = *(int *)((int)piVar4 + iVar6);
|
|
goto LAB_004d5c8d;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (**(int **)(unaff_EBP + -4) == 0xeefface) {
|
|
*(undefined4 *)(unaff_EBP + -0x28) = *(undefined4 *)((int)piVar4 + iVar6);
|
|
piVar3 = FUN_004d5a10(*(int *)(unaff_EBP + -0x28),*(int *)(unaff_EBP + -0x10));
|
|
*(int **)(unaff_EBP + -0x24) = piVar3;
|
|
if (*(int *)(unaff_EBP + -0x24) != 0) {
|
|
*(undefined4 *)(*(int *)(unaff_EBP + -0x10) + 0x28) = *(undefined4 *)(unaff_EBP + -8);
|
|
*(undefined4 *)(*(int *)(unaff_EBP + -0x10) + 0x2c) = *(undefined4 *)(unaff_EBP + -0x24)
|
|
;
|
|
*(uint *)(*(int *)(unaff_EBP + -0x10) + 0x30) = uVar5 + 8;
|
|
*(uint *)(unaff_EBP + -0x2c) = uVar5 + 8;
|
|
goto LAB_004d5bb9;
|
|
}
|
|
}
|
|
}
|
|
uVar5 = *(uint *)(unaff_EBP + -0x14);
|
|
}
|
|
}
|
|
else {
|
|
FUN_004d58d2(*(int *)(unaff_EBP + -8));
|
|
if ((**(int **)(unaff_EBP + -4) == 0xeefface) && (piVar4 = (int *)*piVar4, piVar4 != (int *)0x0)
|
|
) {
|
|
for (; *piVar4 != 0; piVar4 = piVar4 + 1) {
|
|
bVar2 = FUN_004d50b6(*(int **)(*(int *)(unaff_EBP + -0x10) + 4),
|
|
*(undefined4 *)(*(int *)(unaff_EBP + -0x10) + 8),(int *)*piVar4,
|
|
(byte)*(undefined4 *)(*(int *)(unaff_EBP + -0x10) + 0xc));
|
|
if (CONCAT31(extraout_var,bVar2) != 0) {
|
|
return 1;
|
|
}
|
|
}
|
|
uVar1 = *unaff_FS_OFFSET;
|
|
*unaff_FS_OFFSET = **(undefined4 **)(unaff_EBP + -8);
|
|
FUN_004d679c();
|
|
*unaff_FS_OFFSET = uVar1;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5cdf file=? name=FUN_004d5cdf */
|
|
|
|
void __cdecl FUN_004d5cdf(undefined4 param_1,int param_2,int param_3)
|
|
|
|
{
|
|
undefined4 *unaff_FS_OFFSET;
|
|
undefined4 local_24;
|
|
|
|
FUN_004d66b8();
|
|
FUN_004d51fb(param_1,*(undefined **)(param_2 + 0x28),(uint)*(ushort *)(param_2 + 0x2c),param_3);
|
|
*unaff_FS_OFFSET = local_24;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5d4b file=? name=FUN_004d5d4b */
|
|
|
|
void __cdecl
|
|
FUN_004d5d4b(int param_1,int *param_2,int *param_3,uint param_4,int param_5,undefined4 param_6)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int *piVar2;
|
|
|
|
while (piVar2 = param_2 + -3, param_3 <= piVar2) {
|
|
puVar1 = (undefined4 *)(param_2[-2] + param_1);
|
|
if (param_5 != 0) {
|
|
puVar1 = (undefined4 *)*puVar1;
|
|
}
|
|
param_2 = piVar2;
|
|
if ((*(byte *)(*piVar2 + 0xc) & 2) != 0) {
|
|
FUN_004d5d90((int)puVar1,*piVar2,param_4,0,param_6);
|
|
param_4 = 0;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5d90 file=? name=FUN_004d5d90 */
|
|
|
|
void __cdecl FUN_004d5d90(int param_1,int param_2,uint param_3,int param_4,undefined4 param_5)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int *piVar4;
|
|
int *piVar5;
|
|
int *piVar6;
|
|
int *piVar7;
|
|
uint local_18;
|
|
int *local_10;
|
|
|
|
if (param_4 == 0) {
|
|
uVar3 = *(uint *)(param_2 + 0x24);
|
|
}
|
|
else {
|
|
uVar3 = *(uint *)(param_2 + 0x20);
|
|
}
|
|
if ((param_3 == 0) || (uVar3 <= param_3)) {
|
|
FUN_004d5cdf(param_1,param_2,param_4);
|
|
}
|
|
else {
|
|
piVar1 = (int *)((uint)*(ushort *)(param_2 + 0x12) + param_2);
|
|
local_10 = piVar1;
|
|
if (param_4 != 0) {
|
|
for (; iVar2 = *local_10, iVar2 != 0; local_10 = local_10 + 3) {
|
|
if ((*(byte *)(iVar2 + 0xc) & 2) != 0) {
|
|
if (param_3 <= *(uint *)(iVar2 + 0x24)) {
|
|
FUN_004d5d4b(param_1,local_10 + 3,piVar1,param_3,1,param_5);
|
|
return;
|
|
}
|
|
param_3 = param_3 - *(uint *)(iVar2 + 0x24);
|
|
}
|
|
}
|
|
}
|
|
piVar6 = (int *)((uint)*(ushort *)(param_2 + 0x10) + param_2);
|
|
for (piVar7 = piVar6; iVar2 = *piVar7, iVar2 != 0; piVar7 = piVar7 + 3) {
|
|
if ((*(byte *)(iVar2 + 0xc) & 2) != 0) {
|
|
if (param_3 <= *(uint *)(iVar2 + 0x24)) {
|
|
FUN_004d5d4b(param_1,piVar7 + 3,piVar6,param_3,0,param_5);
|
|
if (param_4 == 0) {
|
|
return;
|
|
}
|
|
FUN_004d5d4b(param_1,local_10,piVar1,0,1,param_5);
|
|
return;
|
|
}
|
|
param_3 = param_3 - *(uint *)(iVar2 + 0x24);
|
|
}
|
|
}
|
|
piVar4 = (int *)((uint)*(ushort *)(param_2 + 0x2e) + param_2);
|
|
piVar5 = piVar4;
|
|
while( true ) {
|
|
iVar2 = *piVar5;
|
|
local_18 = 1;
|
|
if ((*(byte *)(iVar2 + 5) & 4) != 0) {
|
|
local_18 = *(uint *)(iVar2 + 0xc);
|
|
iVar2 = *(int *)(iVar2 + 8);
|
|
}
|
|
uVar3 = *(int *)(iVar2 + 0x20) * local_18;
|
|
if (param_3 <= uVar3) break;
|
|
param_3 = param_3 - uVar3;
|
|
piVar5 = piVar5 + 2;
|
|
}
|
|
do {
|
|
if (local_18 < 2) {
|
|
FUN_004d5d90(param_1 + piVar5[1],*piVar5,param_3,1,param_5);
|
|
}
|
|
else {
|
|
FUN_004d5f36(param_1 + piVar5[1],*piVar5,param_3,param_5);
|
|
}
|
|
param_3 = 0;
|
|
piVar5 = piVar5 + -2;
|
|
} while (piVar4 <= piVar5);
|
|
FUN_004d5d4b(param_1,piVar7,piVar6,0,0,param_5);
|
|
if (param_4 != 0) {
|
|
FUN_004d5d4b(param_1,local_10,piVar1,0,1,param_5);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5f36 file=? name=FUN_004d5f36 */
|
|
|
|
void __cdecl FUN_004d5f36(int param_1,int param_2,uint param_3,undefined4 param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
uint local_8;
|
|
|
|
piVar1 = *(int **)(param_2 + 8);
|
|
uVar2 = piVar1[8];
|
|
if (param_3 == 0) {
|
|
param_3 = uVar2 * *(int *)(param_2 + 0xc);
|
|
}
|
|
local_8 = param_3 / uVar2;
|
|
uVar3 = param_3 - local_8 * uVar2;
|
|
iVar4 = param_1 + local_8 * *piVar1;
|
|
if (uVar3 != 0) {
|
|
FUN_004d5d90(iVar4,(int)piVar1,uVar3,1,param_4);
|
|
}
|
|
while (local_8 != 0) {
|
|
iVar4 = iVar4 - *piVar1;
|
|
FUN_004d5d90(iVar4,(int)piVar1,uVar2,1,param_4);
|
|
local_8 = local_8 - 1;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5fa8 file=? name=FUN_004d5fa8 */
|
|
|
|
int __cdecl FUN_004d5fa8(int param_1,int *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
|
|
iVar1 = *param_2;
|
|
if ((*(uint *)(iVar1 + 0xc) & 0x50) != 0x50) {
|
|
return param_1;
|
|
}
|
|
if (*(int *)(iVar1 + 8) == -1) {
|
|
return param_1;
|
|
}
|
|
iVar1 = *(int *)(*(int *)(iVar1 + 8) + param_1);
|
|
iVar2 = *(int *)(iVar1 + -8);
|
|
*param_2 = *(int *)((iVar1 - *(int *)(iVar1 + -4)) + -0xc);
|
|
return param_1 - iVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d5fe6 file=? name=FUN_004d5fe6 */
|
|
|
|
undefined4 __cdecl FUN_004d5fe6(int *param_1,int param_2,int param_3,int param_4)
|
|
|
|
{
|
|
bool bVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
int *piVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
int *local_1c;
|
|
int *local_18;
|
|
int local_14;
|
|
int *local_10;
|
|
int local_c;
|
|
int local_8;
|
|
|
|
local_8 = 0;
|
|
if (param_1 == (int *)0x0) {
|
|
uVar2 = 0;
|
|
}
|
|
else {
|
|
uVar7 = (*DAT_00524c68 - *(int *)(param_3 + 0x1c)) - param_2;
|
|
if ((*(byte *)(param_1 + 1) & 0x20) != 0) {
|
|
uVar7 = *(uint *)(*(int *)(*param_1 + 8) + 0x20);
|
|
}
|
|
if ((*(byte *)((int)param_1 + 5) & 1) == 0) {
|
|
piVar5 = param_1;
|
|
if ((int)uVar7 < 1) {
|
|
if ((param_1[1] & 3U) != 3) {
|
|
return 0;
|
|
}
|
|
local_8 = 1;
|
|
}
|
|
else {
|
|
for (; *piVar5 != 0; piVar5 = piVar5 + 3) {
|
|
local_c = *piVar5;
|
|
iVar6 = 1;
|
|
if (((((*(byte *)(local_c + 4) & 0x10) != 0) &&
|
|
(local_c = *(int *)(local_c + 8), (*(byte *)(local_c + 4) & 2) != 0)) &&
|
|
((*(byte *)(local_c + 0xc) & 0x20) != 0)) && ((*(byte *)(piVar5 + 1) & 8) != 0)) {
|
|
if ((*(byte *)(piVar5 + 1) & 4) == 0) {
|
|
local_10 = (int *)piVar5[2];
|
|
}
|
|
else {
|
|
local_10 = (int *)(param_4 + piVar5[2]);
|
|
}
|
|
local_10 = (int *)*local_10;
|
|
if ((*(byte *)(piVar5 + 1) & 0x40) != 0) {
|
|
local_10 = (int *)((int)local_10 + 4);
|
|
}
|
|
local_10 = (int *)FUN_004d5fa8((int)local_10,&local_c);
|
|
}
|
|
iVar3 = local_c;
|
|
if ((*(byte *)(local_c + 5) & 4) != 0) {
|
|
iVar6 = *(int *)(local_c + 0xc);
|
|
iVar3 = *(int *)(local_c + 8);
|
|
}
|
|
uVar4 = *(int *)(iVar3 + 0x20) * iVar6;
|
|
if (uVar7 <= uVar4) goto LAB_004d6109;
|
|
uVar7 = uVar7 - uVar4;
|
|
}
|
|
piVar5 = piVar5 + -3;
|
|
}
|
|
LAB_004d6109:
|
|
do {
|
|
local_14 = *piVar5;
|
|
uVar4 = piVar5[1];
|
|
if ((uVar4 & 4) == 0) {
|
|
local_18 = (int *)piVar5[2];
|
|
}
|
|
else {
|
|
local_18 = (int *)(param_4 + piVar5[2]);
|
|
}
|
|
if ((uVar4 & 0x11) != 0) {
|
|
local_14 = *(int *)(local_14 + 8);
|
|
local_1c = (int *)*local_18;
|
|
local_18 = local_1c;
|
|
if ((uVar4 & 0x48) == 0x40) {
|
|
local_18 = local_1c + 1;
|
|
}
|
|
if ((((*(byte *)(local_14 + 4) & 2) != 0) && ((*(byte *)(local_14 + 0xc) & 0x20) != 0)) &&
|
|
((uVar4 & 8) != 0)) {
|
|
local_18 = (int *)FUN_004d5fa8((int)local_18,&local_14);
|
|
}
|
|
}
|
|
if (local_8 == 0) {
|
|
if ((*(byte *)(local_14 + 5) & 4) == 0) {
|
|
FUN_004d5d90((int)local_18,local_14,uVar7,1,param_4);
|
|
}
|
|
else {
|
|
FUN_004d5f36((int)local_18,local_14,uVar7,param_4);
|
|
}
|
|
}
|
|
if ((uVar4 & 3) == 3) {
|
|
if ((uVar4 & 0x48) == 0x48) {
|
|
local_1c = local_1c + -1;
|
|
}
|
|
if ((*(byte *)(local_14 + 5) & 4) == 0) {
|
|
if (*(int *)(local_14 + 0x14) == 0) {
|
|
FUN_004022d0(local_1c);
|
|
}
|
|
else {
|
|
FUN_004d5248(local_1c,*(undefined **)(local_14 + 0x14),
|
|
(uint)*(ushort *)(local_14 + 0x18));
|
|
}
|
|
}
|
|
else {
|
|
local_14 = *(int *)(local_14 + 8);
|
|
if (*(int *)(local_14 + 0x1c) == 0) {
|
|
FUN_004022e8(local_1c);
|
|
}
|
|
else {
|
|
FUN_004d5248(local_1c,*(undefined **)(local_14 + 0x1c),
|
|
(uint)*(ushort *)(local_14 + 0x1a));
|
|
}
|
|
}
|
|
}
|
|
uVar7 = 0;
|
|
bVar1 = param_1 < piVar5;
|
|
piVar5 = piVar5 + -3;
|
|
} while (bVar1);
|
|
uVar2 = 0;
|
|
}
|
|
else {
|
|
uVar2 = *(undefined4 *)(*param_1 + 0x24);
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6257 file=? name=FUN_004d6257 */
|
|
|
|
uint __cdecl FUN_004d6257(int param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
|
|
if (param_1 == -1) {
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
else {
|
|
iVar2 = FUN_004d4b14((byte *)(*(int *)(param_1 + 4) + -8),(byte *)s___BCCxh1_0051f6e1,8);
|
|
if (iVar2 == 0) {
|
|
uVar1 = (uint)*(ushort *)(param_1 + 0x10);
|
|
}
|
|
else {
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d62b7 file=? name=FUN_004d62b7 */
|
|
|
|
undefined4 * __cdecl FUN_004d62b7(undefined4 *param_1)
|
|
|
|
{
|
|
undefined4 local_8;
|
|
|
|
*param_1 = &PTR_FUN_0051f6f8;
|
|
local_8 = 0;
|
|
FUN_004d5488((uint *)&DAT_004d6621,&local_8,0,(undefined *)0x0,0,0,0,0);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d62ed file=? name=FUN_004d62ed */
|
|
|
|
undefined4 __cdecl FUN_004d62ed(undefined4 param_1)
|
|
|
|
{
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d62f5 file=? name=FUN_004d62f5 */
|
|
|
|
void __cdecl FUN_004d62f5(int *param_1,byte param_2)
|
|
|
|
{
|
|
if ((param_1 != (int *)0x0) && (*param_1 = (int)&PTR_FUN_0051f6f8, (param_2 & 1) != 0)) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6314 file=? name=FUN_004d6314 */
|
|
|
|
void __cdecl FUN_004d6314(int param_1,int param_2)
|
|
|
|
{
|
|
FUN_004d4dd0(*(int **)(param_1 + 4),*(int **)(param_2 + 4));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d632d file=? name=FUN_004d632d */
|
|
|
|
bool __cdecl FUN_004d632d(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = FUN_004d6314(param_1,param_2);
|
|
return iVar1 == 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d634a file=? name=FUN_004d634a */
|
|
|
|
bool __cdecl FUN_004d634a(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
bool bVar2;
|
|
|
|
if (*(int *)(param_1 + 4) == 0) {
|
|
bVar2 = false;
|
|
}
|
|
else if (*(int *)(param_2 + 4) == 0) {
|
|
bVar2 = true;
|
|
}
|
|
else {
|
|
iVar1 = FUN_004d4a1c((char *)((uint)*(ushort *)(*(int *)(param_1 + 4) + 6) +
|
|
*(int *)(param_1 + 4)),
|
|
(char *)((uint)*(ushort *)(*(int *)(param_2 + 4) + 6) +
|
|
*(int *)(param_2 + 4)));
|
|
bVar2 = iVar1 < 0;
|
|
}
|
|
return bVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6396 file=? name=FUN_004d6396 */
|
|
|
|
void __cdecl FUN_004d6396(int param_1)
|
|
|
|
{
|
|
FUN_004d4db7(*(int *)(param_1 + 4));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d63a7 file=? name=FUN_004d63a7 */
|
|
|
|
int __cdecl FUN_004d63a7(int param_1,int param_2,undefined4 param_3,int param_4)
|
|
|
|
{
|
|
if (param_1 == 0) {
|
|
FUN_004d5488((uint *)&DAT_004d6638,(undefined4 *)&DAT_00524c60,0,(undefined *)0x0,0,0,0,0);
|
|
}
|
|
*(undefined4 *)(param_4 + 4) = *(undefined4 *)((param_2 - *(int *)(param_2 + -4)) + -0xc);
|
|
return param_4;
|
|
}
|
|
|
|
|
|
|
|
/* @004d63e5 file=? name=FUN_004d63e5 */
|
|
|
|
undefined4 * __cdecl
|
|
FUN_004d63e5(int param_1,int *param_2,undefined4 *param_3,int *param_4,int param_5,int *param_6,
|
|
uint *param_7,int param_8,int *param_9)
|
|
|
|
{
|
|
int *piVar1;
|
|
bool bVar2;
|
|
int iVar3;
|
|
undefined4 *puVar4;
|
|
undefined4 *puVar5;
|
|
undefined4 *puVar6;
|
|
int *local_1c;
|
|
uint local_18;
|
|
int local_14;
|
|
undefined4 *local_10;
|
|
uint local_c;
|
|
|
|
local_c = 0;
|
|
local_10 = (undefined4 *)0x0;
|
|
local_14 = 0;
|
|
if (((param_6 != (int *)0x0) && (iVar3 = FUN_004d4dd0(param_6,param_2), iVar3 != 0)) ||
|
|
((*(byte *)(param_2 + 3) & 4) == 0)) {
|
|
return (undefined4 *)0x0;
|
|
}
|
|
bVar2 = false;
|
|
puVar5 = (undefined4 *)((uint)*(ushort *)((int)param_2 + 0x12) + (int)param_2);
|
|
do {
|
|
while (piVar1 = (int *)*puVar5, piVar1 == (int *)0x0) {
|
|
if (bVar2) {
|
|
*param_7 = local_c;
|
|
if (local_14 != 1) {
|
|
return (undefined4 *)0x0;
|
|
}
|
|
return local_10;
|
|
}
|
|
bVar2 = true;
|
|
puVar5 = (undefined4 *)((uint)*(ushort *)(param_2 + 4) + (int)param_2);
|
|
}
|
|
if ((*(byte *)(puVar5 + 2) & 8) == 0) {
|
|
if ((param_8 == 0) || ((puVar5[2] & 3) != 3)) {
|
|
local_18 = 0;
|
|
}
|
|
else {
|
|
local_18 = 1;
|
|
}
|
|
puVar6 = (undefined4 *)(param_1 + puVar5[1]);
|
|
local_1c = param_9;
|
|
if ((*(byte *)(puVar5 + 2) & 4) != 0) {
|
|
puVar6 = (undefined4 *)*puVar6;
|
|
local_1c = piVar1;
|
|
}
|
|
iVar3 = FUN_004d4dd0(param_4,piVar1);
|
|
if (iVar3 == 0) {
|
|
if (((*(byte *)(piVar1 + 3) & 4) != 0) &&
|
|
(puVar6 = FUN_004d63e5((int)puVar6,piVar1,param_3,param_4,param_5,param_6,param_7,
|
|
local_18,local_1c), puVar6 != (undefined4 *)0x0)) {
|
|
local_18 = *param_7;
|
|
LAB_004d6500:
|
|
if ((local_14 == 0) || (puVar6 != local_10)) {
|
|
local_14 = local_14 + 1;
|
|
local_c = local_18;
|
|
local_10 = puVar6;
|
|
}
|
|
else {
|
|
local_c = local_c | local_18;
|
|
}
|
|
}
|
|
}
|
|
else if (param_3 == (undefined4 *)0x0) {
|
|
if ((param_5 == 0) ||
|
|
(puVar4 = FUN_004d63e5((int)puVar6,piVar1,(undefined4 *)param_5,param_6,0,(int *)0x0,
|
|
param_7,0,(int *)0x0), puVar4 != (undefined4 *)0x0))
|
|
goto LAB_004d6500;
|
|
}
|
|
else if (puVar6 == param_3) {
|
|
return puVar6;
|
|
}
|
|
}
|
|
puVar5 = puVar5 + 3;
|
|
} while( true );
|
|
}
|
|
|
|
|
|
|
|
/* @004d655c file=? name=FUN_004d655c */
|
|
|
|
undefined4 * __cdecl FUN_004d655c(int param_1,int param_2,int *param_3,int *param_4,int param_5)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
undefined4 *puVar3;
|
|
undefined4 *puVar4;
|
|
uint local_c;
|
|
int *local_8;
|
|
|
|
local_8 = param_3;
|
|
if (param_1 != 0) {
|
|
puVar4 = (undefined4 *)(param_1 - *(int *)(param_2 + -8));
|
|
piVar1 = *(int **)((param_2 - *(int *)(param_2 + -4)) + -0xc);
|
|
if (param_4 == (int *)0x0) {
|
|
return puVar4;
|
|
}
|
|
iVar2 = FUN_004d4dd0(param_4,piVar1);
|
|
if (iVar2 != 0) {
|
|
return puVar4;
|
|
}
|
|
iVar2 = FUN_004d4dd0(local_8,piVar1);
|
|
if ((iVar2 == 0) &&
|
|
(puVar3 = FUN_004d63e5((int)puVar4,piVar1,(undefined4 *)0x0,param_4,param_1,local_8,&local_c,
|
|
1,(int *)0x0), puVar3 != (undefined4 *)0x0)) {
|
|
return puVar3;
|
|
}
|
|
puVar4 = FUN_004d63e5((int)puVar4,piVar1,(undefined4 *)0x0,param_4,0,(int *)0x0,&local_c,1,
|
|
(int *)0x0);
|
|
if ((puVar4 != (undefined4 *)0x0) && (local_c != 0)) {
|
|
return puVar4;
|
|
}
|
|
}
|
|
if (param_5 != 0) {
|
|
FUN_004d5488((uint *)&DAT_004d6654,(undefined4 *)&DAT_00524c61,0,(undefined *)0x0,0,0,0,0);
|
|
}
|
|
return (undefined4 *)0x0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d66b8 file=? name=FUN_004d66b8 */
|
|
|
|
void FUN_004d66b8(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int in_EAX;
|
|
undefined4 *puVar2;
|
|
int unaff_EBP;
|
|
undefined2 in_FS;
|
|
|
|
puVar2 = (undefined4 *)(unaff_EBP + *(int *)(in_EAX + 4));
|
|
puVar2[2] = in_EAX;
|
|
puVar2[3] = &stack0x00000004;
|
|
puVar2[1] = &DAT_004d5a5f;
|
|
puVar2[4] = 0;
|
|
*(undefined4 *)((int)puVar2 + 0x12) = 0;
|
|
puVar2[7] = *DAT_00524c68;
|
|
puVar1 = (undefined4 *)segment(in_FS,0);
|
|
*puVar2 = *puVar1;
|
|
puVar1 = (undefined4 *)segment(in_FS,0);
|
|
*puVar1 = puVar2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d66fe file=? name=FUN_004d66fe */
|
|
|
|
undefined4 __cdecl FUN_004d66fe(int param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int unaff_FS_OFFSET;
|
|
|
|
uVar1 = *(undefined4 *)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 8);
|
|
if (param_1 != 0) {
|
|
*(int *)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 8) = param_1;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6723 file=? name=FUN_004d6723 */
|
|
|
|
void FUN_004d6723(void)
|
|
|
|
{
|
|
undefined4 *unaff_FS_OFFSET;
|
|
undefined4 local_24;
|
|
|
|
FUN_004d66b8();
|
|
thunk_FUN_004d87e8();
|
|
(**(code **)(*(int *)(unaff_FS_OFFSET[1] + -8) + 8))();
|
|
FUN_004dedb8();
|
|
*unaff_FS_OFFSET = local_24;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6777 file=? name=FUN_004d6777 */
|
|
|
|
undefined4 __cdecl FUN_004d6777(int param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int unaff_FS_OFFSET;
|
|
|
|
uVar1 = *(undefined4 *)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 0xc);
|
|
if (param_1 != 0) {
|
|
*(int *)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 0xc) = param_1;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d679c file=? name=FUN_004d679c */
|
|
|
|
void FUN_004d679c(void)
|
|
|
|
{
|
|
int unaff_FS_OFFSET;
|
|
|
|
(**(code **)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 0xc))();
|
|
FUN_004dedb8();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d67b0 file=? name=FUN_004d67b0 */
|
|
|
|
undefined4 __cdecl FUN_004d67b0(int param_1,int param_2)
|
|
|
|
{
|
|
if (param_1 == 0) {
|
|
return 0;
|
|
}
|
|
return *(undefined4 *)
|
|
(*(int *)((*(int *)(param_1 + param_2) - *(int *)(*(int *)(param_1 + param_2) + -4)) +
|
|
-0xc) + 0x20);
|
|
}
|
|
|
|
|
|
|
|
/* @004d67cf file=? name=FUN_004d67cf */
|
|
|
|
void __cdecl FUN_004d67cf(int param_1)
|
|
|
|
{
|
|
HMODULE hModule;
|
|
FARPROC pFVar1;
|
|
int unaff_FS_OFFSET;
|
|
bool bVar2;
|
|
uint local_c;
|
|
int local_8;
|
|
|
|
bVar2 = param_1 == 0;
|
|
if (param_1 == 0) {
|
|
if (DAT_004e0058 != '\0') {
|
|
pFVar1 = (FARPROC)0x0;
|
|
hModule = GetModuleHandleA((LPCSTR)0x0);
|
|
if (hModule != (HMODULE)0x0) {
|
|
pFVar1 = GetProcAddress(hModule,s___GetExceptDLLinfo_0051f7d8);
|
|
}
|
|
if (pFVar1 != (FARPROC)0x0) {
|
|
(*pFVar1)(&local_c);
|
|
if ((0x82727348 < local_c) && (local_c < 0x8272735a)) {
|
|
param_1 = local_8;
|
|
}
|
|
}
|
|
}
|
|
if (param_1 == 0) {
|
|
FUN_004d6888(&local_c);
|
|
param_1 = local_8;
|
|
}
|
|
}
|
|
else {
|
|
*(undefined1 **)(param_1 + 8) = &LAB_004d66f8;
|
|
*(undefined1 **)(param_1 + 0xc) = &LAB_004d6771;
|
|
}
|
|
*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) = param_1;
|
|
if (bVar2) {
|
|
DAT_00524c68 = *(int *)(unaff_FS_OFFSET + 4) + -4;
|
|
}
|
|
*(undefined4 *)(*(int *)(unaff_FS_OFFSET + 4) + -4) = 0;
|
|
*(undefined4 *)(*(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 4) = 0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6888 file=? name=FUN_004d6888 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void __cdecl FUN_004d6888(undefined4 *param_1)
|
|
|
|
{
|
|
int unaff_FS_OFFSET;
|
|
|
|
_DAT_0051f718 = *(int *)(*(int *)(unaff_FS_OFFSET + 4) + -8) + 0x24;
|
|
*param_1 = 0x82727349;
|
|
param_1[1] = &DAT_0051f6fc;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d68b0 file=? name=FUN_004d68b0 */
|
|
|
|
undefined4 FUN_004d68b0(void)
|
|
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6958 file=? name=FUN_004d6958 */
|
|
|
|
void __cdecl FUN_004d6958(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = 0;
|
|
param_1[1] = &LAB_004d68bc;
|
|
FUN_004d6a08(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6974 file=? name=FUN_004d6974 */
|
|
|
|
void __cdecl FUN_004d6974(undefined4 *param_1)
|
|
|
|
{
|
|
FUN_004d6a1d(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6984 file=? name=FUN_004d6984 */
|
|
|
|
undefined4 __cdecl FUN_004d6984(undefined4 param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = DAT_00524c70;
|
|
DAT_00524c70 = param_1;
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d69d0 file=? name=FUN_004d69d0 */
|
|
|
|
void FUN_004d69d0(void)
|
|
|
|
{
|
|
if (DAT_005252c4 != (undefined4 *)0x0) {
|
|
FUN_004d6958(DAT_005252c4);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d69ea file=? name=FUN_004d69ea */
|
|
|
|
void __fastcall FUN_004d69ea(undefined4 param_1,PEXCEPTION_RECORD param_2)
|
|
|
|
{
|
|
PVOID in_EAX;
|
|
|
|
RtlUnwind(in_EAX,(PVOID)0x4d69fb,param_2,(PVOID)0x0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d69ff file=? name=FUN_004d69ff */
|
|
|
|
void FUN_004d69ff(void)
|
|
|
|
{
|
|
undefined4 *unaff_EBX;
|
|
|
|
(*(code *)*unaff_EBX)();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a08 file=? name=FUN_004d6a08 */
|
|
|
|
void __cdecl FUN_004d6a08(undefined4 *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
undefined2 in_FS;
|
|
|
|
puVar1 = (undefined4 *)segment(in_FS,0);
|
|
*param_1 = *puVar1;
|
|
puVar1 = (undefined4 *)segment(in_FS,0);
|
|
*puVar1 = param_1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a1d file=? name=FUN_004d6a1d */
|
|
|
|
void __cdecl FUN_004d6a1d(undefined4 *param_1)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int *piVar2;
|
|
undefined2 in_FS;
|
|
|
|
piVar2 = (int *)segment(in_FS,0);
|
|
piVar2 = (int *)*piVar2;
|
|
if (param_1 == piVar2) {
|
|
puVar1 = (undefined4 *)segment(in_FS,0);
|
|
*puVar1 = *param_1;
|
|
}
|
|
else {
|
|
for (; piVar2 != (int *)0xffffffff; piVar2 = (int *)*piVar2) {
|
|
if ((undefined4 *)*piVar2 == param_1) {
|
|
*piVar2 = *param_1;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a50 file=? name=thunk_FUN_004d92c4 */
|
|
|
|
undefined4 __cdecl thunk_FUN_004d92c4(uint param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
BOOL BVar2;
|
|
|
|
if (DAT_0051fbc0 <= param_1) {
|
|
uVar1 = FUN_004d9148(6);
|
|
return uVar1;
|
|
}
|
|
BVar2 = CloseHandle(*(HANDLE *)(&DAT_00524d14 + param_1 * 4));
|
|
if (BVar2 == 1) {
|
|
(&DAT_0051fbc4)[param_1] = 0;
|
|
return 0;
|
|
}
|
|
uVar1 = FUN_004d91ac();
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a58 file=? name=thunk_FUN_004d87e8 */
|
|
|
|
int thunk_FUN_004d87e8(void)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
iVar3 = 0;
|
|
piVar1 = &DAT_0051f800;
|
|
iVar2 = DAT_0051fbc0;
|
|
while (iVar2 != 0) {
|
|
if ((*(byte *)((int)piVar1 + 0x12) & 3) != 0) {
|
|
FUN_004d6b9c(piVar1);
|
|
iVar3 = iVar3 + 1;
|
|
}
|
|
piVar1 = piVar1 + 6;
|
|
iVar2 = iVar2 + -1;
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a60 file=? name=thunk_FUN_004d9304 */
|
|
|
|
bool __cdecl thunk_FUN_004d9304(uint param_1)
|
|
|
|
{
|
|
DWORD DVar1;
|
|
|
|
if (DAT_0051fbc0 <= param_1) {
|
|
return false;
|
|
}
|
|
DVar1 = GetFileType(*(HANDLE *)(&DAT_00524d14 + param_1 * 4));
|
|
return DVar1 == 2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a68 file=? name=thunk_FUN_004d9334 */
|
|
|
|
DWORD __cdecl thunk_FUN_004d9334(uint param_1,LONG param_2,int param_3)
|
|
|
|
{
|
|
DWORD DVar1;
|
|
|
|
if (param_1 < DAT_0051fbc0) {
|
|
if (param_3 == 0) {
|
|
DVar1 = 0;
|
|
}
|
|
else if (param_3 == 1) {
|
|
DVar1 = 1;
|
|
}
|
|
else {
|
|
if (param_3 != 2) {
|
|
DVar1 = FUN_004d9148(1);
|
|
return DVar1;
|
|
}
|
|
DVar1 = 2;
|
|
}
|
|
(&DAT_0051fbc4)[param_1] = (&DAT_0051fbc4)[param_1] & 0xfffffdff;
|
|
DVar1 = SetFilePointer(*(HANDLE *)(&DAT_00524d14 + param_1 * 4),param_2,(PLONG)0x0,DVar1);
|
|
if (DVar1 == 0xffffffff) {
|
|
FUN_004d91ac();
|
|
}
|
|
}
|
|
else {
|
|
DVar1 = FUN_004d9148(6);
|
|
}
|
|
return DVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a70 file=? name=thunk_FUN_004d93ac */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
int __cdecl thunk_FUN_004d93ac(LPCSTR param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
bool bVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
HANDLE hObject;
|
|
undefined3 extraout_var;
|
|
DWORD dwFlagsAndAttributes;
|
|
DWORD DVar4;
|
|
_SECURITY_ATTRIBUTES _Stack_18;
|
|
DWORD DStack_c;
|
|
DWORD DStack_8;
|
|
|
|
if ((param_2 & 0xc000) == 0) {
|
|
param_2 = param_2 | *(uint *)PTR_DAT_0051fc68 & 0xc000;
|
|
}
|
|
if ((param_2 & 0x8000) == 0) {
|
|
param_2 = param_2 | 0x4000;
|
|
}
|
|
uVar2 = param_2 & 0x700;
|
|
if (uVar2 < 0x501) {
|
|
if (uVar2 == 0x500) {
|
|
LAB_004d940f:
|
|
DVar4 = 1;
|
|
goto LAB_004d9430;
|
|
}
|
|
if (uVar2 == 0x100) {
|
|
DVar4 = 4;
|
|
goto LAB_004d9430;
|
|
}
|
|
if (uVar2 != 0x200) {
|
|
if (uVar2 == 0x300) {
|
|
DVar4 = 2;
|
|
goto LAB_004d9430;
|
|
}
|
|
goto LAB_004d942b;
|
|
}
|
|
}
|
|
else if (uVar2 != 0x600) {
|
|
if (uVar2 != 0x700) {
|
|
LAB_004d942b:
|
|
DVar4 = 3;
|
|
goto LAB_004d9430;
|
|
}
|
|
goto LAB_004d940f;
|
|
}
|
|
DVar4 = 5;
|
|
LAB_004d9430:
|
|
if ((param_2 & 0x100) == 0) {
|
|
dwFlagsAndAttributes = GetFileAttributesA(param_1);
|
|
if (dwFlagsAndAttributes == 0xffffffff) {
|
|
dwFlagsAndAttributes = 0;
|
|
}
|
|
}
|
|
else if ((param_3 & _DAT_005201e4 & 0x80) == 0) {
|
|
dwFlagsAndAttributes = 1;
|
|
}
|
|
else {
|
|
dwFlagsAndAttributes = 0x80;
|
|
}
|
|
uVar2 = param_2 & 3;
|
|
if (uVar2 == 0) {
|
|
DStack_8 = 0x80000000;
|
|
}
|
|
else if (uVar2 == 1) {
|
|
DStack_8 = 0x40000000;
|
|
}
|
|
else {
|
|
if (uVar2 != 2) {
|
|
iVar3 = FUN_004d9148(1);
|
|
return iVar3;
|
|
}
|
|
DStack_8 = 0xc0000000;
|
|
}
|
|
uVar2 = param_2 & 0x70;
|
|
if (uVar2 == 0x10) {
|
|
DStack_c = 0;
|
|
}
|
|
else if (uVar2 == 0x20) {
|
|
DStack_c = 1;
|
|
}
|
|
else if (uVar2 == 0x30) {
|
|
DStack_c = 2;
|
|
}
|
|
else {
|
|
DStack_c = 3;
|
|
}
|
|
_Stack_18.nLength = 0xc;
|
|
_Stack_18.lpSecurityDescriptor = (LPVOID)0x0;
|
|
_Stack_18.bInheritHandle = (BOOL)((param_2 & 0x80) == 0);
|
|
hObject = CreateFileA(param_1,DStack_8,DStack_c,&_Stack_18,DVar4,dwFlagsAndAttributes,(HANDLE)0x0)
|
|
;
|
|
if (hObject == (HANDLE)0xffffffff) {
|
|
DVar4 = GetLastError();
|
|
uVar2 = DVar4 & 0xffff;
|
|
if ((uVar2 == 0x6e) && (uVar2 = 0x50, (param_2 & 0x100) == 0)) {
|
|
uVar2 = 2;
|
|
}
|
|
iVar3 = FUN_004d9148(uVar2);
|
|
}
|
|
else {
|
|
bVar1 = FUN_004d9304((uint)hObject);
|
|
if (CONCAT31(extraout_var,bVar1) != 0) {
|
|
param_2 = param_2 | 0x2000;
|
|
}
|
|
iVar3 = FUN_004d8eac(hObject,param_2 & 0xfffff8ff);
|
|
if (iVar3 == -1) {
|
|
FUN_004d9148(4);
|
|
CloseHandle(hObject);
|
|
}
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a78 file=? name=thunk_FUN_004d892c */
|
|
|
|
char * __cdecl thunk_FUN_004d892c(uint param_1,char *param_2,char *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
uint uVar2;
|
|
DWORD DVar3;
|
|
char *pcVar4;
|
|
DWORD DVar5;
|
|
char *pcVar6;
|
|
|
|
if (param_1 < DAT_0051fbc0) {
|
|
if (param_3 + 1 < (char *)0x2) {
|
|
pcVar1 = (char *)0x0;
|
|
}
|
|
else if ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 0x40) == 0) {
|
|
pcVar1 = (char *)FUN_004d91c0(param_1,param_2,(DWORD)param_3);
|
|
}
|
|
else if ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 2) == 0) {
|
|
pcVar1 = (char *)0x0;
|
|
if (param_3 != (char *)0x0) {
|
|
while( true ) {
|
|
uVar2 = (int)param_3 - (int)pcVar1;
|
|
DVar3 = FUN_004d91c0(param_1,param_2,uVar2);
|
|
if (DVar3 == 0xffffffff) {
|
|
return (char *)0xffffffff;
|
|
}
|
|
if (DVar3 == 0) {
|
|
return pcVar1;
|
|
}
|
|
pcVar4 = FUN_004d48f8(param_2,'\x1a',DVar3);
|
|
if (pcVar4 != (char *)0x0) {
|
|
(&DAT_0051fbc4)[param_1] = (&DAT_0051fbc4)[param_1] | 0x200;
|
|
DVar3 = (int)pcVar4 - (int)param_2;
|
|
if (DVar3 == 0) {
|
|
return pcVar1;
|
|
}
|
|
}
|
|
if ((param_2[DVar3 - 1] == '\r') &&
|
|
(DVar5 = FUN_004d91c0(param_1,param_2 + (DVar3 - 1),1), DVar5 == 0xffffffff)) break;
|
|
pcVar6 = FUN_004d88c0(param_2,DVar3);
|
|
pcVar1 = pcVar1 + (int)pcVar6;
|
|
if ((DVar3 < uVar2) && ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 0x20) != 0)) {
|
|
return pcVar1;
|
|
}
|
|
if (pcVar4 != (char *)0x0) {
|
|
return pcVar1;
|
|
}
|
|
if (pcVar6 != (char *)0x0) {
|
|
return pcVar1;
|
|
}
|
|
if (param_3 <= pcVar1) {
|
|
return pcVar1;
|
|
}
|
|
}
|
|
pcVar1 = (char *)0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
pcVar1 = (char *)0x0;
|
|
}
|
|
}
|
|
else {
|
|
pcVar1 = (char *)FUN_004d9148(-6);
|
|
}
|
|
return pcVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a80 file=? name=thunk_FUN_004d8b14 */
|
|
|
|
char * __cdecl thunk_FUN_004d8b14(uint param_1,char *param_2,char *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char *pcVar2;
|
|
DWORD DVar3;
|
|
undefined4 auStack_8c [32];
|
|
DWORD DStack_c;
|
|
char *pcStack_8;
|
|
|
|
if (param_1 < DAT_0051fbc0) {
|
|
if (param_3 + 1 < (char *)0x2) {
|
|
param_3 = (char *)0x0;
|
|
}
|
|
else {
|
|
if ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 8) != 0) {
|
|
FUN_004d9334(param_1,0,2);
|
|
}
|
|
pcVar1 = param_2;
|
|
pcVar2 = param_3;
|
|
if ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 0x40) == 0) {
|
|
param_3 = (char *)FUN_004d9224(param_1,param_2,(DWORD)param_3);
|
|
}
|
|
else {
|
|
for (; pcVar2 != (char *)0x0; pcVar2 = pcVar2 + -(int)pcStack_8) {
|
|
pcStack_8 = pcVar2;
|
|
DVar3 = FUN_004d8a5c(pcVar1,(int *)&pcStack_8,auStack_8c,0x80);
|
|
DStack_c = FUN_004d9224(param_1,auStack_8c,DVar3);
|
|
if (DVar3 != DStack_c) {
|
|
if (DStack_c == 0xffffffff) {
|
|
return (char *)0xffffffff;
|
|
}
|
|
return pcVar1 + (DStack_c - (int)param_2);
|
|
}
|
|
pcVar1 = pcVar1 + (int)pcStack_8;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
param_3 = (char *)FUN_004d9148(-6);
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6a88 file=? name=FUN_004d6a88 */
|
|
|
|
undefined4 __cdecl FUN_004d6a88(int *param_1,int *param_2,int param_3,uint param_4)
|
|
|
|
{
|
|
if ((*(byte *)((int)param_1 + 0x12) & 4) != 0) {
|
|
FUN_004de420((int *)param_1[1]);
|
|
}
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) & 0xfff3;
|
|
param_1[3] = 0;
|
|
param_1[1] = (int)param_1 + 0x17;
|
|
*param_1 = (int)param_1 + 0x17;
|
|
if ((param_3 != 2) && (param_4 != 0)) {
|
|
PTR_FUN_00520c14 = &LAB_004d87b0;
|
|
if (param_2 == (int *)0x0) {
|
|
param_2 = FUN_004de55c(param_4);
|
|
if (param_2 == (int *)0x0) {
|
|
return 0xffffffff;
|
|
}
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) | 4;
|
|
}
|
|
*param_1 = (int)param_2;
|
|
param_1[1] = (int)param_2;
|
|
param_1[3] = param_4;
|
|
if (param_3 == 1) {
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) | 8;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6b08 file=? name=FUN_004d6b08 */
|
|
|
|
undefined4 __cdecl FUN_004d6b08(int *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int iVar2;
|
|
char *pcVar3;
|
|
|
|
if ((param_1 == (int *)0x0) || ((short)param_1[5] != (short)param_1)) {
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
else {
|
|
if (param_1[3] != 0) {
|
|
if ((param_1[2] < 0) && (iVar2 = FUN_004d6b9c(param_1), iVar2 != 0)) {
|
|
return 0xffffffff;
|
|
}
|
|
if ((*(byte *)((int)param_1 + 0x12) & 4) != 0) {
|
|
FUN_004de420((int *)param_1[1]);
|
|
}
|
|
}
|
|
uVar1 = FUN_004d92c4((int)*(char *)((int)param_1 + 0x16));
|
|
*(undefined2 *)((int)param_1 + 0x12) = 0;
|
|
param_1[3] = 0;
|
|
param_1[2] = 0;
|
|
*(undefined1 *)((int)param_1 + 0x16) = 0xff;
|
|
if (*(ushort *)(param_1 + 4) != 0) {
|
|
pcVar3 = FUN_004d760c((char *)0x0,(char *)0x0,*(ushort *)(param_1 + 4));
|
|
FUN_004d959c(pcVar3);
|
|
*(undefined2 *)(param_1 + 4) = 0;
|
|
}
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6b9c file=? name=FUN_004d6b9c */
|
|
|
|
undefined4 __cdecl FUN_004d6b9c(int *param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
char *pcVar2;
|
|
char *pcVar3;
|
|
|
|
if (param_1 == (int *)0x0) {
|
|
FUN_004d6d50();
|
|
uVar1 = 0;
|
|
}
|
|
else if ((short)param_1[5] == (short)param_1) {
|
|
if (param_1[2] < 0) {
|
|
pcVar3 = (char *)(param_1[3] + param_1[2] + 1);
|
|
param_1[2] = param_1[2] - (int)pcVar3;
|
|
*param_1 = param_1[1];
|
|
pcVar2 = FUN_004d8b14((int)*(char *)((int)param_1 + 0x16),(char *)param_1[1],pcVar3);
|
|
if ((pcVar3 == pcVar2) || ((*(byte *)((int)param_1 + 0x13) & 2) != 0)) {
|
|
uVar1 = 0;
|
|
}
|
|
else {
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) | 0x10;
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
if ((((*(byte *)((int)param_1 + 0x12) & 8) != 0) || ((int)param_1 + 0x17 == *param_1)) &&
|
|
(param_1[2] = 0, (int)param_1 + 0x17 == *param_1)) {
|
|
*param_1 = param_1[1];
|
|
}
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
else {
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6c20 file=? name=FUN_004d6c20 */
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
undefined4 * __cdecl FUN_004d6c20(undefined4 *param_1,int param_2,int *param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
char *pcVar2;
|
|
byte *pbVar3;
|
|
char *pcVar4;
|
|
undefined4 *puVar5;
|
|
uint unaff_EDI;
|
|
char *local_8;
|
|
|
|
puVar5 = param_1;
|
|
if (param_3[3] == 0) {
|
|
unaff_EDI = 0;
|
|
while ((unaff_EDI != 10 && (param_2 = param_2 + -1, 0 < param_2))) {
|
|
piVar1 = param_3 + 2;
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 < 0) {
|
|
unaff_EDI = FUN_004d7438(param_3);
|
|
}
|
|
else {
|
|
pbVar3 = (byte *)*param_3;
|
|
*param_3 = *param_3 + 1;
|
|
unaff_EDI = (uint)*pbVar3;
|
|
}
|
|
if (unaff_EDI == 0xffffffff) break;
|
|
*(char *)puVar5 = (char)unaff_EDI;
|
|
puVar5 = (undefined4 *)((int)puVar5 + 1);
|
|
}
|
|
}
|
|
else {
|
|
pcVar2 = (char *)(param_2 - 1);
|
|
do {
|
|
while( true ) {
|
|
if ((int)pcVar2 < 0) goto LAB_004d6d25;
|
|
local_8 = (char *)param_3[2];
|
|
if ((int)local_8 < 1) break;
|
|
if (pcVar2 <= local_8) {
|
|
local_8 = pcVar2;
|
|
}
|
|
pcVar4 = FUN_004d48f8((char *)*param_3,'\n',(int)local_8);
|
|
if (pcVar4 != (char *)0x0) {
|
|
local_8 = pcVar4 + (1 - *param_3);
|
|
}
|
|
FUN_004d4918(puVar5,(undefined4 *)*param_3,(uint)local_8);
|
|
*param_3 = (int)(local_8 + *param_3);
|
|
param_3[2] = param_3[2] - (int)local_8;
|
|
puVar5 = (undefined4 *)((int)puVar5 + (int)local_8);
|
|
pcVar2 = (char *)((int)pcVar2 - (int)local_8);
|
|
if ((pcVar4 != (char *)0x0) || (pcVar2 == (char *)0x0)) {
|
|
unaff_EDI = 10;
|
|
goto LAB_004d6d25;
|
|
}
|
|
}
|
|
piVar1 = param_3 + 2;
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 < 0) {
|
|
unaff_EDI = FUN_004d7438(param_3);
|
|
}
|
|
else {
|
|
pbVar3 = (byte *)*param_3;
|
|
*param_3 = *param_3 + 1;
|
|
unaff_EDI = (uint)*pbVar3;
|
|
}
|
|
if (unaff_EDI == 0xffffffff) {
|
|
*(ushort *)((int)param_3 + 0x12) = *(ushort *)((int)param_3 + 0x12) | 0x20;
|
|
break;
|
|
}
|
|
*(char *)puVar5 = (char)unaff_EDI;
|
|
puVar5 = (undefined4 *)((int)puVar5 + 1);
|
|
pcVar2 = pcVar2 + -1;
|
|
} while (unaff_EDI != 10);
|
|
}
|
|
LAB_004d6d25:
|
|
if ((unaff_EDI == 0xffffffff) && (puVar5 == param_1)) {
|
|
param_1 = (undefined4 *)0x0;
|
|
}
|
|
else {
|
|
*(undefined1 *)puVar5 = 0;
|
|
if ((*(byte *)((int)param_3 + 0x12) & 0x10) != 0) {
|
|
param_1 = (undefined4 *)0x0;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6d50 file=? name=FUN_004d6d50 */
|
|
|
|
int FUN_004d6d50(void)
|
|
|
|
{
|
|
char *pcVar1;
|
|
undefined4 *puVar2;
|
|
int iVar3;
|
|
char *pcVar4;
|
|
int iVar5;
|
|
|
|
iVar3 = 0;
|
|
puVar2 = &DAT_0051f800;
|
|
iVar5 = DAT_0051fbc0;
|
|
while (iVar5 != 0) {
|
|
if ((int)puVar2[2] < 0) {
|
|
pcVar4 = (char *)(puVar2[3] + puVar2[2] + 1);
|
|
puVar2[2] = puVar2[2] - (int)pcVar4;
|
|
*puVar2 = (char *)puVar2[1];
|
|
pcVar1 = FUN_004d8b14((int)*(char *)((int)puVar2 + 0x16),(char *)puVar2[1],pcVar4);
|
|
if ((pcVar4 != pcVar1) && ((*(byte *)((int)puVar2 + 0x13) & 2) == 0)) {
|
|
*(ushort *)((int)puVar2 + 0x12) = *(ushort *)((int)puVar2 + 0x12) | 0x10;
|
|
}
|
|
iVar3 = iVar3 + 1;
|
|
}
|
|
puVar2 = puVar2 + 6;
|
|
iVar5 = iVar5 + -1;
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6db0 file=? name=FUN_004d6db0 */
|
|
|
|
void __cdecl FUN_004d6db0(undefined *param_1)
|
|
|
|
{
|
|
PTR_DAT_0051fc68 = param_1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6dc0 file=? name=FUN_004d6dc0 */
|
|
|
|
uint __cdecl FUN_004d6dc0(char *param_1,uint *param_2,undefined4 *param_3)
|
|
|
|
{
|
|
char cVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
undefined4 uVar4;
|
|
|
|
uVar4 = 0;
|
|
cVar1 = *param_1;
|
|
if (cVar1 == 'r') {
|
|
uVar3 = 0;
|
|
uVar2 = 1;
|
|
}
|
|
else if (cVar1 == 'w') {
|
|
uVar3 = 0x301;
|
|
uVar4 = 0x80;
|
|
uVar2 = 2;
|
|
}
|
|
else {
|
|
if (cVar1 != 'a') {
|
|
return 0;
|
|
}
|
|
uVar3 = 0x901;
|
|
uVar4 = 0x80;
|
|
uVar2 = 2;
|
|
}
|
|
cVar1 = param_1[1];
|
|
if ((cVar1 == '+') || ((param_1[2] == '+' && ((cVar1 == 't' || (cVar1 == 'b')))))) {
|
|
if (cVar1 == '+') {
|
|
cVar1 = param_1[2];
|
|
}
|
|
uVar3 = uVar3 & 0xfffffffe | 2;
|
|
uVar4 = 0x180;
|
|
uVar2 = 3;
|
|
}
|
|
if (cVar1 == 't') {
|
|
uVar3 = uVar3 | 0x4000;
|
|
}
|
|
else if (cVar1 == 'b') {
|
|
uVar3 = uVar3 | 0x8000;
|
|
uVar2 = uVar2 | 0x40;
|
|
}
|
|
else {
|
|
uVar3 = uVar3 | *(uint *)PTR_DAT_0051fc68 & 0xc000;
|
|
if ((*(uint *)PTR_DAT_0051fc68 & 0x8000) != 0) {
|
|
uVar2 = uVar2 | 0x40;
|
|
}
|
|
}
|
|
PTR_FUN_00520c18 = &LAB_004d8788;
|
|
*param_2 = uVar3;
|
|
*param_3 = uVar4;
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6e80 file=? name=FUN_004d6e80 */
|
|
|
|
int * __cdecl FUN_004d6e80(int *param_1,LPCSTR param_2,char *param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
uint local_c;
|
|
uint local_8;
|
|
|
|
uVar1 = FUN_004d6dc0(param_3,&local_8,&local_c);
|
|
*(short *)((int)param_1 + 0x12) = (short)uVar1;
|
|
if ((short)uVar1 == 0) {
|
|
LAB_004d6ecb:
|
|
*(undefined1 *)((int)param_1 + 0x16) = 0xff;
|
|
*(undefined2 *)((int)param_1 + 0x12) = 0;
|
|
param_1 = (int *)0x0;
|
|
}
|
|
else {
|
|
if (*(char *)((int)param_1 + 0x16) < '\0') {
|
|
iVar2 = FUN_004d93ac(param_2,local_8 | param_4,local_c);
|
|
*(char *)((int)param_1 + 0x16) = (char)iVar2;
|
|
if ((char)iVar2 < '\0') goto LAB_004d6ecb;
|
|
}
|
|
if ((*(byte *)((int)&DAT_0051fbc4 + *(char *)((int)param_1 + 0x16) * 4 + 1) & 0x20) != 0) {
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) | 0x200;
|
|
}
|
|
iVar2 = FUN_004d7e84(param_1,(int *)0x0,(uint)((*(byte *)((int)param_1 + 0x13) & 2) != 0),0x200)
|
|
;
|
|
if (iVar2 == 0) {
|
|
*(undefined2 *)(param_1 + 4) = 0;
|
|
}
|
|
else {
|
|
FUN_004d6b08(param_1);
|
|
param_1 = (int *)0x0;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6f28 file=? name=FUN_004d6f28 */
|
|
|
|
undefined4 * FUN_004d6f28(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
puVar1 = &DAT_0051f800;
|
|
while( true ) {
|
|
if (*(char *)((int)puVar1 + 0x16) < '\0') {
|
|
return puVar1;
|
|
}
|
|
if (&DAT_0051f800 + DAT_0051fbc0 * 6 <= puVar1) break;
|
|
puVar1 = puVar1 + 6;
|
|
}
|
|
return (undefined4 *)0x0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6f54 file=? name=FUN_004d6f54 */
|
|
|
|
int * __cdecl FUN_004d6f54(LPCSTR param_1,char *param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
int *piVar2;
|
|
|
|
piVar1 = FUN_004d6f28();
|
|
piVar2 = (int *)0x0;
|
|
if (piVar1 != (int *)0x0) {
|
|
piVar2 = FUN_004d6e80(piVar1,param_1,param_2,0);
|
|
}
|
|
return piVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6f80 file=? name=FUN_004d6f80 */
|
|
|
|
void __cdecl FUN_004d6f80(undefined4 param_1,char *param_2)
|
|
|
|
{
|
|
FUN_004d812c(FUN_004d6fa0,param_1,param_2,(uint *)&stack0x0000000c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d6fa0 file=? name=FUN_004d6fa0 */
|
|
|
|
char * __cdecl FUN_004d6fa0(byte *param_1,char *param_2,int *param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
char *pcVar3;
|
|
|
|
pcVar3 = param_2;
|
|
if ((*(byte *)((int)param_3 + 0x12) & 8) == 0) {
|
|
pcVar3 = (char *)param_3[3];
|
|
if ((pcVar3 == (char *)0x0) || (pcVar3 < param_2)) {
|
|
if ((param_3[3] == 0) || ((param_3[2] == 0 || (iVar2 = FUN_004d6b9c(param_3), iVar2 == 0)))) {
|
|
pcVar3 = FUN_004d8b14((int)*(char *)((int)param_3 + 0x16),(char *)param_1,param_2);
|
|
if (pcVar3 < param_2) {
|
|
param_2 = (char *)0x0;
|
|
}
|
|
}
|
|
else {
|
|
param_2 = (char *)0x0;
|
|
}
|
|
}
|
|
else {
|
|
if (-1 < (int)(param_2 + param_3[2])) {
|
|
if (param_3[2] == 0) {
|
|
param_3[2] = -1 - (int)pcVar3;
|
|
}
|
|
else {
|
|
iVar2 = FUN_004d6b9c(param_3);
|
|
if (iVar2 != 0) {
|
|
return (char *)0x0;
|
|
}
|
|
}
|
|
}
|
|
FUN_004d4918((undefined4 *)*param_3,(undefined4 *)param_1,(uint)param_2);
|
|
param_3[2] = (int)(param_2 + param_3[2]);
|
|
*param_3 = (int)(param_2 + *param_3);
|
|
}
|
|
}
|
|
else {
|
|
for (; pcVar3 != (char *)0x0; pcVar3 = pcVar3 + -1) {
|
|
uVar1 = FUN_004d7518(*param_1,param_3);
|
|
if (uVar1 == 0xffffffff) {
|
|
return (char *)0x0;
|
|
}
|
|
param_1 = param_1 + 1;
|
|
}
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7070 file=? name=FUN_004d7070 */
|
|
|
|
uint __cdecl FUN_004d7070(byte *param_1,int *param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char *pcVar2;
|
|
|
|
if ((param_1 != (byte *)0x0) &&
|
|
(pcVar1 = (char *)FUN_004d4a78((char *)param_1), pcVar1 != (char *)0x0)) {
|
|
pcVar2 = FUN_004d6fa0(param_1,pcVar1,param_2);
|
|
if (pcVar2 != (char *)0x0) {
|
|
return (uint)(param_1 + -1)[(int)pcVar1];
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d70b0 file=? name=FUN_004d70b0 */
|
|
|
|
char * __cdecl FUN_004d70b0(char *param_1,char *param_2,int *param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
byte *pbVar2;
|
|
char *pcVar3;
|
|
uint uVar4;
|
|
char *unaff_ESI;
|
|
char *pcVar5;
|
|
char *local_c;
|
|
uint local_8;
|
|
|
|
local_c = param_1;
|
|
if (param_3[3] != 0) {
|
|
LAB_004d70cf:
|
|
if (param_2 == (char *)0x0) {
|
|
return unaff_ESI;
|
|
}
|
|
do {
|
|
pcVar3 = (char *)param_3[2];
|
|
if (pcVar3 != (char *)0x0) {
|
|
pcVar5 = param_2;
|
|
if (pcVar3 < param_2) {
|
|
pcVar5 = pcVar3;
|
|
}
|
|
FUN_004d4918((undefined4 *)local_c,(undefined4 *)*param_3,(uint)pcVar5);
|
|
*param_3 = (int)(pcVar5 + *param_3);
|
|
param_3[2] = param_3[2] - (int)pcVar5;
|
|
if (param_2 == pcVar5) {
|
|
return unaff_ESI;
|
|
}
|
|
local_c = local_c + (int)pcVar5;
|
|
param_2 = param_2 + -(int)pcVar5;
|
|
}
|
|
if ((char *)param_3[3] <= param_2) {
|
|
pcVar5 = param_2 + -((uint)param_2 % (uint)param_3[3]);
|
|
pcVar3 = FUN_004d892c((int)*(char *)((int)param_3 + 0x16),local_c,pcVar5);
|
|
if (param_2 == pcVar3) {
|
|
return unaff_ESI;
|
|
}
|
|
if (pcVar3 == (char *)0xffffffff) {
|
|
*(ushort *)((int)param_3 + 0x12) = *(ushort *)((int)param_3 + 0x12) | 0x10;
|
|
return unaff_ESI;
|
|
}
|
|
local_c = local_c + (int)pcVar3;
|
|
param_2 = param_2 + -(int)pcVar3;
|
|
if (pcVar5 != pcVar3) goto code_r0x004d715c;
|
|
}
|
|
uVar4 = FUN_004d744c(param_3);
|
|
if (uVar4 == 0xffffffff) {
|
|
*(ushort *)((int)param_3 + 0x12) = *(ushort *)((int)param_3 + 0x12) | 0x20;
|
|
return unaff_ESI;
|
|
}
|
|
local_8._0_1_ = (char)uVar4;
|
|
*local_c = (char)local_8;
|
|
local_c = local_c + 1;
|
|
param_2 = param_2 + -1;
|
|
if (param_2 == (char *)0x0) {
|
|
return unaff_ESI;
|
|
}
|
|
} while( true );
|
|
}
|
|
for (; param_2 != (char *)0x0; param_2 = param_2 + -1) {
|
|
piVar1 = param_3 + 2;
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 < 0) {
|
|
local_8 = FUN_004d7438(param_3);
|
|
}
|
|
else {
|
|
pbVar2 = (byte *)*param_3;
|
|
*param_3 = *param_3 + 1;
|
|
local_8 = (uint)*pbVar2;
|
|
}
|
|
if (local_8 == 0xffffffff) break;
|
|
*local_c = (char)local_8;
|
|
local_c = local_c + 1;
|
|
}
|
|
if (local_8 == 0xffffffff) {
|
|
*(ushort *)((int)param_3 + 0x12) = *(ushort *)((int)param_3 + 0x12) | 0x20;
|
|
}
|
|
return unaff_ESI;
|
|
code_r0x004d715c:
|
|
if (((*(byte *)((int)param_3 + 0x12) & 0x40) != 0) || (pcVar3 == (char *)0x0)) {
|
|
*(ushort *)((int)param_3 + 0x12) = *(ushort *)((int)param_3 + 0x12) | 0x20;
|
|
return unaff_ESI;
|
|
}
|
|
goto LAB_004d70cf;
|
|
}
|
|
|
|
|
|
|
|
/* @004d71e0 file=? name=FUN_004d71e0 */
|
|
|
|
uint __cdecl FUN_004d71e0(char *param_1,int param_2,int param_3,int *param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
int extraout_EAX;
|
|
char *pcVar2;
|
|
|
|
if (param_2 == 0) {
|
|
uVar1 = 0;
|
|
}
|
|
else {
|
|
pcVar2 = FUN_004d70b0(param_1,(char *)(param_2 * param_3),param_4);
|
|
uVar1 = (uint)(param_2 * param_3 - extraout_EAX) / (uint)pcVar2;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7214 file=? name=FUN_004d7214 */
|
|
|
|
int __cdecl FUN_004d7214(undefined4 *param_1)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
char *pcVar6;
|
|
|
|
iVar2 = param_1[2];
|
|
if (iVar2 < 0) {
|
|
iVar2 = param_1[3] + iVar2 + 1;
|
|
}
|
|
if ((*(byte *)((int)param_1 + 0x12) & 0x40) == 0) {
|
|
pcVar6 = (char *)*param_1;
|
|
iVar3 = iVar2;
|
|
iVar5 = iVar2;
|
|
if ((int)param_1[2] < 0) {
|
|
while (iVar3 = iVar2 + -1, iVar2 != 0) {
|
|
pcVar6 = pcVar6 + -1;
|
|
iVar2 = iVar3;
|
|
if (*pcVar6 == '\n') {
|
|
iVar5 = iVar5 + 1;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
while (iVar4 = iVar3 + -1, iVar5 = iVar2, iVar3 != 0) {
|
|
cVar1 = *pcVar6;
|
|
pcVar6 = pcVar6 + 1;
|
|
iVar3 = iVar4;
|
|
if (cVar1 == '\n') {
|
|
iVar2 = iVar2 + 1;
|
|
}
|
|
}
|
|
}
|
|
return iVar5;
|
|
}
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7270 file=? name=FUN_004d7270 */
|
|
|
|
undefined4 __cdecl FUN_004d7270(int *param_1,LONG param_2,int param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
undefined4 uVar2;
|
|
DWORD DVar3;
|
|
|
|
iVar1 = FUN_004d6b9c(param_1);
|
|
if (iVar1 == 0) {
|
|
if ((param_3 == 1) && (0 < param_1[2])) {
|
|
iVar1 = FUN_004d7214(param_1);
|
|
param_2 = param_2 - iVar1;
|
|
}
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) & 0xfe5f;
|
|
param_1[2] = 0;
|
|
*param_1 = param_1[1];
|
|
DVar3 = FUN_004d9334((int)*(char *)((int)param_1 + 0x16),param_2,param_3);
|
|
if (DVar3 == 0xffffffff) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
else {
|
|
uVar2 = 0;
|
|
}
|
|
}
|
|
else {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d72d4 file=? name=FUN_004d72d4 */
|
|
|
|
DWORD __cdecl FUN_004d72d4(undefined4 *param_1)
|
|
|
|
{
|
|
DWORD DVar1;
|
|
DWORD DVar2;
|
|
int iVar3;
|
|
|
|
DVar1 = FUN_004d9334((int)*(char *)((int)param_1 + 0x16),0,1);
|
|
if (DVar1 != 0xffffffff) {
|
|
if ((int)param_1[2] < 0) {
|
|
DVar2 = DVar1;
|
|
if ((*(byte *)((int)&DAT_0051fbc4 + *(char *)((int)param_1 + 0x16) * 4 + 1) & 8) != 0) {
|
|
DVar2 = FUN_004d9334((int)*(char *)((int)param_1 + 0x16),0,2);
|
|
if (DVar2 == 0xffffffff) {
|
|
return 0xffffffff;
|
|
}
|
|
DVar1 = FUN_004d9334((int)*(char *)((int)param_1 + 0x16),DVar1,0);
|
|
if (DVar1 == 0xffffffff) {
|
|
return 0xffffffff;
|
|
}
|
|
}
|
|
iVar3 = FUN_004d7214(param_1);
|
|
DVar1 = DVar2 + iVar3;
|
|
}
|
|
else {
|
|
iVar3 = FUN_004d7214(param_1);
|
|
DVar1 = DVar1 - iVar3;
|
|
}
|
|
}
|
|
return DVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7358 file=? name=FUN_004d7358 */
|
|
|
|
uint __cdecl FUN_004d7358(byte *param_1,uint param_2,uint param_3,int *param_4)
|
|
|
|
{
|
|
char *pcVar1;
|
|
|
|
if (param_2 != 0) {
|
|
pcVar1 = FUN_004d6fa0(param_1,(char *)(param_2 * param_3),param_4);
|
|
param_3 = (uint)pcVar1 / param_2;
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7388 file=? name=FUN_004d7388 */
|
|
|
|
void __cdecl FUN_004d7388(int *param_1,uint param_2)
|
|
|
|
{
|
|
FUN_004d8d20(0,param_1,param_2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d73a0 file=? name=FUN_004d73a0 */
|
|
|
|
void FUN_004d73a0(void)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
|
|
piVar1 = &DAT_0051f800;
|
|
iVar2 = 0x28;
|
|
while (iVar2 != 0) {
|
|
if ((*(ushort *)((int)piVar1 + 0x12) & 0x300) == 0x300) {
|
|
FUN_004d6b9c(piVar1);
|
|
}
|
|
piVar1 = piVar1 + 6;
|
|
iVar2 = iVar2 + -1;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d73d4 file=? name=FUN_004d73d4 */
|
|
|
|
undefined4 __cdecl FUN_004d73d4(undefined4 *param_1)
|
|
|
|
{
|
|
char *pcVar1;
|
|
|
|
if ((*(byte *)((int)param_1 + 0x13) & 2) != 0) {
|
|
FUN_004d73a0();
|
|
}
|
|
*param_1 = (char *)param_1[1];
|
|
pcVar1 = FUN_004d892c((int)*(char *)((int)param_1 + 0x16),(char *)param_1[1],(char *)param_1[3]);
|
|
param_1[2] = pcVar1;
|
|
if (0 < (int)pcVar1) {
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) & 0xffdf;
|
|
return 0;
|
|
}
|
|
if (param_1[2] == 0) {
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) & 0xfe7f | 0x20;
|
|
}
|
|
else {
|
|
param_1[2] = 0;
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) | 0x10;
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7438 file=? name=FUN_004d7438 */
|
|
|
|
void __cdecl FUN_004d7438(int *param_1)
|
|
|
|
{
|
|
param_1[2] = param_1[2] + 1;
|
|
FUN_004d744c(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d744c file=? name=FUN_004d744c */
|
|
|
|
uint __cdecl FUN_004d744c(int *param_1)
|
|
|
|
{
|
|
byte *pbVar1;
|
|
int iVar2;
|
|
char *pcVar3;
|
|
uint uVar4;
|
|
|
|
if (param_1 == (int *)0x0) {
|
|
return 0xffffffff;
|
|
}
|
|
if (0 < param_1[2]) {
|
|
param_1[2] = param_1[2] + -1;
|
|
pbVar1 = (byte *)*param_1;
|
|
*param_1 = *param_1 + 1;
|
|
return (uint)*pbVar1;
|
|
}
|
|
if (((param_1[2] < 0) || ((*(ushort *)((int)param_1 + 0x12) & 0x110) != 0)) ||
|
|
((*(byte *)((int)param_1 + 0x12) & 1) == 0)) {
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) | 0x10;
|
|
return 0xffffffff;
|
|
}
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) | 0x80;
|
|
if (param_1[3] != 0) {
|
|
iVar2 = FUN_004d73d4(param_1);
|
|
if (iVar2 != 0) {
|
|
return 0xffffffff;
|
|
}
|
|
param_1[2] = param_1[2] + -1;
|
|
pbVar1 = (byte *)*param_1;
|
|
*param_1 = *param_1 + 1;
|
|
return (uint)*pbVar1;
|
|
}
|
|
if ((*(byte *)((int)param_1 + 0x13) & 2) != 0) {
|
|
FUN_004d73a0();
|
|
}
|
|
pcVar3 = FUN_004d892c((int)*(char *)((int)param_1 + 0x16),(char *)&DAT_00524db4,(char *)0x1);
|
|
if (pcVar3 == (char *)0x0) {
|
|
uVar4 = FUN_004d8834((int)*(char *)((int)param_1 + 0x16));
|
|
if (uVar4 == 1) {
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) & 0xfe7f | 0x20;
|
|
}
|
|
else {
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) | 0x10;
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
*(ushort *)((int)param_1 + 0x12) = *(ushort *)((int)param_1 + 0x12) & 0xffdf;
|
|
return (uint)DAT_00524db4;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7518 file=? name=FUN_004d7518 */
|
|
|
|
uint __cdecl FUN_004d7518(byte param_1,int *param_2)
|
|
|
|
{
|
|
byte *pbVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
char *pcVar4;
|
|
byte local_5;
|
|
|
|
local_5 = param_1;
|
|
if (param_2[2] < -1) {
|
|
param_2[2] = param_2[2] + 1;
|
|
pbVar1 = (byte *)*param_2;
|
|
*param_2 = *param_2 + 1;
|
|
*pbVar1 = param_1;
|
|
if ((((*(byte *)((int)param_2 + 0x12) & 8) != 0) && ((param_1 == 10 || (param_1 == 0xd)))) &&
|
|
(iVar2 = FUN_004d6b9c(param_2), iVar2 != 0)) {
|
|
return 0xffffffff;
|
|
}
|
|
uVar3 = (uint)local_5;
|
|
}
|
|
else if (((*(ushort *)((int)param_2 + 0x12) & 0x90) == 0) &&
|
|
((*(ushort *)((int)param_2 + 0x12) & 2) != 0)) {
|
|
*(ushort *)((int)param_2 + 0x12) = *(ushort *)((int)param_2 + 0x12) | 0x100;
|
|
if (param_2[3] == 0) {
|
|
pcVar4 = FUN_004d8b14((int)*(char *)((int)param_2 + 0x16),(char *)&local_5,(char *)0x1);
|
|
if ((pcVar4 == (char *)0x1) || ((*(byte *)((int)param_2 + 0x13) & 2) != 0)) {
|
|
uVar3 = (uint)local_5;
|
|
}
|
|
else {
|
|
*(ushort *)((int)param_2 + 0x12) = *(ushort *)((int)param_2 + 0x12) | 0x10;
|
|
uVar3 = 0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
if ((param_2[2] != 0) && (iVar2 = FUN_004d6b9c(param_2), iVar2 != 0)) {
|
|
return 0xffffffff;
|
|
}
|
|
param_2[2] = -param_2[3];
|
|
pbVar1 = (byte *)*param_2;
|
|
*param_2 = *param_2 + 1;
|
|
*pbVar1 = local_5;
|
|
if (((*(byte *)((int)param_2 + 0x12) & 8) != 0) &&
|
|
(((local_5 == 10 || (local_5 == 0xd)) && (iVar2 = FUN_004d6b9c(param_2), iVar2 != 0)))) {
|
|
return 0xffffffff;
|
|
}
|
|
uVar3 = (uint)local_5;
|
|
}
|
|
}
|
|
else {
|
|
*(ushort *)((int)param_2 + 0x12) = *(ushort *)((int)param_2 + 0x12) | 0x10;
|
|
uVar3 = 0xffffffff;
|
|
}
|
|
return uVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d760c file=? name=FUN_004d760c */
|
|
|
|
char * __cdecl FUN_004d760c(char *param_1,char *param_2,ushort param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
|
|
if (param_1 == (char *)0x0) {
|
|
param_1 = &DAT_00524dbe;
|
|
}
|
|
if (param_2 == (char *)0x0) {
|
|
param_2 = &DAT_0051fc6c;
|
|
}
|
|
pcVar1 = (char *)FUN_004d4d84((undefined4 *)param_1,param_2);
|
|
FUN_004dd3d0((uint)param_3,pcVar1);
|
|
FUN_004d49b8(param_1,&DAT_0051fc70);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d765c file=? name=FUN_004d765c */
|
|
|
|
char * __cdecl FUN_004d765c(char *param_1,ushort *param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
do {
|
|
*param_2 = *param_2 + 1;
|
|
if (*param_2 == 0) {
|
|
*param_2 = 1;
|
|
}
|
|
param_1 = FUN_004d760c(param_1,(char *)0x0,*param_2);
|
|
iVar1 = FUN_004d9288(param_1,0);
|
|
} while (iVar1 == 0);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d771c file=? name=FUN_004d771c */
|
|
|
|
void __cdecl FUN_004d771c(char *param_1)
|
|
|
|
{
|
|
FUN_004d812c(FUN_004d6fa0,&DAT_0051f818,param_1,(uint *)&stack0x00000008);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d773c file=? name=FUN_004d773c */
|
|
|
|
int __cdecl
|
|
FUN_004d773c(undefined *param_1,undefined *param_2,undefined4 param_3,byte *param_4,
|
|
undefined4 *param_5)
|
|
|
|
{
|
|
byte *pbVar1;
|
|
byte bVar2;
|
|
int iVar3;
|
|
byte *pbVar4;
|
|
uint uVar5;
|
|
byte local_54 [32];
|
|
int local_34;
|
|
byte *local_24;
|
|
byte local_1d;
|
|
uint local_1c;
|
|
uint local_18;
|
|
int local_14;
|
|
uint local_10;
|
|
int local_c;
|
|
byte local_5;
|
|
|
|
local_c = 0;
|
|
local_10 = 0;
|
|
LAB_004d7752:
|
|
do {
|
|
local_1d = *param_4;
|
|
if (local_1d == 0) {
|
|
return local_c;
|
|
}
|
|
pbVar1 = param_4 + 1;
|
|
if (local_1d == 0x25) {
|
|
local_1d = param_4[1];
|
|
param_4 = param_4 + 2;
|
|
pbVar1 = param_4;
|
|
if (local_1d != 0x25) {
|
|
local_5 = 0x20;
|
|
uVar5 = 0xffffffff;
|
|
LAB_004d7803:
|
|
if ((local_1d & 0x80) == 0) {
|
|
iVar3 = (int)(char)(&DAT_005200f4)[(char)local_1d];
|
|
}
|
|
else {
|
|
iVar3 = 2;
|
|
}
|
|
switch(iVar3) {
|
|
default:
|
|
goto switchD_004d7824_caseD_0;
|
|
case 2:
|
|
goto switchD_004d7824_caseD_2;
|
|
case 4:
|
|
local_5 = local_5 | 1;
|
|
local_1d = *param_4;
|
|
param_4 = param_4 + 1;
|
|
goto LAB_004d7803;
|
|
case 5:
|
|
if ((int)uVar5 < 0) {
|
|
iVar3 = (int)(char)local_1d;
|
|
}
|
|
else {
|
|
iVar3 = uVar5 * 10 + (int)(char)local_1d;
|
|
}
|
|
uVar5 = iVar3 - 0x30;
|
|
local_1d = *param_4;
|
|
param_4 = param_4 + 1;
|
|
goto LAB_004d7803;
|
|
case 6:
|
|
if ((local_5 & 1) == 0) {
|
|
local_24 = (byte *)*param_5;
|
|
param_5 = param_5 + 1;
|
|
}
|
|
if ((int)uVar5 < 0) {
|
|
uVar5 = 1;
|
|
}
|
|
if (uVar5 == 0) goto LAB_004d7b71;
|
|
goto LAB_004d7b48;
|
|
case 7:
|
|
case 8:
|
|
local_18 = 10;
|
|
goto switchD_004d7824_caseD_0;
|
|
case 9:
|
|
local_18 = 0;
|
|
goto switchD_004d7824_caseD_0;
|
|
case 10:
|
|
thunk_FUN_004dd258();
|
|
if (local_14 < 0) goto LAB_004d7cb4;
|
|
if (local_14 == 0) goto switchD_004d7824_caseD_2;
|
|
if ((local_5 & 1) == 0) {
|
|
param_5 = param_5 + 1;
|
|
thunk_FUN_004dd258();
|
|
local_c = local_c + 1;
|
|
}
|
|
goto LAB_004d7752;
|
|
case 0xb:
|
|
local_5 = local_5 | 8;
|
|
local_1d = *param_4;
|
|
param_4 = param_4 + 1;
|
|
goto LAB_004d7803;
|
|
case 0xc:
|
|
local_5 = local_5 | 2;
|
|
local_1d = *param_4;
|
|
param_4 = param_4 + 1;
|
|
goto LAB_004d7803;
|
|
case 0xd:
|
|
local_5 = local_5 | 4;
|
|
local_1d = *param_4;
|
|
param_4 = param_4 + 1;
|
|
goto LAB_004d7803;
|
|
case 0xe:
|
|
local_18 = 8;
|
|
goto switchD_004d7824_caseD_0;
|
|
case 0xf:
|
|
goto switchD_004d7824_caseD_f;
|
|
case 0x10:
|
|
FUN_004d4988((undefined4 *)local_54,0,0x20);
|
|
local_1c = 0;
|
|
bVar2 = *param_4;
|
|
pbVar1 = param_4 + 1;
|
|
if (bVar2 == 0x5e) {
|
|
local_1c = 1;
|
|
bVar2 = param_4[1];
|
|
pbVar1 = param_4 + 2;
|
|
}
|
|
goto LAB_004d7baa;
|
|
case 0x11:
|
|
uVar5 = local_10;
|
|
goto LAB_004d7969;
|
|
case 0x12:
|
|
goto switchD_004d7824_caseD_12;
|
|
case 0x13:
|
|
uVar5 = FUN_004d7cd8(param_1,param_2,param_3,0x10,8,(int *)&local_10,&local_14);
|
|
if (local_14 < 1) goto switchD_004d7824_caseD_2;
|
|
if ((local_5 & 1) == 0) {
|
|
*(uint *)*param_5 = uVar5;
|
|
local_c = local_c + 1;
|
|
param_5 = param_5 + 1;
|
|
}
|
|
goto LAB_004d7752;
|
|
case 0x14:
|
|
local_5 = local_5 & 0xdf;
|
|
local_1d = *param_4;
|
|
param_4 = param_4 + 1;
|
|
goto LAB_004d7803;
|
|
case 0x15:
|
|
local_5 = local_5 | 0x20;
|
|
local_1d = *param_4;
|
|
param_4 = param_4 + 1;
|
|
goto LAB_004d7803;
|
|
}
|
|
}
|
|
}
|
|
param_4 = pbVar1;
|
|
local_10 = local_10 + 1;
|
|
bVar2 = (*(code *)param_1)(param_3);
|
|
if (bVar2 == 0xff) goto LAB_004d7cb4;
|
|
if (((local_1d & 0x80) == 0) && ((&DAT_005200f4)[(char)local_1d] == '\x01')) {
|
|
while (((bVar2 & 0x80) == 0 && ((&DAT_005200f4)[(char)bVar2] == '\x01'))) {
|
|
local_10 = local_10 + 1;
|
|
bVar2 = (*(code *)param_1)(param_3);
|
|
if (bVar2 == 0xff) goto LAB_004d7cb4;
|
|
}
|
|
(*(code *)param_2)((int)(char)bVar2,param_3);
|
|
local_10 = local_10 - 1;
|
|
}
|
|
else if (bVar2 != local_1d) {
|
|
(*(code *)param_2)((int)(char)bVar2,param_3);
|
|
goto switchD_004d7824_caseD_2;
|
|
}
|
|
} while( true );
|
|
switchD_004d7824_caseD_12:
|
|
local_18 = 0x10;
|
|
switchD_004d7824_caseD_0:
|
|
uVar5 = FUN_004d7cd8(param_1,param_2,param_3,local_18,uVar5 & 0x7fff,(int *)&local_10,&local_14);
|
|
if (local_14 < 0) goto LAB_004d7cb4;
|
|
if (local_14 == 0) goto switchD_004d7824_caseD_2;
|
|
LAB_004d7969:
|
|
if ((('@' < (char)local_1d) && ((char)local_1d < '[')) && (local_1d != 0x58)) {
|
|
local_5 = local_5 | 4;
|
|
}
|
|
if ((local_5 & 1) == 0) {
|
|
if ((local_5 & 4) == 0) {
|
|
if ((local_5 & 2) == 0) {
|
|
*(uint *)*param_5 = uVar5;
|
|
}
|
|
else {
|
|
*(short *)*param_5 = (short)uVar5;
|
|
}
|
|
}
|
|
else {
|
|
*(uint *)*param_5 = uVar5;
|
|
}
|
|
param_5 = param_5 + 1;
|
|
if (local_1d != 0x6e) {
|
|
local_c = local_c + 1;
|
|
}
|
|
}
|
|
goto LAB_004d7752;
|
|
LAB_004d7baa:
|
|
pbVar4 = pbVar1;
|
|
local_1d = bVar2;
|
|
if (bVar2 == 0) goto switchD_004d7824_caseD_2;
|
|
local_54[(int)(char)bVar2 >> 3 & 0x1f] =
|
|
local_54[(int)(char)bVar2 >> 3 & 0x1f] | '\x01' << (bVar2 & 7);
|
|
bVar2 = *pbVar4;
|
|
param_4 = pbVar4 + 1;
|
|
if (bVar2 != 0x5d) {
|
|
pbVar1 = param_4;
|
|
if (((bVar2 == 0x2d) && ((char)local_1d < (char)*param_4)) && (*param_4 != 0x5d)) {
|
|
bVar2 = *param_4;
|
|
while( true ) {
|
|
local_1d = local_1d + 1;
|
|
pbVar1 = pbVar4 + 2;
|
|
if ((char)bVar2 <= (char)local_1d) break;
|
|
local_54[(int)(char)local_1d >> 3 & 0x1f] =
|
|
local_54[(int)(char)local_1d >> 3 & 0x1f] | '\x01' << (local_1d & 7);
|
|
}
|
|
}
|
|
goto LAB_004d7baa;
|
|
}
|
|
if (uVar5 == 0xffffffff) {
|
|
uVar5 = 0x7fff;
|
|
}
|
|
if ((local_5 & 1) == 0) {
|
|
local_24 = (byte *)*param_5;
|
|
param_5 = param_5 + 1;
|
|
}
|
|
local_34 = 0;
|
|
bVar2 = 0x5d;
|
|
while (uVar5 = uVar5 - 1, -1 < (int)uVar5) {
|
|
local_10 = local_10 + 1;
|
|
bVar2 = (*(code *)param_1)(param_3);
|
|
if ((bVar2 == 0xff) ||
|
|
(((1 << (bVar2 & 7) & (int)(char)local_54[(int)(char)bVar2 >> 3 & 0x1f]) != 0) == local_1c))
|
|
break;
|
|
local_34 = local_34 + 1;
|
|
if ((local_5 & 1) == 0) {
|
|
*local_24 = bVar2;
|
|
local_24 = local_24 + 1;
|
|
}
|
|
}
|
|
if (-1 < (int)uVar5) {
|
|
(*(code *)param_2)((int)(char)bVar2,param_3);
|
|
local_10 = local_10 - 1;
|
|
}
|
|
if ((local_34 != 0) && ((local_5 & 1) == 0)) {
|
|
*local_24 = 0;
|
|
local_24 = local_24 + 1;
|
|
local_c = local_c + 1;
|
|
}
|
|
if (bVar2 == 0xff) {
|
|
LAB_004d7cb4:
|
|
(*(code *)param_2)(0xffffffff,param_3);
|
|
if (local_c == 0) {
|
|
local_c = -1;
|
|
}
|
|
else {
|
|
switchD_004d7824_caseD_2:
|
|
}
|
|
return local_c;
|
|
}
|
|
goto LAB_004d7752;
|
|
while (((bVar2 & 0x80) == 0 && ((&DAT_005200f4)[(char)bVar2] == '\x01'))) {
|
|
switchD_004d7824_caseD_f:
|
|
local_10 = local_10 + 1;
|
|
bVar2 = (*(code *)param_1)(param_3);
|
|
if (bVar2 == 0xff) goto LAB_004d7cb4;
|
|
}
|
|
if ((local_5 & 1) == 0) {
|
|
local_24 = (byte *)*param_5;
|
|
local_c = local_c + 1;
|
|
param_5 = param_5 + 1;
|
|
}
|
|
if (uVar5 == 0xffffffff) {
|
|
uVar5 = 0x7fff;
|
|
}
|
|
do {
|
|
if ((local_5 & 1) == 0) {
|
|
*local_24 = bVar2;
|
|
local_24 = local_24 + 1;
|
|
}
|
|
local_10 = local_10 + 1;
|
|
bVar2 = (*(code *)param_1)(param_3);
|
|
} while ((((bVar2 != 0xff) && (bVar2 != 0)) &&
|
|
(((bVar2 & 0x80) != 0 || ((&DAT_005200f4)[(char)bVar2] != '\x01')))) &&
|
|
(uVar5 = uVar5 - 1, 0 < (int)uVar5));
|
|
(*(code *)param_2)((int)(char)bVar2,param_3);
|
|
local_10 = local_10 - 1;
|
|
if ((local_5 & 1) == 0) {
|
|
*local_24 = 0;
|
|
}
|
|
goto LAB_004d7752;
|
|
while( true ) {
|
|
if ((local_5 & 1) == 0) {
|
|
*local_24 = bVar2;
|
|
local_24 = local_24 + 1;
|
|
}
|
|
uVar5 = uVar5 - 1;
|
|
if ((int)uVar5 < 1) break;
|
|
LAB_004d7b48:
|
|
local_10 = local_10 + 1;
|
|
bVar2 = (*(code *)param_1)(param_3);
|
|
if (bVar2 == 0xff) goto LAB_004d7cb4;
|
|
}
|
|
LAB_004d7b71:
|
|
if ((local_5 & 1) == 0) {
|
|
local_c = local_c + 1;
|
|
}
|
|
goto LAB_004d7752;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7cd8 file=? name=FUN_004d7cd8 */
|
|
|
|
uint __cdecl
|
|
FUN_004d7cd8(undefined *param_1,undefined *param_2,undefined4 param_3,uint param_4,int param_5,
|
|
int *param_6,int *param_7)
|
|
|
|
{
|
|
int iVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
bool bVar6;
|
|
bool bVar7;
|
|
int local_1c;
|
|
int local_18;
|
|
uint local_14;
|
|
int local_10;
|
|
int local_c;
|
|
|
|
bVar6 = false;
|
|
local_c = 0;
|
|
local_10 = 1;
|
|
local_14 = 0;
|
|
local_18 = 0;
|
|
iVar5 = 0;
|
|
iVar1 = local_c;
|
|
LAB_004d7d00:
|
|
do {
|
|
local_c = iVar1;
|
|
iVar1 = local_c + 1;
|
|
iVar3 = (*(code *)param_1)(param_3);
|
|
if (iVar5 == 0) {
|
|
if (((-1 < iVar3) && (iVar3 < 0x80)) && (((&DAT_005207dd)[iVar3] & 1) != 0))
|
|
goto LAB_004d7d00;
|
|
iVar5 = 1;
|
|
}
|
|
iVar2 = param_5 + -1;
|
|
if (iVar2 < 0) goto LAB_004d7e3c;
|
|
if ((iVar5 != 1) || ((iVar5 = 2, iVar3 != 0x2b && (iVar3 != 0x2d)))) {
|
|
if (iVar5 == 2) {
|
|
iVar5 = 3;
|
|
if ((iVar3 == 0x30) && ((local_18 = 1, param_4 == 0 || (param_4 == 0x10)))) {
|
|
iVar1 = local_c + 2;
|
|
iVar3 = (*(code *)param_1)(param_3);
|
|
param_5 = param_5 + -2;
|
|
if (param_5 < 0) goto LAB_004d7e3c;
|
|
if ((iVar3 == 0x78) || (iVar3 == 0x58)) {
|
|
param_4 = 0x10;
|
|
goto LAB_004d7d00;
|
|
}
|
|
iVar2 = param_5;
|
|
if (param_4 == 0) {
|
|
param_4 = 8;
|
|
}
|
|
}
|
|
local_c = iVar1;
|
|
param_5 = iVar2;
|
|
iVar2 = param_5;
|
|
iVar1 = local_c;
|
|
if (param_4 == 0) {
|
|
param_4 = 10;
|
|
}
|
|
else if (((int)param_4 < 1) || (0x24 < (int)param_4)) goto LAB_004d7e3c;
|
|
}
|
|
local_c = iVar1;
|
|
param_5 = iVar2;
|
|
iVar1 = local_c;
|
|
if (iVar5 == 3) {
|
|
if ((iVar3 < 0x30) || (0x39 < iVar3)) {
|
|
if ((iVar3 < 0x61) || (0x7a < iVar3)) {
|
|
if ((iVar3 < 0x41) || (0x5a < iVar3)) goto LAB_004d7e3c;
|
|
local_1c = iVar3 + -0x37;
|
|
}
|
|
else {
|
|
local_1c = iVar3 + -0x57;
|
|
}
|
|
}
|
|
else {
|
|
local_1c = iVar3 + -0x30;
|
|
}
|
|
if ((int)param_4 <= local_1c) goto LAB_004d7e3c;
|
|
local_18 = local_18 + 1;
|
|
uVar4 = local_14 * param_4 + local_1c;
|
|
bVar7 = local_14 != (uVar4 - local_1c) / param_4;
|
|
local_14 = uVar4;
|
|
if (bVar7) {
|
|
local_10 = 2;
|
|
local_14 = 0x80000000;
|
|
if (!bVar6) {
|
|
local_14 = 0x7fffffff;
|
|
}
|
|
LAB_004d7e3c:
|
|
local_c = iVar1;
|
|
if (local_10 != 2) {
|
|
(*(code *)param_2)(iVar3,param_3);
|
|
local_c = local_c + -1;
|
|
if (bVar6) {
|
|
local_14 = -local_14;
|
|
}
|
|
}
|
|
if ((local_18 == 0) && (local_10 = -1, iVar3 != -1)) {
|
|
local_10 = 0;
|
|
}
|
|
*param_7 = local_10;
|
|
*param_6 = *param_6 + local_c;
|
|
return local_14;
|
|
}
|
|
}
|
|
goto LAB_004d7d00;
|
|
}
|
|
bVar6 = iVar3 == 0x2d;
|
|
param_5 = iVar2;
|
|
} while( true );
|
|
}
|
|
|
|
|
|
|
|
/* @004d7e84 file=? name=FUN_004d7e84 */
|
|
|
|
undefined4 __cdecl FUN_004d7e84(int *param_1,int *param_2,int param_3,uint param_4)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
if ((((short)param_1[5] == (short)param_1) && (param_3 < 3)) && (param_4 < 0x80000000)) {
|
|
if (param_1[2] != 0) {
|
|
FUN_004d7270(param_1,0,1);
|
|
}
|
|
if ((*(byte *)((int)param_1 + 0x12) & 4) != 0) {
|
|
FUN_004de420((int *)param_1[1]);
|
|
}
|
|
uVar1 = FUN_004d6a88(param_1,param_2,param_3,param_4);
|
|
}
|
|
else {
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7f10 file=? name=FUN_004d7f10 */
|
|
|
|
void __cdecl FUN_004d7f10(undefined1 *param_1,char *param_2)
|
|
|
|
{
|
|
*param_1 = 0;
|
|
FUN_004d812c(&LAB_004d7ee8,¶m_1,param_2,(uint *)&stack0x0000000c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7f34 file=? name=FUN_004d7f34 */
|
|
|
|
void __cdecl FUN_004d7f34(undefined1 *param_1,char *param_2,uint *param_3)
|
|
|
|
{
|
|
*param_1 = 0;
|
|
FUN_004d812c(&LAB_004d7ee8,¶m_1,param_2,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7f58 file=? name=FUN_004d7f58 */
|
|
|
|
uint __cdecl FUN_004d7f58(int *param_1)
|
|
|
|
{
|
|
byte *pbVar1;
|
|
uint uVar2;
|
|
|
|
pbVar1 = (byte *)*param_1;
|
|
*param_1 = *param_1 + 1;
|
|
if (*pbVar1 == 0) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
else {
|
|
uVar2 = (uint)*pbVar1;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7f78 file=? name=FUN_004d7f78 */
|
|
|
|
void __cdecl FUN_004d7f78(undefined4 param_1,int *param_2)
|
|
|
|
{
|
|
*param_2 = *param_2 + -1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7f84 file=? name=FUN_004d7f84 */
|
|
|
|
void __cdecl FUN_004d7f84(undefined4 param_1,byte *param_2)
|
|
|
|
{
|
|
FUN_004d773c(FUN_004d7f58,FUN_004d7f78,¶m_1,param_2,(undefined4 *)&stack0x0000000c);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d7fa8 file=? name=FUN_004d7fa8 */
|
|
|
|
void __cdecl FUN_004d7fa8(undefined4 param_1,byte *param_2,undefined4 *param_3)
|
|
|
|
{
|
|
FUN_004d773c(FUN_004d7f58,FUN_004d7f78,¶m_1,param_2,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8080 file=? name=FUN_004d8080 */
|
|
|
|
void __cdecl FUN_004d8080(undefined4 param_1,char *param_2,uint *param_3)
|
|
|
|
{
|
|
FUN_004d812c(FUN_004d6fa0,param_1,param_2,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d80a0 file=? name=FUN_004d80a0 */
|
|
|
|
void __cdecl FUN_004d80a0(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (*(int *)(param_1 + 0x50) != 0) {
|
|
iVar1 = (**(code **)(param_1 + 0x54))
|
|
(param_1,*(int *)(param_1 + 0x50),*(undefined4 *)(param_1 + 0x58));
|
|
if (iVar1 == 0) {
|
|
*(undefined4 *)(param_1 + 0x60) = 1;
|
|
}
|
|
*(undefined4 *)(param_1 + 0x50) = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d80d0 file=? name=FUN_004d80d0 */
|
|
|
|
void __cdecl FUN_004d80d0(undefined1 param_1,int param_2)
|
|
|
|
{
|
|
if (0x4f < *(int *)(param_2 + 0x50)) {
|
|
FUN_004d80a0(param_2);
|
|
}
|
|
*(undefined1 *)(param_2 + *(int *)(param_2 + 0x50)) = param_1;
|
|
*(int *)(param_2 + 0x50) = *(int *)(param_2 + 0x50) + 1;
|
|
*(int *)(param_2 + 0x5c) = *(int *)(param_2 + 0x5c) + 1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d80f8 file=? name=FUN_004d80f8 */
|
|
|
|
void __cdecl FUN_004d80f8(uint param_1,int param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
int iVar2;
|
|
char cVar3;
|
|
|
|
iVar2 = 7;
|
|
pcVar1 = (char *)(param_2 + 7);
|
|
do {
|
|
cVar3 = (char)(param_1 & 0xf);
|
|
if ((param_1 & 0xf) < 10) {
|
|
*pcVar1 = cVar3 + '0';
|
|
}
|
|
else {
|
|
*pcVar1 = cVar3 + '7';
|
|
}
|
|
param_1 = param_1 >> 4;
|
|
iVar2 = iVar2 + -1;
|
|
pcVar1 = pcVar1 + -1;
|
|
} while (-1 < iVar2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d812c file=? name=FUN_004d812c */
|
|
|
|
undefined4 __cdecl FUN_004d812c(undefined4 param_1,undefined4 param_2,char *param_3,uint *param_4)
|
|
|
|
{
|
|
uint *puVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
bool bVar4;
|
|
bool bVar5;
|
|
bool bVar6;
|
|
bool bVar7;
|
|
bool bVar8;
|
|
uint uVar9;
|
|
char cVar10;
|
|
char *pcVar11;
|
|
uint uVar12;
|
|
bool bVar13;
|
|
undefined1 local_c0 [80];
|
|
undefined4 local_70;
|
|
undefined4 local_6c;
|
|
undefined4 local_68;
|
|
undefined4 local_64;
|
|
int local_60;
|
|
char local_5c [8];
|
|
undefined1 local_54;
|
|
uint local_2c;
|
|
uint local_28;
|
|
uint local_24;
|
|
char *local_20;
|
|
char local_19;
|
|
char *local_18;
|
|
int local_14;
|
|
char local_d;
|
|
uint local_c;
|
|
uint local_8;
|
|
|
|
local_60 = 0;
|
|
local_64 = 0;
|
|
local_70 = 0;
|
|
local_6c = param_1;
|
|
local_68 = param_2;
|
|
LAB_004d8152:
|
|
pcVar11 = param_3;
|
|
cVar10 = *pcVar11;
|
|
param_3 = pcVar11 + 1;
|
|
if (cVar10 != '\0') {
|
|
if (cVar10 == '%') {
|
|
if (*param_3 != '%') {
|
|
uVar9 = 0;
|
|
local_d = '\0';
|
|
local_14 = 0;
|
|
uVar12 = 0;
|
|
bVar7 = false;
|
|
bVar13 = false;
|
|
bVar6 = false;
|
|
bVar5 = false;
|
|
local_c = 0xffffffff;
|
|
local_8 = 0xffffffff;
|
|
switchD_004d81b8_default:
|
|
bVar4 = false;
|
|
cVar10 = *param_3;
|
|
param_3 = param_3 + 1;
|
|
local_18 = pcVar11;
|
|
if (cVar10 < ' ') goto switchD_004d81b8_caseD_13;
|
|
switch((&DAT_0052015b)[cVar10]) {
|
|
case 0:
|
|
local_18 = pcVar11;
|
|
if (uVar9 != 0) goto switchD_004d81b8_caseD_13;
|
|
if (local_d != '+') {
|
|
local_d = cVar10;
|
|
}
|
|
goto switchD_004d81b8_default;
|
|
case 1:
|
|
local_18 = pcVar11;
|
|
if (uVar9 != 0) goto switchD_004d81b8_caseD_13;
|
|
uVar12 = 1;
|
|
goto switchD_004d81b8_default;
|
|
case 2:
|
|
uVar3 = *param_4;
|
|
if (uVar9 < 2) {
|
|
local_8 = uVar3;
|
|
if ((int)uVar3 < 0) {
|
|
bVar5 = true;
|
|
local_8 = -uVar3;
|
|
}
|
|
uVar9 = 3;
|
|
param_4 = param_4 + 1;
|
|
}
|
|
else {
|
|
local_18 = pcVar11;
|
|
if (uVar9 != 4) goto switchD_004d81b8_caseD_13;
|
|
uVar9 = 5;
|
|
param_4 = param_4 + 1;
|
|
local_c = uVar3;
|
|
}
|
|
goto switchD_004d81b8_default;
|
|
case 3:
|
|
local_18 = pcVar11;
|
|
if (uVar9 != 0) goto switchD_004d81b8_caseD_13;
|
|
bVar5 = true;
|
|
goto switchD_004d81b8_default;
|
|
case 4:
|
|
local_18 = pcVar11;
|
|
if (3 < uVar9) goto switchD_004d81b8_caseD_13;
|
|
uVar9 = 4;
|
|
local_c = local_c + 1;
|
|
goto switchD_004d81b8_default;
|
|
case 5:
|
|
goto switchD_004d81b8_caseD_5;
|
|
case 6:
|
|
bVar6 = true;
|
|
uVar9 = 5;
|
|
goto switchD_004d81b8_default;
|
|
case 7:
|
|
bVar6 = false;
|
|
uVar9 = 5;
|
|
goto switchD_004d81b8_default;
|
|
case 8:
|
|
bVar7 = true;
|
|
bVar6 = false;
|
|
uVar9 = 5;
|
|
goto switchD_004d81b8_default;
|
|
case 9:
|
|
if (uVar9 == 0) {
|
|
if (!bVar5) {
|
|
bVar13 = true;
|
|
uVar9 = 1;
|
|
}
|
|
}
|
|
else {
|
|
switchD_004d81b8_caseD_5:
|
|
cVar10 = cVar10 + -0x30;
|
|
if (uVar9 < 3) {
|
|
uVar9 = 2;
|
|
if (local_8 == 0xffffffff) {
|
|
local_8 = (uint)cVar10;
|
|
}
|
|
else {
|
|
local_8 = local_8 * 10 + (int)cVar10;
|
|
}
|
|
}
|
|
else {
|
|
local_18 = pcVar11;
|
|
if (uVar9 != 4) goto switchD_004d81b8_caseD_13;
|
|
local_c = local_c * 10 + (int)cVar10;
|
|
}
|
|
}
|
|
goto switchD_004d81b8_default;
|
|
case 10:
|
|
goto switchD_004d81b8_caseD_a;
|
|
case 0xb:
|
|
local_24 = 8;
|
|
break;
|
|
case 0xc:
|
|
local_24 = 10;
|
|
break;
|
|
case 0xd:
|
|
local_24 = 0x10;
|
|
local_19 = cVar10 + -0x17;
|
|
break;
|
|
case 0xe:
|
|
local_20 = (char *)*param_4;
|
|
FUN_004d80f8((uint)local_20,(int)local_5c);
|
|
local_54 = 0;
|
|
local_20 = local_5c;
|
|
param_4 = param_4 + 1;
|
|
goto LAB_004d8548;
|
|
case 0xf:
|
|
local_20 = local_5c + 1;
|
|
thunk_FUN_004dd24c();
|
|
param_4 = (uint *)thunk_FUN_004dd24c();
|
|
goto LAB_004d8548;
|
|
case 0x10:
|
|
local_5c[0] = (char)*param_4;
|
|
local_5c[1] = 0;
|
|
local_20 = local_5c;
|
|
local_2c = 1;
|
|
param_4 = param_4 + 1;
|
|
goto LAB_004d85b9;
|
|
case 0x11:
|
|
puVar1 = param_4 + 1;
|
|
local_20 = (char *)*param_4;
|
|
if (local_20 == (char *)0x0) {
|
|
local_20 = &DAT_00520174;
|
|
}
|
|
local_2c = FUN_004d4a78(local_20);
|
|
param_4 = puVar1;
|
|
if (((int)local_c < (int)local_2c) && (-1 < (int)local_c)) {
|
|
local_2c = local_c;
|
|
}
|
|
goto LAB_004d85b9;
|
|
case 0x12:
|
|
puVar1 = param_4 + 1;
|
|
local_20 = (char *)*param_4;
|
|
param_4 = puVar1;
|
|
if (bVar6) {
|
|
*(undefined4 *)local_20 = local_64;
|
|
}
|
|
else if (bVar7) {
|
|
*(undefined2 *)local_20 = (undefined2)local_64;
|
|
}
|
|
else {
|
|
*(undefined4 *)local_20 = local_64;
|
|
}
|
|
goto LAB_004d8152;
|
|
case 0x13:
|
|
case 0x14:
|
|
case 0x15:
|
|
goto switchD_004d81b8_caseD_13;
|
|
case 0x16:
|
|
uVar9 = 5;
|
|
goto switchD_004d81b8_default;
|
|
case 0x17:
|
|
uVar9 = 5;
|
|
default:
|
|
goto switchD_004d81b8_default;
|
|
}
|
|
local_d = '\0';
|
|
bVar8 = false;
|
|
goto LAB_004d8398;
|
|
}
|
|
param_3 = pcVar11 + 2;
|
|
cVar10 = '%';
|
|
}
|
|
FUN_004d80d0(cVar10,(int)local_c0);
|
|
goto LAB_004d8152;
|
|
}
|
|
goto LAB_004d8763;
|
|
switchD_004d81b8_caseD_a:
|
|
local_24 = 10;
|
|
bVar8 = true;
|
|
LAB_004d8398:
|
|
if (bVar6) {
|
|
uVar9 = *param_4;
|
|
}
|
|
else if (bVar7) {
|
|
if (bVar8) {
|
|
uVar9 = (uint)(short)(ushort)*param_4;
|
|
}
|
|
else {
|
|
uVar9 = (uint)(ushort)*param_4;
|
|
}
|
|
}
|
|
else {
|
|
uVar9 = *param_4;
|
|
}
|
|
param_4 = param_4 + 1;
|
|
local_20 = local_5c + 1;
|
|
if (uVar9 == 0) {
|
|
if (local_c == 0) {
|
|
local_5c[1] = 0;
|
|
goto LAB_004d840a;
|
|
}
|
|
}
|
|
else {
|
|
uVar12 = uVar12 | 4;
|
|
}
|
|
FUN_004dd35c(uVar9,local_20,local_24,bVar8,local_19);
|
|
LAB_004d840a:
|
|
if ((int)local_c < 0) {
|
|
LAB_004d8548:
|
|
if ((bVar13) && (0 < (int)local_8)) {
|
|
local_2c = FUN_004d4a78(local_20);
|
|
if (*local_20 == '-') {
|
|
local_2c = local_2c + -1;
|
|
}
|
|
if ((int)local_2c < (int)local_8) {
|
|
local_14 = local_8 - local_2c;
|
|
}
|
|
}
|
|
if ((*local_20 == '-') || (local_d != '\0')) {
|
|
if (*local_20 != '-') {
|
|
local_20 = local_20 + -1;
|
|
*local_20 = local_d;
|
|
}
|
|
if ((0 < local_14) && ((int)local_c < 0)) {
|
|
local_14 = local_14 + -1;
|
|
}
|
|
}
|
|
local_2c = FUN_004d4a78(local_20);
|
|
}
|
|
else {
|
|
local_28 = FUN_004d4a78(local_20);
|
|
local_2c = local_28;
|
|
if (*local_20 == '-') {
|
|
local_28 = local_28 - 1;
|
|
}
|
|
else if (local_d != '\0') {
|
|
local_2c = local_28 + 1;
|
|
local_20 = local_20 + -1;
|
|
*local_20 = local_d;
|
|
}
|
|
if ((int)local_28 < (int)local_c) {
|
|
local_14 = local_c - local_28;
|
|
}
|
|
}
|
|
LAB_004d85b9:
|
|
if (uVar12 == 5) {
|
|
if (cVar10 == 'o') {
|
|
if (local_14 < 1) {
|
|
local_14 = 1;
|
|
}
|
|
}
|
|
else if ((cVar10 == 'x') || (cVar10 == 'X')) {
|
|
bVar4 = true;
|
|
local_8 = local_8 - 2;
|
|
local_14 = local_14 + -2;
|
|
if (local_14 < 0) {
|
|
local_14 = 0;
|
|
}
|
|
}
|
|
}
|
|
local_2c = local_2c + local_14;
|
|
if ((!bVar5) && ((int)local_2c < (int)local_8)) {
|
|
do {
|
|
FUN_004d80d0(0x20,(int)local_c0);
|
|
local_8 = local_8 - 1;
|
|
} while ((int)local_2c < (int)local_8);
|
|
}
|
|
if (bVar4) {
|
|
FUN_004d80d0(0x30,(int)local_c0);
|
|
FUN_004d80d0(cVar10,(int)local_c0);
|
|
}
|
|
if (0 < local_14) {
|
|
local_2c = local_2c - local_14;
|
|
local_8 = local_8 - local_14;
|
|
cVar10 = *local_20;
|
|
if (((cVar10 == '-') || (cVar10 == ' ')) || (cVar10 == '+')) {
|
|
cVar10 = *local_20;
|
|
local_20 = local_20 + 1;
|
|
FUN_004d80d0(cVar10,(int)local_c0);
|
|
local_2c = local_2c + -1;
|
|
local_8 = local_8 - 1;
|
|
}
|
|
while (iVar2 = local_14 + -1, bVar13 = local_14 != 0, local_14 = iVar2, bVar13) {
|
|
FUN_004d80d0(0x30,(int)local_c0);
|
|
}
|
|
}
|
|
if (local_2c != 0) {
|
|
local_8 = local_8 - local_2c;
|
|
while (local_2c != 0) {
|
|
cVar10 = *local_20;
|
|
local_2c = local_2c + -1;
|
|
local_20 = local_20 + 1;
|
|
FUN_004d80d0(cVar10,(int)local_c0);
|
|
}
|
|
local_2c = -1;
|
|
}
|
|
while (uVar12 = local_8 - 1, bVar13 = 0 < (int)local_8, local_8 = uVar12, bVar13) {
|
|
FUN_004d80d0(0x20,(int)local_c0);
|
|
}
|
|
goto LAB_004d8152;
|
|
switchD_004d81b8_caseD_13:
|
|
while( true ) {
|
|
pcVar11 = local_18 + 1;
|
|
cVar10 = *local_18;
|
|
local_18 = pcVar11;
|
|
if (cVar10 == '\0') break;
|
|
FUN_004d80d0(cVar10,(int)local_c0);
|
|
}
|
|
LAB_004d8763:
|
|
FUN_004d80a0((int)local_c0);
|
|
if (local_60 != 0) {
|
|
local_64 = 0xffffffff;
|
|
}
|
|
return local_64;
|
|
}
|
|
|
|
|
|
|
|
/* @004d87d4 file=? name=FUN_004d87d4 */
|
|
|
|
undefined4 __cdecl FUN_004d87d4(undefined1 *param_1)
|
|
|
|
{
|
|
if (param_1 != (undefined1 *)0x0) {
|
|
*param_1 = 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d87e8 file=? name=FUN_004d87e8 */
|
|
|
|
int FUN_004d87e8(void)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
|
|
iVar3 = 0;
|
|
piVar1 = &DAT_0051f800;
|
|
iVar2 = DAT_0051fbc0;
|
|
while (iVar2 != 0) {
|
|
if ((*(byte *)((int)piVar1 + 0x12) & 3) != 0) {
|
|
FUN_004d6b9c(piVar1);
|
|
iVar3 = iVar3 + 1;
|
|
}
|
|
piVar1 = piVar1 + 6;
|
|
iVar2 = iVar2 + -1;
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8834 file=? name=FUN_004d8834 */
|
|
|
|
uint __cdecl FUN_004d8834(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
DWORD DVar2;
|
|
DWORD DVar3;
|
|
DWORD DVar4;
|
|
|
|
if (param_1 < DAT_0051fbc0) {
|
|
if (((&DAT_0051fbc4)[param_1] & 0x200) == 0) {
|
|
if (((&DAT_0051fbc4)[param_1] & 0x2000) == 0) {
|
|
DVar2 = FUN_004d9334(param_1,0,1);
|
|
if (DVar2 == 0xffffffff) {
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
else {
|
|
DVar3 = FUN_004d9334(param_1,0,2);
|
|
if (DVar3 == 0xffffffff) {
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
else {
|
|
DVar4 = FUN_004d9334(param_1,DVar2,0);
|
|
if (DVar4 == 0xffffffff) {
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
else {
|
|
uVar1 = (uint)((int)DVar3 <= (int)DVar2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
uVar1 = 0;
|
|
}
|
|
}
|
|
else {
|
|
uVar1 = 1;
|
|
}
|
|
}
|
|
else {
|
|
uVar1 = FUN_004d9148(-6);
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d88c0 file=? name=FUN_004d88c0 */
|
|
|
|
char * __cdecl FUN_004d88c0(char *param_1,int param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char *pcVar2;
|
|
uint uVar3;
|
|
char *pcVar4;
|
|
char *pcVar5;
|
|
|
|
pcVar1 = param_1 + param_2;
|
|
pcVar4 = param_1;
|
|
pcVar5 = param_1;
|
|
while( true ) {
|
|
pcVar2 = FUN_004d48f8(pcVar4,'\r',(int)pcVar1 - (int)pcVar4);
|
|
if (pcVar2 == (char *)0x0) {
|
|
pcVar2 = pcVar1;
|
|
}
|
|
uVar3 = (int)pcVar2 - (int)pcVar4;
|
|
if (pcVar5 != pcVar4) {
|
|
FUN_004d4918((undefined4 *)pcVar5,(undefined4 *)pcVar4,uVar3);
|
|
}
|
|
if (pcVar1 + -1 <= pcVar2) break;
|
|
pcVar4 = pcVar2 + 1;
|
|
pcVar5 = pcVar5 + uVar3;
|
|
}
|
|
return pcVar5 + (uVar3 - (int)param_1);
|
|
}
|
|
|
|
|
|
|
|
/* @004d892c file=? name=FUN_004d892c */
|
|
|
|
char * __cdecl FUN_004d892c(uint param_1,char *param_2,char *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
uint uVar2;
|
|
DWORD DVar3;
|
|
char *pcVar4;
|
|
DWORD DVar5;
|
|
char *pcVar6;
|
|
|
|
if (param_1 < DAT_0051fbc0) {
|
|
if (param_3 + 1 < (char *)0x2) {
|
|
pcVar1 = (char *)0x0;
|
|
}
|
|
else if ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 0x40) == 0) {
|
|
pcVar1 = (char *)FUN_004d91c0(param_1,param_2,(DWORD)param_3);
|
|
}
|
|
else if ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 2) == 0) {
|
|
pcVar1 = (char *)0x0;
|
|
if (param_3 != (char *)0x0) {
|
|
while( true ) {
|
|
uVar2 = (int)param_3 - (int)pcVar1;
|
|
DVar3 = FUN_004d91c0(param_1,param_2,uVar2);
|
|
if (DVar3 == 0xffffffff) {
|
|
return (char *)0xffffffff;
|
|
}
|
|
if (DVar3 == 0) {
|
|
return pcVar1;
|
|
}
|
|
pcVar4 = FUN_004d48f8(param_2,'\x1a',DVar3);
|
|
if (pcVar4 != (char *)0x0) {
|
|
(&DAT_0051fbc4)[param_1] = (&DAT_0051fbc4)[param_1] | 0x200;
|
|
DVar3 = (int)pcVar4 - (int)param_2;
|
|
if (DVar3 == 0) {
|
|
return pcVar1;
|
|
}
|
|
}
|
|
if ((param_2[DVar3 - 1] == '\r') &&
|
|
(DVar5 = FUN_004d91c0(param_1,param_2 + (DVar3 - 1),1), DVar5 == 0xffffffff)) break;
|
|
pcVar6 = FUN_004d88c0(param_2,DVar3);
|
|
pcVar1 = pcVar1 + (int)pcVar6;
|
|
if ((DVar3 < uVar2) && ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 0x20) != 0)) {
|
|
return pcVar1;
|
|
}
|
|
if (pcVar4 != (char *)0x0) {
|
|
return pcVar1;
|
|
}
|
|
if (pcVar6 != (char *)0x0) {
|
|
return pcVar1;
|
|
}
|
|
if (param_3 <= pcVar1) {
|
|
return pcVar1;
|
|
}
|
|
}
|
|
pcVar1 = (char *)0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
pcVar1 = (char *)0x0;
|
|
}
|
|
}
|
|
else {
|
|
pcVar1 = (char *)FUN_004d9148(-6);
|
|
}
|
|
return pcVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8a5c file=? name=FUN_004d8a5c */
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
int __cdecl FUN_004d8a5c(char *param_1,int *param_2,undefined4 *param_3,int param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
char *pcVar2;
|
|
char *pcVar3;
|
|
char *pcVar4;
|
|
undefined1 *puVar5;
|
|
undefined4 *puVar6;
|
|
char *pcVar7;
|
|
int local_14;
|
|
|
|
iVar1 = *param_2;
|
|
*param_2 = 0;
|
|
local_14 = 0;
|
|
puVar6 = param_3;
|
|
pcVar7 = param_1;
|
|
while( true ) {
|
|
pcVar4 = param_1 + (iVar1 - (int)pcVar7);
|
|
pcVar2 = FUN_004d48f8(pcVar7,'\n',(int)pcVar4);
|
|
if (pcVar2 != (char *)0x0) {
|
|
pcVar4 = pcVar2 + -(int)pcVar7;
|
|
}
|
|
pcVar3 = (char *)((int)param_3 + (param_4 - (int)puVar6));
|
|
if (pcVar3 < pcVar4) break;
|
|
FUN_004d4918(puVar6,(undefined4 *)pcVar7,(uint)pcVar4);
|
|
puVar5 = (undefined1 *)((int)puVar6 + (int)pcVar4);
|
|
if ((pcVar2 == (char *)0x0) || ((int)param_3 + (param_4 - (int)puVar5) < 2)) {
|
|
*param_2 = (int)(pcVar4 + *param_2);
|
|
LAB_004d8b0c:
|
|
return local_14 + (int)pcVar4;
|
|
}
|
|
*puVar5 = 0xd;
|
|
puVar5[1] = 10;
|
|
puVar6 = (undefined4 *)(puVar5 + 2);
|
|
local_14 = local_14 + (int)(pcVar4 + 2);
|
|
pcVar7 = pcVar7 + (int)(pcVar4 + 1);
|
|
*param_2 = (int)(pcVar4 + 1 + *param_2);
|
|
}
|
|
FUN_004d4918(puVar6,(undefined4 *)pcVar7,(uint)pcVar3);
|
|
*param_2 = (int)(pcVar3 + *param_2);
|
|
pcVar4 = pcVar3;
|
|
goto LAB_004d8b0c;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8b14 file=? name=FUN_004d8b14 */
|
|
|
|
char * __cdecl FUN_004d8b14(uint param_1,char *param_2,char *param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char *pcVar2;
|
|
DWORD DVar3;
|
|
undefined4 local_8c [32];
|
|
DWORD local_c;
|
|
char *local_8;
|
|
|
|
if (param_1 < DAT_0051fbc0) {
|
|
if (param_3 + 1 < (char *)0x2) {
|
|
param_3 = (char *)0x0;
|
|
}
|
|
else {
|
|
if ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 8) != 0) {
|
|
FUN_004d9334(param_1,0,2);
|
|
}
|
|
pcVar1 = param_2;
|
|
pcVar2 = param_3;
|
|
if ((*(byte *)((int)&DAT_0051fbc4 + param_1 * 4 + 1) & 0x40) == 0) {
|
|
param_3 = (char *)FUN_004d9224(param_1,param_2,(DWORD)param_3);
|
|
}
|
|
else {
|
|
for (; pcVar2 != (char *)0x0; pcVar2 = pcVar2 + -(int)local_8) {
|
|
local_8 = pcVar2;
|
|
DVar3 = FUN_004d8a5c(pcVar1,(int *)&local_8,local_8c,0x80);
|
|
local_c = FUN_004d9224(param_1,local_8c,DVar3);
|
|
if (DVar3 != local_c) {
|
|
if (local_c == 0xffffffff) {
|
|
return (char *)0xffffffff;
|
|
}
|
|
return pcVar1 + (local_c - (int)param_2);
|
|
}
|
|
pcVar1 = pcVar1 + (int)local_8;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
param_3 = (char *)FUN_004d9148(-6);
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8bf4 file=? name=FUN_004d8bf4 */
|
|
|
|
void __cdecl FUN_004d8bf4(int *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
char local_108 [260];
|
|
|
|
GetCurrentDirectoryA(0x104,local_108);
|
|
if (local_108[0] < 'a') {
|
|
iVar1 = local_108[0] + -0x40;
|
|
}
|
|
else {
|
|
iVar1 = local_108[0] + -0x60;
|
|
}
|
|
*param_1 = iVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8c38 file=? name=FUN_004d8c38 */
|
|
|
|
void __cdecl FUN_004d8c38(char param_1,int *param_2)
|
|
|
|
{
|
|
DWORD DVar1;
|
|
BOOL BVar2;
|
|
UINT UVar3;
|
|
CHAR local_10c [260];
|
|
CHAR local_8;
|
|
char local_7;
|
|
undefined1 local_6;
|
|
undefined1 local_5;
|
|
|
|
*param_2 = 0;
|
|
local_8 = '=';
|
|
local_7 = param_1 + '@';
|
|
local_6 = 0x3a;
|
|
local_5 = 0;
|
|
DVar1 = GetEnvironmentVariableA(&local_8,local_10c,0x104);
|
|
if (DVar1 == 0) {
|
|
local_10c[0] = local_7;
|
|
local_10c[1] = 0x3a;
|
|
local_10c[2] = 0x5c;
|
|
local_10c[3] = 0;
|
|
BVar2 = SetEnvironmentVariableA(&local_8,local_10c);
|
|
if (BVar2 != 1) {
|
|
FUN_004d91ac();
|
|
return;
|
|
}
|
|
}
|
|
BVar2 = SetCurrentDirectoryA(local_10c);
|
|
if (BVar2 == 1) {
|
|
builtin_memcpy(local_10c,"A:\\",4);
|
|
for (; local_10c[0] < '['; local_10c[0] = local_10c[0] + '\x01') {
|
|
UVar3 = GetDriveTypeA(local_10c);
|
|
if ((UVar3 != 0) && (UVar3 != 1)) {
|
|
*param_2 = *param_2 + 1;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
FUN_004d91ac();
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8ce0 file=? name=FUN_004d8ce0 */
|
|
|
|
undefined4 __cdecl FUN_004d8ce0(int param_1,int *param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
|
|
piVar1 = FUN_004d8d20(param_1,param_2,0x100);
|
|
if (piVar1 == (int *)0x0) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
else {
|
|
iVar3 = FUN_004d4a78((char *)((int)param_2 + 3));
|
|
FUN_004d493c(param_2,(undefined4 *)((int)param_2 + 3),iVar3 + 1);
|
|
uVar2 = 0;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8d20 file=? name=FUN_004d8d20 */
|
|
|
|
int * __cdecl FUN_004d8d20(int param_1,int *param_2,uint param_3)
|
|
|
|
{
|
|
code *pcVar1;
|
|
DWORD DVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
char cVar5;
|
|
int *piVar6;
|
|
char *pcVar7;
|
|
char *pcVar8;
|
|
int *piVar9;
|
|
bool bVar10;
|
|
char local_10c [260];
|
|
CHAR local_8;
|
|
char local_7;
|
|
undefined1 local_6;
|
|
undefined1 local_5;
|
|
|
|
if (param_1 == 0) {
|
|
DVar2 = GetCurrentDirectoryA(0x103,local_10c);
|
|
if ((DVar2 == 0) || ((int)param_3 < (int)DVar2)) {
|
|
DAT_00520bcc = 8;
|
|
return (int *)0x0;
|
|
}
|
|
}
|
|
else {
|
|
cVar5 = (char)param_1;
|
|
if (DAT_00525224 == 2) {
|
|
local_10c[0] = cVar5 + '@';
|
|
local_10c[1] = 0x3a;
|
|
local_10c[2] = 0x5c;
|
|
local_10c[3] = 0;
|
|
bVar10 = (char *)0xfffffffc < local_10c;
|
|
pcVar1 = (code *)swi(0x21);
|
|
(*pcVar1)();
|
|
if (bVar10) {
|
|
return (int *)0x0;
|
|
}
|
|
}
|
|
else {
|
|
DVar2 = GetLogicalDrives();
|
|
if ((1 << (cVar5 - 1U & 0x1f) & DVar2) == 0) {
|
|
return (int *)0x0;
|
|
}
|
|
local_8 = '=';
|
|
local_7 = cVar5 + '@';
|
|
local_6 = 0x3a;
|
|
local_5 = 0;
|
|
DVar2 = GetEnvironmentVariableA(&local_8,local_10c,0x103);
|
|
if (DVar2 == 0) {
|
|
local_10c[0] = local_7;
|
|
local_10c[1] = 0x3a;
|
|
local_10c[2] = 0x5c;
|
|
local_10c[3] = 0;
|
|
}
|
|
}
|
|
}
|
|
uVar3 = FUN_004d4a78(local_10c);
|
|
if (uVar3 < param_3) {
|
|
if ((param_2 == (int *)0x0) && (param_2 = FUN_004de55c(param_3), param_2 == (int *)0x0)) {
|
|
DAT_00520bcc = 8;
|
|
param_2 = (int *)0x0;
|
|
}
|
|
else {
|
|
uVar3 = 0xffffffff;
|
|
pcVar7 = local_10c;
|
|
do {
|
|
pcVar8 = pcVar7;
|
|
if (uVar3 == 0) break;
|
|
uVar3 = uVar3 - 1;
|
|
pcVar8 = pcVar7 + 1;
|
|
cVar5 = *pcVar7;
|
|
pcVar7 = pcVar8;
|
|
} while (cVar5 != '\0');
|
|
uVar3 = ~uVar3;
|
|
piVar6 = (int *)(pcVar8 + -uVar3);
|
|
piVar9 = param_2;
|
|
for (uVar4 = uVar3 >> 2; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
*piVar9 = *piVar6;
|
|
piVar6 = piVar6 + 1;
|
|
piVar9 = piVar9 + 1;
|
|
}
|
|
for (uVar3 = uVar3 & 3; uVar3 != 0; uVar3 = uVar3 - 1) {
|
|
*(char *)piVar9 = (char)*piVar6;
|
|
piVar6 = (int *)((int)piVar6 + 1);
|
|
piVar9 = (int *)((int)piVar9 + 1);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
DAT_00520bcc = 0x22;
|
|
param_2 = (int *)0x0;
|
|
}
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8e80 file=? name=FUN_004d8e80 */
|
|
|
|
int FUN_004d8e80(void)
|
|
|
|
{
|
|
int local_4;
|
|
|
|
FUN_004d8bf4(&local_4);
|
|
return local_4 + -1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8e90 file=? name=FUN_004d8e90 */
|
|
|
|
int __cdecl FUN_004d8e90(char param_1)
|
|
|
|
{
|
|
int local_8;
|
|
|
|
FUN_004d8c38(param_1 + '\x01',&local_8);
|
|
return local_8;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8eac file=? name=FUN_004d8eac */
|
|
|
|
int __cdecl FUN_004d8eac(undefined4 param_1,undefined4 param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
int *piVar2;
|
|
|
|
iVar1 = 0;
|
|
for (piVar2 = &DAT_0051fbc4; (iVar1 < DAT_0051fbc0 && (*piVar2 != 0)); piVar2 = piVar2 + 1) {
|
|
iVar1 = iVar1 + 1;
|
|
}
|
|
if (iVar1 == DAT_0051fbc0) {
|
|
return -1;
|
|
}
|
|
(&DAT_0051fbc4)[iVar1] = param_2;
|
|
*(undefined4 *)(&DAT_00524d14 + iVar1 * 4) = param_1;
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8eec file=? name=FUN_004d8eec */
|
|
|
|
uint __cdecl FUN_004d8eec(uint param_1,uint param_2,undefined4 param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
|
|
if (param_2 == 0xffffffff) {
|
|
param_2 = 0;
|
|
for (piVar1 = &DAT_0051fbc4; ((int)param_2 < (int)DAT_0051fbc0 && (*piVar1 != 0));
|
|
piVar1 = piVar1 + 1) {
|
|
param_2 = param_2 + 1;
|
|
}
|
|
}
|
|
if ((param_1 < DAT_0051fbc0) && (param_2 < DAT_0051fbc0)) {
|
|
if (((&DAT_0051fbc4)[param_1] != 0) && ((&DAT_0051fbc4)[param_2] == 0)) {
|
|
(&DAT_0051fbc4)[param_2] = (&DAT_0051fbc4)[param_1];
|
|
*(undefined4 *)(&DAT_00524d14 + param_2 * 4) = param_3;
|
|
return param_2;
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8f54 file=? name=FUN_004d8f54 */
|
|
|
|
void __cdecl FUN_004d8f54(uint param_1)
|
|
|
|
{
|
|
if (param_1 < DAT_0051fbc0) {
|
|
(&DAT_0051fbc4)[param_1] = 0;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d8f70 file=? name=FUN_004d8f70 */
|
|
|
|
int __cdecl FUN_004d8f70(int *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
int iVar2;
|
|
byte bVar3;
|
|
int *piVar4;
|
|
uint *puVar5;
|
|
byte *pbVar6;
|
|
int local_8;
|
|
|
|
iVar2 = DAT_0051fbc0;
|
|
for (piVar4 = &DAT_0051fbc0 + DAT_0051fbc0; (iVar2 != 0 && (*piVar4 == 0)); piVar4 = piVar4 + -1)
|
|
{
|
|
iVar2 = iVar2 + -1;
|
|
}
|
|
if (param_1 == (int *)0x0) {
|
|
if (iVar2 == 0) {
|
|
iVar2 = 0;
|
|
}
|
|
else {
|
|
iVar2 = iVar2 * 5 + 4;
|
|
}
|
|
}
|
|
else {
|
|
*param_1 = iVar2;
|
|
pbVar6 = (byte *)(param_1 + 1);
|
|
local_8 = 0;
|
|
puVar5 = &DAT_0051fbc4;
|
|
if (0 < iVar2) {
|
|
do {
|
|
bVar3 = 1;
|
|
uVar1 = *puVar5;
|
|
if ((uVar1 & 0x800) != 0) {
|
|
bVar3 = 0x21;
|
|
}
|
|
if ((uVar1 & 0x8000) == 0) {
|
|
bVar3 = bVar3 | 0x80;
|
|
}
|
|
if ((uVar1 & 0x2000) != 0) {
|
|
bVar3 = bVar3 | 0x40;
|
|
}
|
|
*pbVar6 = bVar3;
|
|
pbVar6 = pbVar6 + 1;
|
|
local_8 = local_8 + 1;
|
|
puVar5 = puVar5 + 1;
|
|
} while (local_8 < iVar2);
|
|
}
|
|
FUN_004d4918((undefined4 *)pbVar6,(undefined4 *)&DAT_00524d14,iVar2 << 2);
|
|
iVar2 = 0;
|
|
}
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9004 file=? name=FUN_004d9004 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void FUN_004d9004(void)
|
|
|
|
{
|
|
bool bVar1;
|
|
UINT UVar2;
|
|
uint uVar3;
|
|
undefined4 *puVar4;
|
|
undefined3 extraout_var;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
uint *puVar8;
|
|
uint *puVar9;
|
|
_STARTUPINFOA local_50;
|
|
|
|
UVar2 = SetHandleCount(DAT_0051fbc0);
|
|
if (UVar2 < DAT_0051fbc0) {
|
|
DAT_0051fbc0 = UVar2;
|
|
}
|
|
PTR_FUN_005201e0 = FUN_004d8f70;
|
|
bVar1 = false;
|
|
GetStartupInfoA(&local_50);
|
|
if (local_50.cbReserved2 != 0) {
|
|
uVar7 = *(uint *)local_50.lpReserved2;
|
|
puVar8 = (uint *)((int)local_50.lpReserved2 + 4);
|
|
if (uVar7 * 5 + 4 == (uint)local_50.cbReserved2) {
|
|
bVar1 = true;
|
|
iVar5 = 0;
|
|
puVar9 = &DAT_0051fbc4;
|
|
if (0 < (int)uVar7) {
|
|
do {
|
|
uVar6 = *puVar8;
|
|
puVar8 = (uint *)((int)puVar8 + 1);
|
|
uVar3 = 0;
|
|
if ((uVar6 & 0x20) != 0) {
|
|
uVar3 = 0x800;
|
|
}
|
|
if ((uVar6 & 0x40) != 0) {
|
|
uVar3 = uVar3 | 0x2000;
|
|
}
|
|
if ((uVar6 & 0x80) == 0) {
|
|
uVar3 = uVar3 | 0x8000;
|
|
}
|
|
else {
|
|
uVar3 = uVar3 | 0x4000;
|
|
}
|
|
*puVar9 = *puVar9 & 3 | uVar3;
|
|
iVar5 = iVar5 + 1;
|
|
puVar9 = puVar9 + 1;
|
|
} while (iVar5 < (int)uVar7);
|
|
}
|
|
puVar4 = &DAT_0051fbc4 + uVar7;
|
|
for (uVar6 = uVar7; uVar6 < DAT_0051fbc0; uVar6 = uVar6 + 1) {
|
|
*puVar4 = 0;
|
|
puVar4 = puVar4 + 1;
|
|
}
|
|
FUN_004d493c((undefined4 *)&DAT_00524d14,puVar8,uVar7 << 2);
|
|
}
|
|
}
|
|
if (!bVar1) {
|
|
_DAT_00524d14 = GetStdHandle(0xfffffff6);
|
|
DAT_00524d18 = GetStdHandle(0xfffffff5);
|
|
_DAT_00524d1c = GetStdHandle(0xfffffff4);
|
|
uVar7 = 0;
|
|
puVar8 = &DAT_0051fbc4;
|
|
do {
|
|
bVar1 = FUN_004d9304(uVar7);
|
|
if (CONCAT31(extraout_var,bVar1) == 0) {
|
|
*puVar8 = *puVar8 & 0xffffdfff;
|
|
}
|
|
else {
|
|
*puVar8 = *puVar8 | 0x2000;
|
|
}
|
|
uVar7 = uVar7 + 1;
|
|
puVar8 = puVar8 + 1;
|
|
} while ((int)uVar7 < 3);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9148 file=? name=FUN_004d9148 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
undefined4 __cdecl FUN_004d9148(int param_1)
|
|
|
|
{
|
|
if (param_1 < 0) {
|
|
if (-param_1 < DAT_0051fd3c) {
|
|
DAT_00520bcc = -param_1;
|
|
_DAT_00524dd0 = 0xffffffff;
|
|
return 0xffffffff;
|
|
}
|
|
}
|
|
else if (param_1 < 299) goto LAB_004d915e;
|
|
param_1 = 1;
|
|
LAB_004d915e:
|
|
_DAT_00524dd0 = param_1;
|
|
DAT_00520bcc = (int)(char)(&DAT_005201e8)[param_1];
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004d91ac file=? name=FUN_004d91ac */
|
|
|
|
void FUN_004d91ac(void)
|
|
|
|
{
|
|
DWORD DVar1;
|
|
|
|
DVar1 = GetLastError();
|
|
FUN_004d9148(DVar1 & 0xffff);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d91c0 file=? name=FUN_004d91c0 */
|
|
|
|
DWORD __cdecl FUN_004d91c0(uint param_1,LPVOID param_2,DWORD param_3)
|
|
|
|
{
|
|
BOOL BVar1;
|
|
DWORD local_8;
|
|
|
|
if (param_1 < DAT_0051fbc0) {
|
|
BVar1 = ReadFile(*(HANDLE *)(&DAT_00524d14 + param_1 * 4),param_2,param_3,&local_8,
|
|
(LPOVERLAPPED)0x0);
|
|
if (BVar1 != 1) {
|
|
local_8 = FUN_004d91ac();
|
|
}
|
|
}
|
|
else {
|
|
local_8 = FUN_004d9148(6);
|
|
}
|
|
return local_8;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9208 file=? name=FUN_004d9208 */
|
|
|
|
void __cdecl FUN_004d9208(uint param_1,LPVOID param_2,DWORD param_3)
|
|
|
|
{
|
|
FUN_004d91c0(param_1,param_2,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9224 file=? name=FUN_004d9224 */
|
|
|
|
DWORD __cdecl FUN_004d9224(uint param_1,LPCVOID param_2,DWORD param_3)
|
|
|
|
{
|
|
BOOL BVar1;
|
|
DWORD local_8;
|
|
|
|
if (param_1 < DAT_0051fbc0) {
|
|
BVar1 = WriteFile(*(HANDLE *)(&DAT_00524d14 + param_1 * 4),param_2,param_3,&local_8,
|
|
(LPOVERLAPPED)0x0);
|
|
if (BVar1 != 1) {
|
|
local_8 = FUN_004d91ac();
|
|
}
|
|
}
|
|
else {
|
|
local_8 = FUN_004d9148(6);
|
|
}
|
|
return local_8;
|
|
}
|
|
|
|
|
|
|
|
/* @004d926c file=? name=FUN_004d926c */
|
|
|
|
void __cdecl FUN_004d926c(uint param_1,LPCVOID param_2,DWORD param_3)
|
|
|
|
{
|
|
FUN_004d9224(param_1,param_2,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9288 file=? name=FUN_004d9288 */
|
|
|
|
undefined4 __cdecl FUN_004d9288(LPCSTR param_1,byte param_2)
|
|
|
|
{
|
|
DWORD DVar1;
|
|
undefined4 uVar2;
|
|
|
|
DVar1 = GetFileAttributesA(param_1);
|
|
if (DVar1 == 0xffffffff) {
|
|
uVar2 = FUN_004d91ac();
|
|
return uVar2;
|
|
}
|
|
if (((param_2 & 2) != 0) && ((DVar1 & 1) != 0)) {
|
|
DAT_00520bcc = 5;
|
|
return 0xffffffff;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004d92c4 file=? name=FUN_004d92c4 */
|
|
|
|
undefined4 __cdecl FUN_004d92c4(uint param_1)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
BOOL BVar2;
|
|
|
|
if (DAT_0051fbc0 <= param_1) {
|
|
uVar1 = FUN_004d9148(6);
|
|
return uVar1;
|
|
}
|
|
BVar2 = CloseHandle(*(HANDLE *)(&DAT_00524d14 + param_1 * 4));
|
|
if (BVar2 == 1) {
|
|
(&DAT_0051fbc4)[param_1] = 0;
|
|
return 0;
|
|
}
|
|
uVar1 = FUN_004d91ac();
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9304 file=? name=FUN_004d9304 */
|
|
|
|
bool __cdecl FUN_004d9304(uint param_1)
|
|
|
|
{
|
|
DWORD DVar1;
|
|
|
|
if (DAT_0051fbc0 <= param_1) {
|
|
return false;
|
|
}
|
|
DVar1 = GetFileType(*(HANDLE *)(&DAT_00524d14 + param_1 * 4));
|
|
return DVar1 == 2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9334 file=? name=FUN_004d9334 */
|
|
|
|
DWORD __cdecl FUN_004d9334(uint param_1,LONG param_2,int param_3)
|
|
|
|
{
|
|
DWORD DVar1;
|
|
|
|
if (param_1 < DAT_0051fbc0) {
|
|
if (param_3 == 0) {
|
|
DVar1 = 0;
|
|
}
|
|
else if (param_3 == 1) {
|
|
DVar1 = 1;
|
|
}
|
|
else {
|
|
if (param_3 != 2) {
|
|
DVar1 = FUN_004d9148(1);
|
|
return DVar1;
|
|
}
|
|
DVar1 = 2;
|
|
}
|
|
(&DAT_0051fbc4)[param_1] = (&DAT_0051fbc4)[param_1] & 0xfffffdff;
|
|
DVar1 = SetFilePointer(*(HANDLE *)(&DAT_00524d14 + param_1 * 4),param_2,(PLONG)0x0,DVar1);
|
|
if (DVar1 == 0xffffffff) {
|
|
FUN_004d91ac();
|
|
}
|
|
}
|
|
else {
|
|
DVar1 = FUN_004d9148(6);
|
|
}
|
|
return DVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d93ac file=? name=FUN_004d93ac */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
int __cdecl FUN_004d93ac(LPCSTR param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
bool bVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
HANDLE hObject;
|
|
undefined3 extraout_var;
|
|
DWORD dwFlagsAndAttributes;
|
|
DWORD DVar4;
|
|
_SECURITY_ATTRIBUTES local_18;
|
|
DWORD local_c;
|
|
DWORD local_8;
|
|
|
|
if ((param_2 & 0xc000) == 0) {
|
|
param_2 = param_2 | *(uint *)PTR_DAT_0051fc68 & 0xc000;
|
|
}
|
|
if ((param_2 & 0x8000) == 0) {
|
|
param_2 = param_2 | 0x4000;
|
|
}
|
|
uVar2 = param_2 & 0x700;
|
|
if (uVar2 < 0x501) {
|
|
if (uVar2 == 0x500) {
|
|
LAB_004d940f:
|
|
DVar4 = 1;
|
|
goto LAB_004d9430;
|
|
}
|
|
if (uVar2 == 0x100) {
|
|
DVar4 = 4;
|
|
goto LAB_004d9430;
|
|
}
|
|
if (uVar2 != 0x200) {
|
|
if (uVar2 == 0x300) {
|
|
DVar4 = 2;
|
|
goto LAB_004d9430;
|
|
}
|
|
goto LAB_004d942b;
|
|
}
|
|
}
|
|
else if (uVar2 != 0x600) {
|
|
if (uVar2 != 0x700) {
|
|
LAB_004d942b:
|
|
DVar4 = 3;
|
|
goto LAB_004d9430;
|
|
}
|
|
goto LAB_004d940f;
|
|
}
|
|
DVar4 = 5;
|
|
LAB_004d9430:
|
|
if ((param_2 & 0x100) == 0) {
|
|
dwFlagsAndAttributes = GetFileAttributesA(param_1);
|
|
if (dwFlagsAndAttributes == 0xffffffff) {
|
|
dwFlagsAndAttributes = 0;
|
|
}
|
|
}
|
|
else if ((param_3 & _DAT_005201e4 & 0x80) == 0) {
|
|
dwFlagsAndAttributes = 1;
|
|
}
|
|
else {
|
|
dwFlagsAndAttributes = 0x80;
|
|
}
|
|
uVar2 = param_2 & 3;
|
|
if (uVar2 == 0) {
|
|
local_8 = 0x80000000;
|
|
}
|
|
else if (uVar2 == 1) {
|
|
local_8 = 0x40000000;
|
|
}
|
|
else {
|
|
if (uVar2 != 2) {
|
|
iVar3 = FUN_004d9148(1);
|
|
return iVar3;
|
|
}
|
|
local_8 = 0xc0000000;
|
|
}
|
|
uVar2 = param_2 & 0x70;
|
|
if (uVar2 == 0x10) {
|
|
local_c = 0;
|
|
}
|
|
else if (uVar2 == 0x20) {
|
|
local_c = 1;
|
|
}
|
|
else if (uVar2 == 0x30) {
|
|
local_c = 2;
|
|
}
|
|
else {
|
|
local_c = 3;
|
|
}
|
|
local_18.nLength = 0xc;
|
|
local_18.lpSecurityDescriptor = (LPVOID)0x0;
|
|
local_18.bInheritHandle = (BOOL)((param_2 & 0x80) == 0);
|
|
hObject = CreateFileA(param_1,local_8,local_c,&local_18,DVar4,dwFlagsAndAttributes,(HANDLE)0x0);
|
|
if (hObject == (HANDLE)0xffffffff) {
|
|
DVar4 = GetLastError();
|
|
uVar2 = DVar4 & 0xffff;
|
|
if ((uVar2 == 0x6e) && (uVar2 = 0x50, (param_2 & 0x100) == 0)) {
|
|
uVar2 = 2;
|
|
}
|
|
iVar3 = FUN_004d9148(uVar2);
|
|
}
|
|
else {
|
|
bVar1 = FUN_004d9304((uint)hObject);
|
|
if (CONCAT31(extraout_var,bVar1) != 0) {
|
|
param_2 = param_2 | 0x2000;
|
|
}
|
|
iVar3 = FUN_004d8eac(hObject,param_2 & 0xfffff8ff);
|
|
if (iVar3 == -1) {
|
|
FUN_004d9148(4);
|
|
CloseHandle(hObject);
|
|
}
|
|
}
|
|
return iVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d959c file=? name=FUN_004d959c */
|
|
|
|
undefined4 __cdecl FUN_004d959c(LPCSTR param_1)
|
|
|
|
{
|
|
BOOL BVar1;
|
|
undefined4 uVar2;
|
|
|
|
BVar1 = DeleteFileA(param_1);
|
|
if (BVar1 == 1) {
|
|
uVar2 = 0;
|
|
}
|
|
else {
|
|
uVar2 = FUN_004d91ac();
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9800 file=? name=FUN_004d9800 */
|
|
|
|
void FUN_004d9800(void)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
undefined4 *unaff_FS_OFFSET;
|
|
undefined4 local_30;
|
|
|
|
FUN_004d66b8();
|
|
puVar1 = DAT_00524ef8;
|
|
if (DAT_00524ef8 != (undefined4 *)0x0) {
|
|
iVar2 = FUN_004d67b0((int)DAT_00524ef8,0);
|
|
*DAT_00524c68 = *DAT_00524c68 + iVar2;
|
|
(**(code **)*puVar1)(puVar1,3);
|
|
}
|
|
puVar1 = DAT_00524efc;
|
|
if (DAT_00524efc != (undefined4 *)0x0) {
|
|
iVar2 = FUN_004d67b0((int)DAT_00524efc,0);
|
|
*DAT_00524c68 = *DAT_00524c68 + iVar2;
|
|
(**(code **)*puVar1)(puVar1,3);
|
|
}
|
|
puVar1 = DAT_00524f00;
|
|
if (DAT_00524f00 != (undefined4 *)0x0) {
|
|
iVar2 = FUN_004d67b0((int)DAT_00524f00,0);
|
|
*DAT_00524c68 = *DAT_00524c68 + iVar2;
|
|
(**(code **)*puVar1)(puVar1,3);
|
|
}
|
|
*unaff_FS_OFFSET = local_30;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d98e0 file=? name=FUN_004d98e0 */
|
|
|
|
void FUN_004d98e0(void)
|
|
|
|
{
|
|
undefined4 *unaff_FS_OFFSET;
|
|
undefined4 local_24;
|
|
|
|
FUN_004d66b8();
|
|
FUN_004daac0((undefined4 *)&DAT_00524dd4,0);
|
|
FUN_004db534(&DAT_00524e20,0);
|
|
FUN_004db534((undefined4 *)&DAT_00524e68,0);
|
|
FUN_004db534((undefined4 *)&DAT_00524eb0,0);
|
|
*unaff_FS_OFFSET = local_24;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9c38 file=? name=FUN_004d9c38 */
|
|
|
|
int * __cdecl FUN_004d9c38(int *param_1)
|
|
|
|
{
|
|
FUN_004db92c(param_1,10);
|
|
FUN_004db6b4(param_1);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9c58 file=? name=FUN_004d9c58 */
|
|
|
|
int * __cdecl FUN_004d9c58(int *param_1)
|
|
|
|
{
|
|
FUN_004db92c(param_1,0);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9c70 file=? name=FUN_004d9c70 */
|
|
|
|
int * __cdecl FUN_004d9c70(int *param_1)
|
|
|
|
{
|
|
FUN_004db6b4(param_1);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9cc4 file=? name=FUN_004d9cc4 */
|
|
|
|
int * __cdecl FUN_004d9cc4(int *param_1)
|
|
|
|
{
|
|
bool bVar1;
|
|
int iVar2;
|
|
|
|
if (param_1[10] == -1) {
|
|
*(undefined2 *)(param_1 + 0xc) = 0;
|
|
}
|
|
if ((short)param_1[0xc] == 0) {
|
|
param_1 = (int *)0x0;
|
|
}
|
|
else {
|
|
bVar1 = false;
|
|
if (param_1[5] == 0) {
|
|
iVar2 = 0;
|
|
}
|
|
else {
|
|
iVar2 = param_1[5] - param_1[4];
|
|
}
|
|
if (iVar2 != 0) {
|
|
bVar1 = true;
|
|
iVar2 = (**(code **)(*param_1 + 0x18))(param_1,0xffffffff);
|
|
if (iVar2 != -1) {
|
|
bVar1 = false;
|
|
}
|
|
}
|
|
iVar2 = thunk_FUN_004d92c4(param_1[10]);
|
|
param_1[10] = -1;
|
|
*(undefined2 *)(param_1 + 0xc) = 0;
|
|
if (bVar1 || iVar2 != 0) {
|
|
param_1 = (int *)0x0;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9d34 file=? name=FUN_004d9d34 */
|
|
|
|
undefined4 * __cdecl FUN_004d9d34(undefined4 *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
|
|
FUN_004dc35c(param_1);
|
|
*param_1 = &PTR_FUN_0052050c;
|
|
param_1[10] = 0xffffffff;
|
|
param_1[0xb] = 0;
|
|
*(undefined2 *)(param_1 + 0xc) = 0;
|
|
*(undefined4 *)((int)param_1 + 0x32) = 0;
|
|
uVar2 = FUN_004022b0(0x204);
|
|
if (uVar2 != 0) {
|
|
FUN_004dc4fc((int)param_1,uVar2,uVar2 + 0x204,1);
|
|
uVar1 = uVar2 + 4;
|
|
FUN_004dc598((int)param_1,uVar1,uVar1);
|
|
FUN_004dc564((int)param_1,uVar2,uVar1,uVar1);
|
|
}
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9db0 file=? name=FUN_004d9db0 */
|
|
|
|
undefined4 * __cdecl FUN_004d9db0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
|
|
FUN_004dc35c(param_1);
|
|
*param_1 = &PTR_FUN_0052050c;
|
|
param_1[10] = param_2;
|
|
*(undefined2 *)(param_1 + 0xc) = 1;
|
|
param_1[0xb] = 0;
|
|
*(undefined4 *)((int)param_1 + 0x32) = 0;
|
|
uVar2 = FUN_004022b0(0x204);
|
|
if (uVar2 != 0) {
|
|
FUN_004dc4fc((int)param_1,uVar2,uVar2 + 0x204,1);
|
|
uVar1 = uVar2 + 4;
|
|
FUN_004dc598((int)param_1,uVar1,uVar1);
|
|
FUN_004dc564((int)param_1,uVar2,uVar1,uVar1);
|
|
}
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9e28 file=? name=FUN_004d9e28 */
|
|
|
|
void __cdecl FUN_004d9e28(int *param_1,byte param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
*param_1 = (int)&PTR_FUN_0052050c;
|
|
if (param_1[0xb] == 0) {
|
|
(**(code **)(*param_1 + 0x18))(param_1,0xffffffff);
|
|
}
|
|
else {
|
|
FUN_004d9cc4(param_1);
|
|
}
|
|
FUN_004dc48c(param_1,0);
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9e78 file=? name=FUN_004d9e78 */
|
|
|
|
undefined4 __thiscall FUN_004d9e78(void *this,int *param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined1 *puVar2;
|
|
undefined4 uVar3;
|
|
char *pcVar4;
|
|
int iVar5;
|
|
undefined4 uStack_8;
|
|
|
|
if (((short)param_1[0xc] == 0) || ((param_1[0xb] & 3U) == 1)) {
|
|
uVar3 = 0xffffffff;
|
|
}
|
|
else {
|
|
if ((*(short *)((int)param_1 + 6) == 0) && (param_1[2] != 0)) {
|
|
uStack_8 = this;
|
|
iVar5 = (**(code **)(*param_1 + 0x24))(param_1);
|
|
if (iVar5 != 0) {
|
|
return 0xffffffff;
|
|
}
|
|
iVar5 = 4;
|
|
if (param_1[3] - param_1[2] < 9) {
|
|
iVar5 = 1;
|
|
}
|
|
uVar1 = param_1[2];
|
|
FUN_004dc598((int)param_1,iVar5 + uVar1,(param_1[3] - uVar1) + uVar1);
|
|
FUN_004dc564((int)param_1,uVar1,iVar5 + uVar1,iVar5 + uVar1);
|
|
if (param_2 != 0xffffffff) {
|
|
if ((uint)param_1[5] < (uint)param_1[6]) {
|
|
puVar2 = (undefined1 *)param_1[5];
|
|
param_1[5] = param_1[5] + 1;
|
|
*puVar2 = (undefined1)param_2;
|
|
}
|
|
else {
|
|
(**(code **)(*param_1 + 0x18))(param_1,param_2 & 0xff);
|
|
}
|
|
param_1[8] = param_1[8] + 1;
|
|
}
|
|
}
|
|
else if (param_2 != 0xffffffff) {
|
|
uStack_8 = (void *)CONCAT13((undefined1)param_2,(int3)this);
|
|
pcVar4 = thunk_FUN_004d8b14(param_1[10],(char *)((int)&uStack_8 + 3),(char *)0x1);
|
|
if (pcVar4 != (char *)0x1) {
|
|
return 0xffffffff;
|
|
}
|
|
}
|
|
uVar3 = 1;
|
|
}
|
|
return uVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004d9f60 file=? name=FUN_004d9f60 */
|
|
|
|
int __cdecl FUN_004d9f60(int param_1,LPCSTR param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
DWORD DVar4;
|
|
|
|
if ((*(short *)(param_1 + 0x30) == 0) && (param_3 != 0)) {
|
|
if ((param_3 & 2) == 0) {
|
|
if ((param_3 & 1) == 0) {
|
|
return 0;
|
|
}
|
|
uVar2 = 0;
|
|
}
|
|
else {
|
|
if ((param_3 & 1) == 0) {
|
|
uVar1 = 1;
|
|
}
|
|
else {
|
|
uVar1 = 2;
|
|
}
|
|
uVar2 = uVar1;
|
|
if (((param_3 & 0x20) == 0) && (uVar2 = uVar1 | 0x100, (param_3 & 0x40) != 0)) {
|
|
uVar2 = uVar1 | 0x500;
|
|
}
|
|
if ((param_3 & 0x10) != 0) {
|
|
uVar2 = uVar2 | 0x200;
|
|
}
|
|
}
|
|
if ((param_3 & 0x80) == 0) {
|
|
uVar2 = uVar2 | 0x4000;
|
|
}
|
|
else {
|
|
uVar2 = uVar2 | 0x8000;
|
|
}
|
|
if ((param_3 & 8) != 0) {
|
|
uVar2 = uVar2 | 0x800;
|
|
}
|
|
uVar2 = thunk_FUN_004d93ac(param_2,uVar2,param_4);
|
|
if (uVar2 == 0xffffffff) {
|
|
param_1 = 0;
|
|
}
|
|
else {
|
|
*(uint *)(param_1 + 0x28) = uVar2;
|
|
*(undefined2 *)(param_1 + 0x30) = 1;
|
|
*(uint *)(param_1 + 0x2c) = param_3;
|
|
iVar3 = 2;
|
|
if ((param_3 & 4) == 0) {
|
|
iVar3 = 0;
|
|
}
|
|
DVar4 = thunk_FUN_004d9334(uVar2,0,iVar3);
|
|
*(DWORD *)(param_1 + 0x32) = DVar4;
|
|
if (*(int *)(param_1 + 0x32) == -1) {
|
|
param_1 = 0;
|
|
}
|
|
else {
|
|
uVar2 = *(uint *)(param_1 + 8);
|
|
if (uVar2 == 0) {
|
|
iVar3 = 0;
|
|
}
|
|
else {
|
|
iVar3 = 4;
|
|
if (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) < 9) {
|
|
iVar3 = 1;
|
|
}
|
|
}
|
|
FUN_004dc598(param_1,iVar3 + uVar2,iVar3 + uVar2);
|
|
FUN_004dc564(param_1,uVar2,iVar3 + uVar2,iVar3 + uVar2);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
param_1 = 0;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004da090 file=? name=FUN_004da090 */
|
|
|
|
int __cdecl FUN_004da090(int param_1,uint param_2,int param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if ((*(short *)(param_1 + 0x30) == 0) || (*(int *)(param_1 + 8) == 0)) {
|
|
if ((param_2 == 0) || (param_3 < 1)) {
|
|
param_3 = 0;
|
|
iVar1 = 0;
|
|
param_2 = 0;
|
|
}
|
|
else {
|
|
iVar1 = 4;
|
|
if (param_3 < 9) {
|
|
iVar1 = 1;
|
|
}
|
|
}
|
|
FUN_004dc4fc(param_1,param_2,param_3 + param_2,0);
|
|
FUN_004dc598(param_1,iVar1 + param_2,iVar1 + param_2);
|
|
FUN_004dc564(param_1,param_2,iVar1 + param_2,iVar1 + param_2);
|
|
}
|
|
else {
|
|
param_1 = 0;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004da108 file=? name=FUN_004da108 */
|
|
|
|
undefined4 __cdecl FUN_004da108(int param_1,int param_2,int param_3)
|
|
|
|
{
|
|
char cVar1;
|
|
uint uVar2;
|
|
char *pcVar3;
|
|
DWORD DVar4;
|
|
undefined4 uVar5;
|
|
char *pcVar6;
|
|
int iVar7;
|
|
int local_8;
|
|
|
|
local_8 = param_2;
|
|
if (*(int *)(param_1 + 0x14) == 0) {
|
|
pcVar6 = (char *)0x0;
|
|
}
|
|
else {
|
|
pcVar6 = (char *)(*(int *)(param_1 + 0x14) - *(int *)(param_1 + 0x10));
|
|
}
|
|
if (pcVar6 == (char *)0x0) {
|
|
if (param_3 == 1) {
|
|
if (*(uint *)(param_1 + 0x20) < *(uint *)(param_1 + 0x24)) {
|
|
iVar7 = *(int *)(param_1 + 0x24) - *(int *)(param_1 + 0x20);
|
|
}
|
|
else {
|
|
iVar7 = 0;
|
|
}
|
|
if ((iVar7 != 0) && (local_8 = param_2 - iVar7, (*(byte *)(param_1 + 0x2c) & 0x80) == 0)) {
|
|
pcVar6 = *(char **)(param_1 + 0x20);
|
|
while (pcVar6 != *(char **)(param_1 + 0x24)) {
|
|
cVar1 = *pcVar6;
|
|
pcVar6 = pcVar6 + 1;
|
|
if (cVar1 == '\n') {
|
|
local_8 = local_8 + -1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
pcVar3 = thunk_FUN_004d8b14(*(uint *)(param_1 + 0x28),*(char **)(param_1 + 0x10),pcVar6);
|
|
if (pcVar6 != pcVar3) {
|
|
return 0xffffffff;
|
|
}
|
|
}
|
|
if (param_3 == 0) {
|
|
iVar7 = 0;
|
|
}
|
|
else {
|
|
iVar7 = 1;
|
|
if (param_3 != 1) {
|
|
iVar7 = 2;
|
|
}
|
|
}
|
|
DVar4 = thunk_FUN_004d9334(*(uint *)(param_1 + 0x28),local_8,iVar7);
|
|
*(DWORD *)(param_1 + 0x32) = DVar4;
|
|
if ((*(short *)(param_1 + 6) == 0) && (*(int *)(param_1 + 8) != 0)) {
|
|
iVar7 = 4;
|
|
if (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) < 9) {
|
|
iVar7 = 1;
|
|
}
|
|
uVar2 = *(uint *)(param_1 + 8);
|
|
FUN_004dc598(param_1,iVar7 + uVar2,iVar7 + uVar2);
|
|
FUN_004dc564(param_1,uVar2,iVar7 + uVar2,iVar7 + uVar2);
|
|
}
|
|
if (*(int *)(param_1 + 0x32) == -1) {
|
|
uVar5 = 0xffffffff;
|
|
}
|
|
else {
|
|
uVar5 = *(undefined4 *)(param_1 + 0x32);
|
|
}
|
|
return uVar5;
|
|
}
|
|
|
|
|
|
|
|
/* @004da208 file=? name=FUN_004da208 */
|
|
|
|
undefined4 __cdecl FUN_004da208(int param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 uVar2;
|
|
char *pcVar3;
|
|
DWORD DVar4;
|
|
char *pcVar5;
|
|
int iVar6;
|
|
|
|
if (*(short *)(param_1 + 0x30) == 0) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
else {
|
|
if (*(int *)(param_1 + 0x14) == 0) {
|
|
pcVar5 = (char *)0x0;
|
|
}
|
|
else {
|
|
pcVar5 = (char *)(*(int *)(param_1 + 0x14) - *(int *)(param_1 + 0x10));
|
|
}
|
|
if (pcVar5 == (char *)0x0) {
|
|
if (*(uint *)(param_1 + 0x20) < *(uint *)(param_1 + 0x24)) {
|
|
iVar6 = *(int *)(param_1 + 0x24) - *(int *)(param_1 + 0x20);
|
|
}
|
|
else {
|
|
iVar6 = 0;
|
|
}
|
|
if (iVar6 != 0) {
|
|
if (*(uint *)(param_1 + 0x20) < *(uint *)(param_1 + 0x24)) {
|
|
iVar6 = *(int *)(param_1 + 0x24) - *(int *)(param_1 + 0x20);
|
|
}
|
|
else {
|
|
iVar6 = 0;
|
|
}
|
|
DVar4 = thunk_FUN_004d9334(*(uint *)(param_1 + 0x28),-iVar6,1);
|
|
*(DWORD *)(param_1 + 0x32) = DVar4;
|
|
FUN_004dc564(param_1,*(uint *)(param_1 + 0x1c),*(uint *)(param_1 + 0x20),
|
|
*(uint *)(param_1 + 0x20));
|
|
FUN_004dc598(param_1,*(uint *)(param_1 + 0x20),*(uint *)(param_1 + 0x20));
|
|
if (*(int *)(param_1 + 0x32) == -1) {
|
|
return 0xffffffff;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
pcVar3 = thunk_FUN_004d8b14(*(uint *)(param_1 + 0x28),*(char **)(param_1 + 0x10),pcVar5);
|
|
if (pcVar5 != pcVar3) {
|
|
return 0xffffffff;
|
|
}
|
|
iVar6 = 4;
|
|
if (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) < 9) {
|
|
iVar6 = 1;
|
|
}
|
|
uVar1 = *(uint *)(param_1 + 8);
|
|
FUN_004dc598(param_1,iVar6 + uVar1,(*(int *)(param_1 + 0xc) - uVar1) + uVar1);
|
|
FUN_004dc564(param_1,uVar1,iVar6 + uVar1,iVar6 + uVar1);
|
|
}
|
|
uVar2 = 0;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004da300 file=? name=FUN_004da300 */
|
|
|
|
uint __cdecl FUN_004da300(int *param_1)
|
|
|
|
{
|
|
char *pcVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
char *pcVar4;
|
|
uint local_8;
|
|
|
|
if (((short)param_1[0xc] == 0) || ((param_1[0xb] & 3U) == 2)) {
|
|
local_8 = 0xffffffff;
|
|
}
|
|
else {
|
|
if ((uint)param_1[8] < (uint)param_1[9]) {
|
|
iVar3 = param_1[9] - param_1[8];
|
|
}
|
|
else {
|
|
iVar3 = 0;
|
|
}
|
|
if (iVar3 == 0) {
|
|
if ((*(short *)((int)param_1 + 6) == 0) && (param_1[2] != 0)) {
|
|
iVar3 = (**(code **)(*param_1 + 0x24))(param_1);
|
|
if (iVar3 != 0) {
|
|
return 0xffffffff;
|
|
}
|
|
iVar3 = 4;
|
|
if (param_1[3] - param_1[2] < 9) {
|
|
iVar3 = 1;
|
|
}
|
|
uVar2 = param_1[2];
|
|
pcVar4 = thunk_FUN_004d892c(param_1[10],(char *)(uVar2 + iVar3),
|
|
(char *)((param_1[3] - uVar2) - iVar3));
|
|
if (pcVar4 == (char *)0xffffffff) {
|
|
return 0xffffffff;
|
|
}
|
|
FUN_004dc564((int)param_1,uVar2,uVar2 + iVar3,(uint)(pcVar4 + uVar2 + iVar3));
|
|
FUN_004dc598((int)param_1,iVar3 + uVar2,uVar2 + iVar3);
|
|
if (pcVar4 != (char *)0x0) {
|
|
local_8 = (uint)*(byte *)param_1[8];
|
|
}
|
|
}
|
|
else {
|
|
pcVar1 = (char *)((int)param_1 + 0x3a);
|
|
pcVar4 = thunk_FUN_004d892c(param_1[10],pcVar1,(char *)0x1);
|
|
if (pcVar4 == (char *)0xffffffff) {
|
|
local_8 = 0xffffffff;
|
|
FUN_004dc564((int)param_1,0,0,0);
|
|
}
|
|
else {
|
|
local_8 = (uint)*(byte *)((int)param_1 + 0x3a);
|
|
FUN_004dc564((int)param_1,(uint)pcVar1,(uint)pcVar1,(int)param_1 + 0x3b);
|
|
}
|
|
}
|
|
if (pcVar4 == (char *)0x0) {
|
|
local_8 = 0xffffffff;
|
|
}
|
|
}
|
|
else {
|
|
local_8 = (uint)*(byte *)param_1[8];
|
|
}
|
|
}
|
|
return local_8;
|
|
}
|
|
|
|
|
|
|
|
/* @004da44c file=? name=FUN_004da44c */
|
|
|
|
void __cdecl FUN_004da44c(int *param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
|
|
piVar1 = FUN_004d9cc4(param_1 + 2);
|
|
if (piVar1 != (int *)0x0) {
|
|
FUN_004dc680(*param_1,0);
|
|
return;
|
|
}
|
|
FUN_004dc80c(*param_1,2);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004da484 file=? name=FUN_004da484 */
|
|
|
|
int * __cdecl FUN_004da484(int *param_1,short param_2)
|
|
|
|
{
|
|
if (param_2 == 0) {
|
|
*param_1 = (int)(param_1 + 0x11);
|
|
FUN_004dc6bc(param_1 + 0x11);
|
|
}
|
|
param_1[1] = (int)&PTR_FUN_00520550;
|
|
*(undefined ***)*param_1 = &PTR_LAB_0052055c;
|
|
FUN_004d9d34(param_1 + 2);
|
|
FUN_004dc738(*param_1,param_1 + 2);
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004da538 file=? name=FUN_004da538 */
|
|
|
|
int * __cdecl FUN_004da538(int *param_1,short param_2,LPCSTR param_3,uint param_4,uint param_5)
|
|
|
|
{
|
|
if (param_2 == 0) {
|
|
*param_1 = (int)(param_1 + 0x11);
|
|
FUN_004dc6bc(param_1 + 0x11);
|
|
}
|
|
param_1[1] = (int)&PTR_FUN_00520550;
|
|
*(undefined ***)*param_1 = &PTR_LAB_0052055c;
|
|
FUN_004d9d34(param_1 + 2);
|
|
FUN_004dc738(*param_1,param_1 + 2);
|
|
FUN_004da5f8(param_1,param_3,param_4,param_5);
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004da59c file=? name=FUN_004da59c */
|
|
|
|
void __cdecl FUN_004da59c(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_00520550;
|
|
*(undefined ***)*param_1 = &PTR_LAB_0052055c;
|
|
FUN_004d9e28(param_1 + 2,2);
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8(param_1 + 0x11,0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004da5f8 file=? name=FUN_004da5f8 */
|
|
|
|
void __cdecl FUN_004da5f8(int *param_1,LPCSTR param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if ((param_3 & 8) == 0) {
|
|
if ((param_3 & 0xf) == 2) {
|
|
param_3 = param_3 | 0x10;
|
|
}
|
|
}
|
|
else {
|
|
param_3 = param_3 | 2;
|
|
}
|
|
if ((short)param_1[0xe] == 0) {
|
|
iVar1 = FUN_004d9f60((int)(param_1 + 2),param_2,param_3,param_4);
|
|
if (iVar1 == 0) {
|
|
FUN_004dc680(*param_1,4);
|
|
}
|
|
else {
|
|
FUN_004dc680(*param_1,0);
|
|
}
|
|
}
|
|
else {
|
|
FUN_004dc680(*param_1,2);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004da66c file=? name=FUN_004da66c */
|
|
|
|
int * __cdecl FUN_004da66c(int *param_1,short param_2,LPCSTR param_3,uint param_4,uint param_5)
|
|
|
|
{
|
|
int *piVar1;
|
|
|
|
if (param_2 == 0) {
|
|
piVar1 = param_1 + 0x14;
|
|
*param_1 = (int)piVar1;
|
|
param_1[0x11] = (int)piVar1;
|
|
FUN_004dc6bc(piVar1);
|
|
}
|
|
FUN_004da538(param_1,1,param_3,param_4 | 1,param_5);
|
|
FUN_004daa7c(param_1 + 0x11,1);
|
|
param_1[1] = (int)&PTR_FUN_0052056c;
|
|
param_1[0x12] = (int)&PTR_LAB_00520578;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520584;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004da754 file=? name=FUN_004da754 */
|
|
|
|
void __cdecl FUN_004da754(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_0052056c;
|
|
param_1[0x12] = (int)&PTR_LAB_00520578;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520584;
|
|
FUN_004dabf8(param_1 + 0x11,0);
|
|
FUN_004da59c(param_1,0);
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8(param_1 + 0x14,0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004da7c0 file=? name=FUN_004da7c0 */
|
|
|
|
int * __cdecl FUN_004da7c0(int *param_1,short param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
|
|
if (param_2 == 0) {
|
|
piVar1 = param_1 + 0x16;
|
|
*param_1 = (int)piVar1;
|
|
param_1[0x11] = (int)piVar1;
|
|
param_1[0x14] = (int)piVar1;
|
|
FUN_004dc6bc(piVar1);
|
|
}
|
|
FUN_004da484(param_1,1);
|
|
FUN_004da988(param_1 + 0x11,1);
|
|
param_1[1] = (int)&PTR_FUN_00520594;
|
|
param_1[0x12] = (int)&PTR_LAB_005205a0;
|
|
param_1[0x15] = (int)&PTR_LAB_005205ac;
|
|
*(undefined ***)*param_1 = &PTR_LAB_005205b8;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004da914 file=? name=FUN_004da914 */
|
|
|
|
void __cdecl FUN_004da914(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_00520594;
|
|
param_1[0x12] = (int)&PTR_LAB_005205a0;
|
|
param_1[0x15] = (int)&PTR_LAB_005205ac;
|
|
*(undefined ***)*param_1 = &PTR_LAB_005205b8;
|
|
FUN_004da9f4(param_1 + 0x11,0);
|
|
FUN_004da59c(param_1,0);
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8(param_1 + 0x16,0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004da988 file=? name=FUN_004da988 */
|
|
|
|
undefined4 * __cdecl FUN_004da988(undefined4 *param_1,short param_2)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
if (param_2 == 0) {
|
|
puVar1 = param_1 + 5;
|
|
*param_1 = puVar1;
|
|
param_1[3] = puVar1;
|
|
FUN_004dc6bc(puVar1);
|
|
}
|
|
FUN_004daa7c(param_1,1);
|
|
FUN_004db4b0(param_1 + 3,1);
|
|
param_1[1] = &PTR_FUN_005205c8;
|
|
param_1[4] = &PTR_LAB_005205d4;
|
|
*(undefined ***)*param_1 = &PTR_LAB_005205e0;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004da9f4 file=? name=FUN_004da9f4 */
|
|
|
|
void __cdecl FUN_004da9f4(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_005205c8;
|
|
param_1[4] = (int)&PTR_LAB_005205d4;
|
|
*(undefined ***)*param_1 = &PTR_LAB_005205e0;
|
|
FUN_004db580(param_1 + 3,0);
|
|
FUN_004dabf8(param_1,0);
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8(param_1 + 5,0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004daa60 file=? name=FUN_004daa60 */
|
|
|
|
int * __cdecl FUN_004daa60(int *param_1,undefined4 param_2)
|
|
|
|
{
|
|
FUN_004dc738(*param_1,param_2);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004daa7c file=? name=FUN_004daa7c */
|
|
|
|
undefined4 * __cdecl FUN_004daa7c(undefined4 *param_1,short param_2)
|
|
|
|
{
|
|
if (param_2 == 0) {
|
|
*param_1 = param_1 + 3;
|
|
FUN_004dc6bc(param_1 + 3);
|
|
}
|
|
param_1[1] = &PTR_FUN_005205f0;
|
|
*(undefined ***)*param_1 = &PTR_LAB_005205fc;
|
|
param_1[2] = 0;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004daac0 file=? name=FUN_004daac0 */
|
|
|
|
undefined4 * __cdecl FUN_004daac0(undefined4 *param_1,short param_2)
|
|
|
|
{
|
|
if (param_2 == 0) {
|
|
*param_1 = param_1 + 3;
|
|
FUN_004dc6bc(param_1 + 3);
|
|
}
|
|
FUN_004daa7c(param_1,1);
|
|
param_1[1] = &PTR_FUN_0052060c;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520618;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dab0c file=? name=FUN_004dab0c */
|
|
|
|
uint __cdecl FUN_004dab0c(int *param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
byte *pbVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
|
|
piVar1 = *(int **)(*param_1 + 4);
|
|
if ((uint)piVar1[9] <= (uint)piVar1[8]) {
|
|
iVar3 = (**(code **)(*piVar1 + 0xc))(piVar1);
|
|
if (iVar3 == -1) {
|
|
uVar4 = 0xffffffff;
|
|
goto LAB_004dab3f;
|
|
}
|
|
}
|
|
pbVar2 = *(byte **)(*(int *)(*param_1 + 4) + 0x20);
|
|
piVar1 = (int *)(*(int *)(*param_1 + 4) + 0x20);
|
|
*piVar1 = *piVar1 + 1;
|
|
uVar4 = (uint)*pbVar2;
|
|
LAB_004dab3f:
|
|
if (uVar4 == 0xffffffff) {
|
|
FUN_004dc80c(*param_1,3);
|
|
}
|
|
else {
|
|
param_1[2] = param_1[2] + 1;
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
/* @004dab60 file=? name=FUN_004dab60 */
|
|
|
|
bool __cdecl FUN_004dab60(int *param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
param_1[2] = 0;
|
|
if (*(int *)(*param_1 + 0xc) != 0) {
|
|
FUN_004dc80c(*param_1,2);
|
|
return false;
|
|
}
|
|
if (*(int *)(*param_1 + 8) != 0) {
|
|
if (param_2 != 0) {
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x20) < *(uint *)(*(int *)(*param_1 + 4) + 0x24)) {
|
|
iVar1 = *(int *)(*(int *)(*param_1 + 4) + 0x24) - *(int *)(*(int *)(*param_1 + 4) + 0x20);
|
|
}
|
|
else {
|
|
iVar1 = 0;
|
|
}
|
|
if (param_2 <= iVar1) goto LAB_004dabbf;
|
|
}
|
|
FUN_004db6b4(*(int **)(*param_1 + 8));
|
|
}
|
|
LAB_004dabbf:
|
|
if ((param_2 == 0) && ((*(byte *)(*param_1 + 0x11) & 1) != 0)) {
|
|
FUN_004dac9c(param_1);
|
|
if (*(int *)(*param_1 + 0xc) != 0) {
|
|
FUN_004dc80c(*param_1,2);
|
|
}
|
|
}
|
|
return *(int *)(*param_1 + 0xc) == 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004dabf8 file=? name=FUN_004dabf8 */
|
|
|
|
void __cdecl FUN_004dabf8(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_005205f0;
|
|
*(undefined ***)*param_1 = &PTR_LAB_005205fc;
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8(param_1 + 3,0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dac44 file=? name=FUN_004dac44 */
|
|
|
|
void __cdecl FUN_004dac44(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_0052060c;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520618;
|
|
FUN_004dabf8(param_1,0);
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8(param_1 + 3,0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dac9c file=? name=FUN_004dac9c */
|
|
|
|
void __cdecl FUN_004dac9c(int *param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
uint uVar2;
|
|
|
|
while( true ) {
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x20) < *(uint *)(*(int *)(*param_1 + 4) + 0x24)) {
|
|
uVar2 = (uint)**(byte **)(*(int *)(*param_1 + 4) + 0x20);
|
|
}
|
|
else {
|
|
uVar2 = (**(code **)(**(int **)(*param_1 + 4) + 0xc))(*(undefined4 *)(*param_1 + 4));
|
|
}
|
|
if (((&DAT_005207dd)[uVar2] & 1) == 0) break;
|
|
piVar1 = *(int **)(*param_1 + 4);
|
|
if ((uint)piVar1[8] < (uint)piVar1[9]) {
|
|
piVar1[8] = piVar1[8] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0xc))(piVar1);
|
|
}
|
|
param_1[2] = param_1[2] + 1;
|
|
}
|
|
if (uVar2 == 0xffffffff) {
|
|
FUN_004dc80c(*param_1,1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dad10 file=? name=FUN_004dad10 */
|
|
|
|
int * __cdecl FUN_004dad10(int *param_1,undefined1 *param_2,int param_3,byte param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
bool bVar2;
|
|
undefined3 extraout_var;
|
|
uint uVar3;
|
|
undefined1 *puVar4;
|
|
|
|
bVar2 = FUN_004dab60(param_1,1);
|
|
puVar4 = param_2;
|
|
if (CONCAT31(extraout_var,bVar2) != 0) {
|
|
uVar3 = 0;
|
|
while (param_3 = param_3 + -1, 0 < param_3) {
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x20) < *(uint *)(*(int *)(*param_1 + 4) + 0x24)) {
|
|
uVar3 = (uint)**(byte **)(*(int *)(*param_1 + 4) + 0x20);
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(**(int **)(*param_1 + 4) + 0xc))(*(undefined4 *)(*param_1 + 4));
|
|
}
|
|
if (uVar3 == 0xffffffff) break;
|
|
param_1[2] = param_1[2] + 1;
|
|
piVar1 = *(int **)(*param_1 + 4);
|
|
if ((uint)piVar1[8] < (uint)piVar1[9]) {
|
|
piVar1[8] = piVar1[8] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0xc))(piVar1);
|
|
}
|
|
if (uVar3 == param_4) break;
|
|
*puVar4 = (char)uVar3;
|
|
puVar4 = puVar4 + 1;
|
|
}
|
|
if (uVar3 == 0xffffffff) {
|
|
uVar3 = 3;
|
|
if (puVar4 != param_2) {
|
|
uVar3 = 1;
|
|
}
|
|
FUN_004dc80c(*param_1,uVar3);
|
|
}
|
|
}
|
|
*puVar4 = 0;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dadcc file=? name=FUN_004dadcc */
|
|
|
|
int * __cdecl FUN_004dadcc(int *param_1,undefined1 *param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
undefined1 *puVar2;
|
|
bool bVar3;
|
|
undefined1 uVar4;
|
|
undefined3 extraout_var;
|
|
int iVar5;
|
|
uint uVar6;
|
|
|
|
bVar3 = FUN_004dab60(param_1,1);
|
|
if (CONCAT31(extraout_var,bVar3) == 0) {
|
|
FUN_004dc80c(*param_1,2);
|
|
return param_1;
|
|
}
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x20) < *(uint *)(*(int *)(*param_1 + 4) + 0x24)) {
|
|
iVar5 = *(int *)(*(int *)(*param_1 + 4) + 0x24) - *(int *)(*(int *)(*param_1 + 4) + 0x20);
|
|
}
|
|
else {
|
|
iVar5 = 0;
|
|
}
|
|
if (iVar5 != 0) {
|
|
param_1[2] = 1;
|
|
piVar1 = *(int **)(*param_1 + 4);
|
|
if (((uint)piVar1[8] < (uint)piVar1[9]) ||
|
|
(iVar5 = (**(code **)(*piVar1 + 0xc))(piVar1), iVar5 != -1)) {
|
|
puVar2 = *(undefined1 **)(*(int *)(*param_1 + 4) + 0x20);
|
|
piVar1 = (int *)(*(int *)(*param_1 + 4) + 0x20);
|
|
*piVar1 = *piVar1 + 1;
|
|
uVar4 = *puVar2;
|
|
}
|
|
else {
|
|
uVar4 = 0xff;
|
|
}
|
|
*param_2 = uVar4;
|
|
return param_1;
|
|
}
|
|
uVar6 = FUN_004dab0c(param_1);
|
|
*param_2 = (char)uVar6;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dae60 file=? name=FUN_004dae60 */
|
|
|
|
int * __cdecl FUN_004dae60(int *param_1,undefined1 *param_2,int param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
bool bVar2;
|
|
undefined3 extraout_var;
|
|
uint uVar3;
|
|
|
|
bVar2 = FUN_004dab60(param_1,1);
|
|
if (CONCAT31(extraout_var,bVar2) != 0) {
|
|
uVar3 = 0;
|
|
while( true ) {
|
|
param_3 = param_3 + -1;
|
|
if (param_3 < 0) break;
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x20) < *(uint *)(*(int *)(*param_1 + 4) + 0x24)) {
|
|
uVar3 = (uint)**(byte **)(*(int *)(*param_1 + 4) + 0x20);
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(**(int **)(*param_1 + 4) + 0xc))(*(undefined4 *)(*param_1 + 4));
|
|
}
|
|
if (uVar3 == 0xffffffff) break;
|
|
*param_2 = (char)uVar3;
|
|
param_2 = param_2 + 1;
|
|
param_1[2] = param_1[2] + 1;
|
|
piVar1 = *(int **)(*param_1 + 4);
|
|
if ((uint)piVar1[8] < (uint)piVar1[9]) {
|
|
piVar1[8] = piVar1[8] + 1;
|
|
}
|
|
else {
|
|
(**(code **)(*piVar1 + 0xc))(piVar1);
|
|
}
|
|
}
|
|
if (uVar3 == 0xffffffff) {
|
|
uVar3 = 3;
|
|
if (param_3 < 0) {
|
|
uVar3 = 1;
|
|
}
|
|
FUN_004dc80c(*param_1,uVar3);
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004daf00 file=? name=FUN_004daf00 */
|
|
|
|
int * __cdecl FUN_004daf00(int *param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (((*(byte *)(*param_1 + 0xc) & 0x84) == 0) &&
|
|
(iVar1 = (**(code **)(**(int **)(*param_1 + 4) + 0x1c))
|
|
(*(int **)(*param_1 + 4),param_2,param_3,1), iVar1 != -1)) {
|
|
return param_1;
|
|
}
|
|
FUN_004dc80c(*param_1,2);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004daf40 file=? name=FUN_004daf40 */
|
|
|
|
int * __cdecl FUN_004daf40(int *param_1,undefined4 param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (((*(byte *)(*param_1 + 0xc) & 0x84) == 0) &&
|
|
(iVar1 = (**(code **)(**(int **)(*param_1 + 4) + 0x20))(*(int **)(*param_1 + 4),param_2,1),
|
|
iVar1 != -1)) {
|
|
return param_1;
|
|
}
|
|
FUN_004dc80c(*param_1,2);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004daf7c file=? name=FUN_004daf7c */
|
|
|
|
int __cdecl FUN_004daf7c(int *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = -1;
|
|
if (((*(byte *)(*param_1 + 0xc) & 0x84) == 0) &&
|
|
(iVar1 = (**(code **)(**(int **)(*param_1 + 4) + 0x1c))(*(undefined4 *)(*param_1 + 4),0,1,1),
|
|
iVar1 != -1)) {
|
|
return iVar1;
|
|
}
|
|
FUN_004dc80c(*param_1,2);
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dafd8 file=? name=FUN_004dafd8 */
|
|
|
|
void __cdecl FUN_004dafd8(undefined4 *param_1,undefined4 param_2)
|
|
|
|
{
|
|
*param_1 = &LAB_004dafc4;
|
|
param_1[1] = param_2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dafec file=? name=FUN_004dafec */
|
|
|
|
void __cdecl FUN_004dafec(int param_1,undefined4 param_2)
|
|
|
|
{
|
|
*(undefined4 *)(param_1 + 0x1c) = param_2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004db000 file=? name=FUN_004db000 */
|
|
|
|
void __cdecl FUN_004db000(undefined4 *param_1,undefined4 param_2)
|
|
|
|
{
|
|
*param_1 = FUN_004dafec;
|
|
param_1[1] = param_2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004db014 file=? name=FUN_004db014 */
|
|
|
|
int * __cdecl FUN_004db014(int *param_1,short param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
|
|
if (param_2 == 0) {
|
|
piVar1 = param_1 + 0x13;
|
|
*param_1 = (int)piVar1;
|
|
param_1[0x11] = (int)piVar1;
|
|
FUN_004dc6bc(piVar1);
|
|
}
|
|
FUN_004da484(param_1,1);
|
|
FUN_004db4b0(param_1 + 0x11,1);
|
|
param_1[1] = (int)&PTR_FUN_00520628;
|
|
param_1[0x12] = (int)&PTR_LAB_00520634;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520640;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db0ec file=? name=FUN_004db0ec */
|
|
|
|
void __cdecl FUN_004db0ec(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_00520628;
|
|
param_1[0x12] = (int)&PTR_LAB_00520634;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520640;
|
|
FUN_004db580(param_1 + 0x11,0);
|
|
FUN_004da59c(param_1,0);
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8(param_1 + 0x13,0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004db158 file=? name=FUN_004db158 */
|
|
|
|
int * __cdecl FUN_004db158(int *param_1,short param_2,char *param_3,int param_4,byte param_5)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
|
|
if (param_2 == 0) {
|
|
puVar1 = (undefined4 *)((int)param_1 + 0x46);
|
|
*param_1 = (int)puVar1;
|
|
*(undefined4 **)((int)param_1 + 0x3e) = puVar1;
|
|
FUN_004dc6bc(puVar1);
|
|
}
|
|
FUN_004dc260(param_1,1,param_3,param_4,param_3);
|
|
FUN_004db4f0((int *)((int)param_1 + 0x3e),1,param_1 + 2);
|
|
param_1[1] = (int)&PTR_FUN_00520650;
|
|
*(undefined ***)((int)param_1 + 0x42) = &PTR_LAB_0052065c;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520668;
|
|
if ((param_5 & 0xc) != 0) {
|
|
uVar4 = 2;
|
|
uVar3 = 0;
|
|
iVar2 = FUN_004d4a78(param_3);
|
|
(**(code **)(param_1[2] + 0x1c))(param_1 + 2,iVar2,uVar3,uVar4);
|
|
}
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db1e0 file=? name=FUN_004db1e0 */
|
|
|
|
int * __cdecl FUN_004db1e0(int *param_1,short param_2,char *param_3,int param_4,byte param_5)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
|
|
if (param_2 == 0) {
|
|
puVar1 = (undefined4 *)((int)param_1 + 0x46);
|
|
*param_1 = (int)puVar1;
|
|
*(undefined4 **)((int)param_1 + 0x3e) = puVar1;
|
|
FUN_004dc6bc(puVar1);
|
|
}
|
|
FUN_004dc260(param_1,1,param_3,param_4,param_3);
|
|
FUN_004db4f0((int *)((int)param_1 + 0x3e),1,param_1 + 2);
|
|
param_1[1] = (int)&PTR_FUN_00520650;
|
|
*(undefined ***)((int)param_1 + 0x42) = &PTR_LAB_0052065c;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520668;
|
|
if ((param_5 & 0xc) != 0) {
|
|
uVar4 = 2;
|
|
uVar3 = 0;
|
|
iVar2 = FUN_004d4a78(param_3);
|
|
(**(code **)(param_1[2] + 0x1c))(param_1 + 2,iVar2,uVar3,uVar4);
|
|
}
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db268 file=? name=FUN_004db268 */
|
|
|
|
int * __cdecl FUN_004db268(int *param_1,short param_2,char *param_3,int param_4,byte param_5)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
int iVar2;
|
|
undefined4 uVar3;
|
|
undefined4 uVar4;
|
|
|
|
if (param_2 == 0) {
|
|
puVar1 = (undefined4 *)((int)param_1 + 0x46);
|
|
*param_1 = (int)puVar1;
|
|
*(undefined4 **)((int)param_1 + 0x3e) = puVar1;
|
|
FUN_004dc6bc(puVar1);
|
|
}
|
|
FUN_004dc260(param_1,1,param_3,param_4,param_3);
|
|
FUN_004db4f0((int *)((int)param_1 + 0x3e),1,param_1 + 2);
|
|
param_1[1] = (int)&PTR_FUN_00520650;
|
|
*(undefined ***)((int)param_1 + 0x42) = &PTR_LAB_0052065c;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520668;
|
|
if ((param_5 & 0xc) != 0) {
|
|
uVar4 = 2;
|
|
uVar3 = 0;
|
|
iVar2 = FUN_004d4a78(param_3);
|
|
(**(code **)(param_1[2] + 0x1c))(param_1 + 2,iVar2,uVar3,uVar4);
|
|
}
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db428 file=? name=FUN_004db428 */
|
|
|
|
void __cdecl FUN_004db428(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_00520650;
|
|
*(undefined ***)((int)param_1 + 0x42) = &PTR_LAB_0052065c;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520668;
|
|
FUN_004db580((int *)((int)param_1 + 0x3e),0);
|
|
FUN_004dc2c8(param_1,0);
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8((int *)((int)param_1 + 0x46),0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004db494 file=? name=FUN_004db494 */
|
|
|
|
int * __cdecl FUN_004db494(int *param_1,undefined4 param_2)
|
|
|
|
{
|
|
FUN_004dc738(*param_1,param_2);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db4b0 file=? name=FUN_004db4b0 */
|
|
|
|
undefined4 * __cdecl FUN_004db4b0(undefined4 *param_1,short param_2)
|
|
|
|
{
|
|
if (param_2 == 0) {
|
|
*param_1 = param_1 + 2;
|
|
FUN_004dc6bc(param_1 + 2);
|
|
}
|
|
param_1[1] = &PTR_FUN_00520678;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520684;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db4f0 file=? name=FUN_004db4f0 */
|
|
|
|
int * __cdecl FUN_004db4f0(int *param_1,short param_2,undefined4 param_3)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
if (param_2 == 0) {
|
|
*param_1 = (int)(param_1 + 2);
|
|
FUN_004dc6bc(param_1 + 2);
|
|
}
|
|
param_1[1] = (int)&PTR_FUN_00520678;
|
|
puVar1 = (undefined4 *)*param_1;
|
|
*puVar1 = &PTR_LAB_00520684;
|
|
FUN_004dc738((int)puVar1,param_3);
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db534 file=? name=FUN_004db534 */
|
|
|
|
undefined4 * __cdecl FUN_004db534(undefined4 *param_1,short param_2)
|
|
|
|
{
|
|
if (param_2 == 0) {
|
|
*param_1 = param_1 + 2;
|
|
FUN_004dc6bc(param_1 + 2);
|
|
}
|
|
FUN_004db4b0(param_1,1);
|
|
param_1[1] = &PTR_FUN_00520694;
|
|
*(undefined ***)*param_1 = &PTR_LAB_005206a0;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db580 file=? name=FUN_004db580 */
|
|
|
|
void __cdecl FUN_004db580(int *param_1,uint param_2)
|
|
|
|
{
|
|
undefined4 *puVar1;
|
|
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_00520678;
|
|
puVar1 = (undefined4 *)*param_1;
|
|
*puVar1 = &PTR_LAB_00520684;
|
|
if (puVar1[1] != 0) {
|
|
FUN_004db6b4(param_1);
|
|
}
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8(param_1 + 2,0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004db5dc file=? name=FUN_004db5dc */
|
|
|
|
void __cdecl FUN_004db5dc(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_00520694;
|
|
*(undefined ***)*param_1 = &PTR_LAB_005206a0;
|
|
FUN_004db580(param_1,0);
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8(param_1 + 2,0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004db634 file=? name=FUN_004db634 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
int * __cdecl FUN_004db634(int *param_1,float10 param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char local_40 [60];
|
|
|
|
pcVar1 = (char *)0x0;
|
|
if (((float10)_DAT_004db6b0 <= param_2) && ((*(byte *)(*param_1 + 0x19) & 4) != 0)) {
|
|
pcVar1 = &DAT_005206a4;
|
|
}
|
|
thunk_FUN_004dd24c();
|
|
FUN_004dbb24(param_1,local_40,pcVar1);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db6b4 file=? name=FUN_004db6b4 */
|
|
|
|
int * __cdecl FUN_004db6b4(int *param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = (**(code **)(**(int **)(*param_1 + 4) + 0x24))(*(int **)(*param_1 + 4));
|
|
if (iVar1 == -1) {
|
|
FUN_004dc80c(*param_1,4);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db6e0 file=? name=FUN_004db6e0 */
|
|
|
|
char * __cdecl FUN_004db6e0(char *param_1,uint param_2)
|
|
|
|
{
|
|
*param_1 = '\0';
|
|
do {
|
|
param_1 = param_1 + -1;
|
|
*param_1 = (char)((ulonglong)param_2 % 10) + '0';
|
|
param_2 = param_2 / 10;
|
|
} while (param_2 != 0);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db718 file=? name=FUN_004db718 */
|
|
|
|
char * __cdecl FUN_004db718(char *param_1,uint param_2)
|
|
|
|
{
|
|
*param_1 = '\0';
|
|
do {
|
|
param_1 = param_1 + -1;
|
|
*param_1 = ((byte)param_2 & 7) + 0x30;
|
|
param_2 = param_2 / 8;
|
|
} while (param_2 != 0);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db748 file=? name=FUN_004db748 */
|
|
|
|
undefined1 * __cdecl FUN_004db748(undefined1 *param_1,uint param_2,int param_3)
|
|
|
|
{
|
|
char *pcVar1;
|
|
|
|
if (param_3 == 0) {
|
|
pcVar1 = s_0123456789abcdef0123456789ABCDEF_005206a8;
|
|
}
|
|
else {
|
|
pcVar1 = s_0123456789abcdef0123456789ABCDEF_005206a8 + 0x10;
|
|
}
|
|
*param_1 = 0;
|
|
do {
|
|
param_1 = param_1 + -1;
|
|
*param_1 = pcVar1[param_2 & 0xf];
|
|
param_2 = param_2 / 0x10;
|
|
} while (param_2 != 0);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db78c file=? name=FUN_004db78c */
|
|
|
|
int * __cdecl FUN_004db78c(int *param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
char *pcVar2;
|
|
char *pcVar3;
|
|
char local_d;
|
|
uint local_c;
|
|
int local_8;
|
|
|
|
pcVar3 = (char *)0x0;
|
|
if ((*(byte *)(*param_1 + 0x18) & 0x40) == 0) {
|
|
iVar1 = 8;
|
|
if ((*(byte *)(*param_1 + 0x18) & 0x20) == 0) {
|
|
iVar1 = 10;
|
|
}
|
|
}
|
|
else {
|
|
iVar1 = 0x10;
|
|
}
|
|
if ((iVar1 == 10) && ((int)param_2 < 0)) {
|
|
local_8 = 1;
|
|
}
|
|
else {
|
|
local_8 = 0;
|
|
}
|
|
if (local_8 != 0) {
|
|
param_2 = -param_2;
|
|
}
|
|
if (iVar1 == 10) {
|
|
pcVar2 = FUN_004db6e0(&local_d,param_2);
|
|
if (param_2 != 0) {
|
|
if (local_8 == 0) {
|
|
if ((*(byte *)(*param_1 + 0x19) & 4) != 0) {
|
|
pcVar3 = &DAT_005206ca;
|
|
}
|
|
}
|
|
else {
|
|
pcVar3 = s_0123456789abcdef0123456789ABCDEF_005206a8 + 0x20;
|
|
}
|
|
}
|
|
}
|
|
else if (iVar1 == 0x10) {
|
|
local_c = (uint)((*(byte *)(*param_1 + 0x19) & 2) != 0);
|
|
pcVar2 = FUN_004db748(&local_d,param_2,local_c);
|
|
if ((*(byte *)(*param_1 + 0x18) & 0x80) != 0) {
|
|
if (local_c == 0) {
|
|
pcVar3 = &DAT_005206cf;
|
|
}
|
|
else {
|
|
pcVar3 = &DAT_005206cc;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
pcVar2 = FUN_004db718(&local_d,param_2);
|
|
if ((*(byte *)(*param_1 + 0x18) & 0x80) != 0) {
|
|
pcVar3 = &DAT_005206d2;
|
|
}
|
|
}
|
|
FUN_004dbb24(param_1,pcVar2,pcVar3);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db880 file=? name=FUN_004db880 */
|
|
|
|
int * __cdecl FUN_004db880(int *param_1,uint param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
char *pcVar2;
|
|
char local_9;
|
|
uint local_8;
|
|
|
|
pcVar2 = (char *)0x0;
|
|
if ((*(uint *)(*param_1 + 0x18) & 0x40) == 0) {
|
|
if ((*(byte *)(*param_1 + 0x18) & 0x20) == 0) {
|
|
pcVar1 = FUN_004db6e0(&local_9,param_2);
|
|
if ((param_2 != 0) && ((*(byte *)(*param_1 + 0x19) & 4) != 0)) {
|
|
pcVar2 = &DAT_005206dc;
|
|
}
|
|
}
|
|
else {
|
|
pcVar1 = FUN_004db718(&local_9,param_2);
|
|
if ((*(byte *)(*param_1 + 0x18) & 0x80) != 0) {
|
|
pcVar2 = &DAT_005206da;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
local_8 = (uint)((*(uint *)(*param_1 + 0x18) & 0x200) != 0);
|
|
pcVar1 = FUN_004db748(&local_9,param_2,local_8);
|
|
if ((*(byte *)(*param_1 + 0x18) & 0x80) != 0) {
|
|
if (local_8 == 0) {
|
|
pcVar2 = &DAT_005206d7;
|
|
}
|
|
else {
|
|
pcVar2 = &DAT_005206d4;
|
|
}
|
|
}
|
|
}
|
|
FUN_004dbb24(param_1,pcVar1,pcVar2);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004db92c file=? name=FUN_004db92c */
|
|
|
|
int * __cdecl FUN_004db92c(int *param_1,byte param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
byte *pbVar2;
|
|
undefined1 *puVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
int iVar6;
|
|
|
|
if (*(int *)(*param_1 + 0x14) == 0) {
|
|
iVar4 = 1;
|
|
}
|
|
else {
|
|
iVar4 = FUN_004dbabc(param_1);
|
|
}
|
|
if (iVar4 != 0) {
|
|
iVar4 = *param_1;
|
|
iVar6 = *(int *)(iVar4 + 0x20);
|
|
*(undefined4 *)(iVar4 + 0x20) = 0;
|
|
iVar6 = iVar6 + -1;
|
|
if ((*(byte *)(iVar4 + 0x18) & 10) == 0) {
|
|
do {
|
|
iVar6 = iVar6 + -1;
|
|
if (iVar6 < 0) goto LAB_004db9c5;
|
|
uVar5 = *(uint *)(*param_1 + 0x24);
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x14) < *(uint *)(*(int *)(*param_1 + 4) + 0x18)) {
|
|
puVar3 = *(undefined1 **)(*(int *)(*param_1 + 4) + 0x14);
|
|
piVar1 = (int *)(*(int *)(*param_1 + 4) + 0x14);
|
|
*piVar1 = *piVar1 + 1;
|
|
*puVar3 = (char)uVar5;
|
|
uVar5 = uVar5 & 0xff;
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(**(int **)(*param_1 + 4) + 0x18))
|
|
(*(undefined4 *)(*param_1 + 4),uVar5 & 0xff);
|
|
}
|
|
} while (uVar5 != 0xffffffff);
|
|
FUN_004dc80c(*param_1,4);
|
|
}
|
|
LAB_004db9c5:
|
|
if ((*(byte *)(*param_1 + 0xc) & 0x86) == 0) {
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x14) < *(uint *)(*(int *)(*param_1 + 4) + 0x18)) {
|
|
pbVar2 = *(byte **)(*(int *)(*param_1 + 4) + 0x14);
|
|
piVar1 = (int *)(*(int *)(*param_1 + 4) + 0x14);
|
|
*piVar1 = *piVar1 + 1;
|
|
*pbVar2 = param_2;
|
|
uVar5 = (uint)param_2;
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(**(int **)(*param_1 + 4) + 0x18))
|
|
(*(undefined4 *)(*param_1 + 4),param_2);
|
|
}
|
|
if (uVar5 == 0xffffffff) {
|
|
FUN_004dc80c(*param_1,4);
|
|
}
|
|
}
|
|
if (((*(byte *)(*param_1 + 0xc) & 0x86) == 0) && ((*(byte *)(*param_1 + 0x18) & 2) != 0)) {
|
|
do {
|
|
iVar6 = iVar6 + -1;
|
|
if (iVar6 < 0) goto LAB_004dba91;
|
|
uVar5 = *(uint *)(*param_1 + 0x24);
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x14) < *(uint *)(*(int *)(*param_1 + 4) + 0x18)) {
|
|
puVar3 = *(undefined1 **)(*(int *)(*param_1 + 4) + 0x14);
|
|
piVar1 = (int *)(*(int *)(*param_1 + 4) + 0x14);
|
|
*piVar1 = *piVar1 + 1;
|
|
*puVar3 = (char)uVar5;
|
|
uVar5 = uVar5 & 0xff;
|
|
}
|
|
else {
|
|
uVar5 = (**(code **)(**(int **)(*param_1 + 4) + 0x18))
|
|
(*(undefined4 *)(*param_1 + 4),uVar5 & 0xff);
|
|
}
|
|
} while (uVar5 != 0xffffffff);
|
|
FUN_004dc80c(*param_1,4);
|
|
}
|
|
}
|
|
LAB_004dba91:
|
|
if ((*(byte *)(*param_1 + 0x19) & 0x60) != 0) {
|
|
FUN_004dbae4(param_1);
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbaa8 file=? name=FUN_004dbaa8 */
|
|
|
|
undefined4 * __cdecl FUN_004dbaa8(undefined4 *param_1,undefined *param_2)
|
|
|
|
{
|
|
(*(code *)param_2)(*param_1);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbabc file=? name=FUN_004dbabc */
|
|
|
|
undefined4 __cdecl FUN_004dbabc(int *param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
|
|
if ((*(byte *)(*param_1 + 0xc) & 0x86) == 0) {
|
|
piVar1 = *(int **)(*param_1 + 8);
|
|
if (piVar1 != (int *)0x0) {
|
|
FUN_004db6b4(piVar1);
|
|
}
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbae4 file=? name=FUN_004dbae4 */
|
|
|
|
void __cdecl FUN_004dbae4(int *param_1)
|
|
|
|
{
|
|
if (((*(byte *)(*param_1 + 0xc) & 0x86) == 0) && ((*(byte *)(*param_1 + 0x19) & 0x20) != 0)) {
|
|
FUN_004db6b4(param_1);
|
|
}
|
|
if ((*(byte *)(*param_1 + 0x19) & 0x40) != 0) {
|
|
FUN_004db6b4(&DAT_00524e20);
|
|
FUN_004db6b4((int *)&DAT_00524eb0);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbb24 file=? name=FUN_004dbb24 */
|
|
|
|
void __cdecl FUN_004dbb24(int *param_1,char *param_2,char *param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
undefined1 *puVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
int iVar7;
|
|
|
|
if (*(int *)(*param_1 + 0x14) == 0) {
|
|
iVar3 = 1;
|
|
}
|
|
else {
|
|
iVar3 = FUN_004dbabc(param_1);
|
|
}
|
|
if (iVar3 != 0) {
|
|
if (param_3 == (char *)0x0) {
|
|
uVar4 = 0;
|
|
}
|
|
else {
|
|
uVar4 = FUN_004d4a78(param_3);
|
|
}
|
|
if (param_2 == (char *)0x0) {
|
|
uVar5 = 0;
|
|
}
|
|
else {
|
|
uVar5 = FUN_004d4a78(param_2);
|
|
}
|
|
iVar3 = *param_1;
|
|
iVar7 = *(int *)(iVar3 + 0x20);
|
|
*(undefined4 *)(iVar3 + 0x20) = 0;
|
|
iVar7 = (iVar7 - uVar4) - uVar5;
|
|
if ((*(byte *)(iVar3 + 0x18) & 10) == 0) {
|
|
do {
|
|
iVar7 = iVar7 + -1;
|
|
if (iVar7 < 0) goto LAB_004dbbf3;
|
|
uVar6 = *(uint *)(*param_1 + 0x24);
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x14) < *(uint *)(*(int *)(*param_1 + 4) + 0x18)) {
|
|
puVar2 = *(undefined1 **)(*(int *)(*param_1 + 4) + 0x14);
|
|
piVar1 = (int *)(*(int *)(*param_1 + 4) + 0x14);
|
|
*piVar1 = *piVar1 + 1;
|
|
*puVar2 = (char)uVar6;
|
|
uVar6 = uVar6 & 0xff;
|
|
}
|
|
else {
|
|
uVar6 = (**(code **)(**(int **)(*param_1 + 4) + 0x18))
|
|
(*(undefined4 *)(*param_1 + 4),uVar6 & 0xff);
|
|
}
|
|
} while (uVar6 != 0xffffffff);
|
|
FUN_004dc80c(*param_1,4);
|
|
}
|
|
LAB_004dbbf3:
|
|
if ((((*(byte *)(*param_1 + 0xc) & 0x86) == 0) && (uVar4 != 0)) &&
|
|
(uVar6 = FUN_004dc5e4(*(int **)(*param_1 + 4),(undefined4 *)param_3,uVar4), uVar6 != uVar4))
|
|
{
|
|
FUN_004dc80c(*param_1,4);
|
|
}
|
|
if (((*(byte *)(*param_1 + 0xc) & 0x86) == 0) && ((*(byte *)(*param_1 + 0x18) & 8) != 0)) {
|
|
do {
|
|
iVar7 = iVar7 + -1;
|
|
if (iVar7 < 0) goto LAB_004dbc94;
|
|
uVar4 = *(uint *)(*param_1 + 0x24);
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x14) < *(uint *)(*(int *)(*param_1 + 4) + 0x18)) {
|
|
puVar2 = *(undefined1 **)(*(int *)(*param_1 + 4) + 0x14);
|
|
piVar1 = (int *)(*(int *)(*param_1 + 4) + 0x14);
|
|
*piVar1 = *piVar1 + 1;
|
|
*puVar2 = (char)uVar4;
|
|
uVar4 = uVar4 & 0xff;
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(**(int **)(*param_1 + 4) + 0x18))
|
|
(*(undefined4 *)(*param_1 + 4),uVar4 & 0xff);
|
|
}
|
|
} while (uVar4 != 0xffffffff);
|
|
FUN_004dc80c(*param_1,4);
|
|
}
|
|
LAB_004dbc94:
|
|
if ((((*(byte *)(*param_1 + 0xc) & 0x86) == 0) && (uVar5 != 0)) &&
|
|
(uVar4 = FUN_004dc5e4(*(int **)(*param_1 + 4),(undefined4 *)param_2,uVar5), uVar4 != uVar5))
|
|
{
|
|
FUN_004dc80c(*param_1,4);
|
|
}
|
|
if (((*(byte *)(*param_1 + 0xc) & 0x86) == 0) && ((*(byte *)(*param_1 + 0x18) & 2) != 0)) {
|
|
do {
|
|
iVar7 = iVar7 + -1;
|
|
if (iVar7 < 0) goto LAB_004dbd35;
|
|
uVar4 = *(uint *)(*param_1 + 0x24);
|
|
if (*(uint *)(*(int *)(*param_1 + 4) + 0x14) < *(uint *)(*(int *)(*param_1 + 4) + 0x18)) {
|
|
puVar2 = *(undefined1 **)(*(int *)(*param_1 + 4) + 0x14);
|
|
piVar1 = (int *)(*(int *)(*param_1 + 4) + 0x14);
|
|
*piVar1 = *piVar1 + 1;
|
|
*puVar2 = (char)uVar4;
|
|
uVar4 = uVar4 & 0xff;
|
|
}
|
|
else {
|
|
uVar4 = (**(code **)(**(int **)(*param_1 + 4) + 0x18))
|
|
(*(undefined4 *)(*param_1 + 4),uVar4 & 0xff);
|
|
}
|
|
} while (uVar4 != 0xffffffff);
|
|
FUN_004dc80c(*param_1,4);
|
|
}
|
|
}
|
|
LAB_004dbd35:
|
|
if ((*(byte *)(*param_1 + 0x19) & 0x60) != 0) {
|
|
FUN_004dbae4(param_1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbd4c file=? name=FUN_004dbd4c */
|
|
|
|
undefined8 __cdecl FUN_004dbd4c(int *param_1,uint param_2)
|
|
|
|
{
|
|
char cVar1;
|
|
undefined1 uVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
undefined4 extraout_EDX;
|
|
|
|
iVar3 = *param_1;
|
|
uVar4 = *(uint *)(iVar3 + 0x18);
|
|
cVar1 = *(char *)(iVar3 + 0x24);
|
|
FUN_004dc7d4(iVar3,200,DAT_0052078c | DAT_00520790 | 0x80);
|
|
iVar3 = *param_1;
|
|
*(undefined4 *)(iVar3 + 0x24) = 0x30;
|
|
*(undefined4 *)(iVar3 + 0x20) = 10;
|
|
FUN_004db880(param_1,param_2);
|
|
FUN_004dc710(*param_1,uVar4);
|
|
uVar2 = *(undefined1 *)(*param_1 + 0x24);
|
|
*(int *)(*param_1 + 0x24) = (int)cVar1;
|
|
return CONCAT44(CONCAT31((int3)((uint)extraout_EDX >> 8),uVar2),param_1);
|
|
}
|
|
|
|
|
|
|
|
/* @004dbdbc file=? name=FUN_004dbdbc */
|
|
|
|
undefined4 * __cdecl FUN_004dbdbc(undefined4 *param_1,char *param_2,int param_3,char *param_4)
|
|
|
|
{
|
|
FUN_004dc35c(param_1);
|
|
*param_1 = &PTR_FUN_005206ec;
|
|
FUN_004dbeb0((int)param_1,param_2,param_3,param_4);
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbdf1 file=? name=FUN_004dbdf1 */
|
|
|
|
void FUN_004dbdf1(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbdf6 file=? name=FUN_004dbdf6 */
|
|
|
|
void FUN_004dbdf6(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbdfc file=? name=FUN_004dbdfc */
|
|
|
|
undefined4 __cdecl FUN_004dbdfc(int param_1)
|
|
|
|
{
|
|
undefined1 *puVar1;
|
|
undefined4 uVar2;
|
|
uint uVar3;
|
|
|
|
if (*(int *)(param_1 + 0x32) == 0) {
|
|
uVar3 = 0x10;
|
|
}
|
|
else {
|
|
uVar3 = *(uint *)(param_1 + 0x32);
|
|
}
|
|
if (*(int *)(param_1 + 0x28) == 0) {
|
|
puVar1 = (undefined1 *)FUN_004022b0(uVar3);
|
|
}
|
|
else {
|
|
puVar1 = (undefined1 *)(**(code **)(param_1 + 0x28))(uVar3);
|
|
}
|
|
if (puVar1 == (undefined1 *)0x0) {
|
|
uVar2 = 0xffffffff;
|
|
}
|
|
else {
|
|
*(undefined4 *)(param_1 + 0x32) = 0;
|
|
FUN_004dc4fc(param_1,(uint)puVar1,(uint)(puVar1 + uVar3),0);
|
|
*puVar1 = 0;
|
|
uVar2 = 1;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbe58 file=? name=FUN_004dbe58 */
|
|
|
|
void __cdecl FUN_004dbe58(int *param_1,byte param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
*param_1 = (int)&PTR_FUN_005206ec;
|
|
if ((*(ushort *)(param_1 + 0xc) & 3) == 1) {
|
|
if (param_1[0xb] == 0) {
|
|
FUN_004022e8((int *)param_1[2]);
|
|
}
|
|
else {
|
|
(*(code *)param_1[0xb])(param_1[2]);
|
|
}
|
|
}
|
|
FUN_004dc48c(param_1,0);
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbeb0 file=? name=FUN_004dbeb0 */
|
|
|
|
void __cdecl FUN_004dbeb0(int param_1,char *param_2,int param_3,char *param_4)
|
|
|
|
{
|
|
*(undefined2 *)(param_1 + 0x30) = 0;
|
|
if (param_3 == 0) {
|
|
param_3 = FUN_004d4a78(param_2);
|
|
}
|
|
else if (param_3 < 0) {
|
|
param_3 = 0x7fffffff;
|
|
*(ushort *)(param_1 + 0x30) = *(ushort *)(param_1 + 0x30) | 4;
|
|
}
|
|
FUN_004dc4fc(param_1,(uint)param_2,(uint)(param_2 + param_3),0);
|
|
if (param_4 == (char *)0x0) {
|
|
FUN_004dc564(param_1,(uint)param_2,(uint)param_2,*(uint *)(param_1 + 0xc));
|
|
}
|
|
else {
|
|
FUN_004dc598(param_1,(uint)param_4,*(uint *)(param_1 + 0xc));
|
|
if (param_2 + param_3 < param_4) {
|
|
param_4 = param_2 + param_3;
|
|
}
|
|
FUN_004dc564(param_1,(uint)param_2,(uint)param_2,(uint)param_4);
|
|
}
|
|
*(undefined4 *)(param_1 + 0x28) = 0;
|
|
*(undefined4 *)(param_1 + 0x2c) = 0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dbf44 file=? name=FUN_004dbf44 */
|
|
|
|
uint __cdecl FUN_004dbf44(int *param_1,byte param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
int iVar3;
|
|
byte *pbVar4;
|
|
undefined4 *puVar5;
|
|
uint uVar6;
|
|
int local_14;
|
|
int local_10;
|
|
int local_c;
|
|
|
|
if ((*(ushort *)(param_1 + 0xc) & 3) == 1) {
|
|
if (param_1[2] == 0) {
|
|
(**(code **)(*param_1 + 0x30))(param_1);
|
|
}
|
|
if (param_1[4] == 0) {
|
|
FUN_004dc598((int)param_1,param_1[2],param_1[3]);
|
|
}
|
|
}
|
|
if (param_1[4] != 0) {
|
|
if (((uint)param_1[6] <= (uint)param_1[5]) && ((*(ushort *)(param_1 + 0xc) & 3) == 1)) {
|
|
piVar1 = (int *)param_1[2];
|
|
uVar6 = param_1[3] - (int)piVar1;
|
|
puVar5 = (undefined4 *)FUN_004022b0(uVar6 + 4);
|
|
if (puVar5 == (undefined4 *)0x0) {
|
|
return 0xffffffff;
|
|
}
|
|
FUN_004d4918(puVar5,piVar1,uVar6);
|
|
iVar2 = param_1[5];
|
|
iVar3 = param_1[8];
|
|
if (iVar3 != 0) {
|
|
local_c = param_1[7] - (int)piVar1;
|
|
local_10 = iVar3 - (int)piVar1;
|
|
local_14 = param_1[9] - (int)piVar1;
|
|
}
|
|
FUN_004dc4fc((int)param_1,(uint)puVar5,(int)puVar5 + uVar6 + 4,0);
|
|
FUN_004dc598((int)param_1,(uint)puVar5,param_1[3]);
|
|
param_1[5] = param_1[5] + (iVar2 - (int)piVar1);
|
|
if (iVar3 != 0) {
|
|
FUN_004dc564((int)param_1,(int)puVar5 + local_c,local_10 + (int)puVar5,
|
|
local_14 + (int)puVar5);
|
|
}
|
|
FUN_004022e8(piVar1);
|
|
}
|
|
if ((uint)param_1[5] < (uint)param_1[6]) {
|
|
if ((uint)param_1[6] <= (uint)param_1[5]) {
|
|
uVar6 = (**(code **)(*param_1 + 0x18))(param_1,param_2);
|
|
return uVar6;
|
|
}
|
|
pbVar4 = (byte *)param_1[5];
|
|
param_1[5] = param_1[5] + 1;
|
|
*pbVar4 = param_2;
|
|
return (uint)param_2;
|
|
}
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc098 file=? name=FUN_004dc098 */
|
|
|
|
int __cdecl FUN_004dc098(int param_1,int param_2,int param_3)
|
|
|
|
{
|
|
if (param_2 != 0) {
|
|
return 0;
|
|
}
|
|
if (4 < param_3) {
|
|
*(int *)(param_1 + 0x32) = param_3;
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc0b8 file=? name=FUN_004dc0b8 */
|
|
|
|
int __cdecl FUN_004dc0b8(int param_1,int param_2,int param_3,byte param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
int iVar4;
|
|
|
|
if (param_3 == 2) {
|
|
if (((*(byte *)(param_1 + 0x30) & 4) == 0) && (param_2 < 1)) {
|
|
iVar4 = (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8)) + param_2;
|
|
}
|
|
else {
|
|
iVar4 = -1;
|
|
}
|
|
}
|
|
else {
|
|
iVar4 = -1;
|
|
if (param_3 == 0) {
|
|
iVar4 = param_2;
|
|
}
|
|
}
|
|
if ((param_4 & 1) != 0) {
|
|
if (param_3 == 1) {
|
|
if (*(int *)(param_1 + 0x20) == 0) {
|
|
iVar4 = param_2;
|
|
if (*(int *)(param_1 + 0x14) != 0) {
|
|
iVar4 = (*(int *)(param_1 + 0x14) - *(int *)(param_1 + 8)) + param_2;
|
|
}
|
|
}
|
|
else {
|
|
iVar4 = (*(int *)(param_1 + 0x20) - *(int *)(param_1 + 8)) + param_2;
|
|
}
|
|
}
|
|
if ((iVar4 < 0) || (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) < iVar4)) {
|
|
iVar4 = -1;
|
|
}
|
|
else {
|
|
uVar1 = *(int *)(param_1 + 8) + iVar4;
|
|
uVar2 = uVar1;
|
|
if ((*(uint *)(param_1 + 0x1c) != 0) && (*(uint *)(param_1 + 0x1c) < uVar1)) {
|
|
uVar2 = *(uint *)(param_1 + 0x1c);
|
|
}
|
|
uVar3 = uVar1;
|
|
if ((*(int *)(param_1 + 0x24) != 0) && (uVar1 < *(uint *)(param_1 + 0x24))) {
|
|
uVar3 = *(uint *)(param_1 + 0x24);
|
|
}
|
|
FUN_004dc564(param_1,uVar2,uVar1,uVar3);
|
|
}
|
|
}
|
|
if ((param_4 & 2) != 0) {
|
|
if (param_3 == 1) {
|
|
if (*(int *)(param_1 + 0x14) == 0) {
|
|
iVar4 = param_2;
|
|
if (*(int *)(param_1 + 0x20) != 0) {
|
|
iVar4 = (*(int *)(param_1 + 0x20) - *(int *)(param_1 + 8)) + param_2;
|
|
}
|
|
}
|
|
else {
|
|
iVar4 = (*(int *)(param_1 + 0x14) - *(int *)(param_1 + 8)) + param_2;
|
|
}
|
|
}
|
|
if ((iVar4 < 0) || (*(int *)(param_1 + 0xc) - *(int *)(param_1 + 8) < iVar4)) {
|
|
iVar4 = -1;
|
|
}
|
|
else {
|
|
uVar2 = *(int *)(param_1 + 8) + iVar4;
|
|
if ((*(uint *)(param_1 + 0x18) == 0) || (*(uint *)(param_1 + 0x18) <= uVar2)) {
|
|
uVar1 = *(uint *)(param_1 + 0xc);
|
|
}
|
|
else {
|
|
uVar1 = *(uint *)(param_1 + 0x18);
|
|
}
|
|
FUN_004dc598(param_1,uVar2,uVar1);
|
|
}
|
|
}
|
|
return iVar4;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc1d8 file=? name=FUN_004dc1d8 */
|
|
|
|
undefined4 FUN_004dc1d8(void)
|
|
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc1e0 file=? name=FUN_004dc1e0 */
|
|
|
|
uint __cdecl FUN_004dc1e0(int param_1)
|
|
|
|
{
|
|
if (*(byte **)(param_1 + 0x20) < *(byte **)(param_1 + 0x24)) {
|
|
return (uint)**(byte **)(param_1 + 0x20);
|
|
}
|
|
if (((*(int *)(param_1 + 8) != 0) && (*(short *)(param_1 + 6) == 0)) &&
|
|
(*(uint *)(param_1 + 0x10) < *(uint *)(param_1 + 0x14))) {
|
|
if ((*(uint *)(param_1 + 0x20) == 0) || (*(uint *)(param_1 + 0x20) < *(uint *)(param_1 + 0x10)))
|
|
{
|
|
FUN_004dc564(param_1,*(uint *)(param_1 + 8),*(uint *)(param_1 + 0x10),
|
|
*(uint *)(param_1 + 0x14));
|
|
return (uint)**(byte **)(param_1 + 0x20);
|
|
}
|
|
if (*(uint *)(param_1 + 0x20) < *(uint *)(param_1 + 0x14)) {
|
|
FUN_004dc564(param_1,*(uint *)(param_1 + 0x1c),*(uint *)(param_1 + 0x20),
|
|
*(uint *)(param_1 + 0x14));
|
|
return (uint)**(byte **)(param_1 + 0x20);
|
|
}
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc260 file=? name=FUN_004dc260 */
|
|
|
|
int * __cdecl FUN_004dc260(int *param_1,short param_2,char *param_3,int param_4,char *param_5)
|
|
|
|
{
|
|
if (param_2 == 0) {
|
|
*param_1 = (int)param_1 + 0x3e;
|
|
FUN_004dc6bc((undefined4 *)((int)param_1 + 0x3e));
|
|
}
|
|
param_1[1] = (int)&PTR_FUN_0052072c;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520738;
|
|
FUN_004dbdbc(param_1 + 2,param_3,param_4,param_5);
|
|
FUN_004dc738(*param_1,param_1 + 2);
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc2c8 file=? name=FUN_004dc2c8 */
|
|
|
|
void __cdecl FUN_004dc2c8(int *param_1,uint param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
param_1[1] = (int)&PTR_FUN_0052072c;
|
|
*(undefined ***)*param_1 = &PTR_LAB_00520738;
|
|
FUN_004dbe58(param_1 + 2,2);
|
|
if ((param_2 & 2) != 0) {
|
|
FUN_004dc6d8((int *)((int)param_1 + 0x3e),0);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc324 file=? name=FUN_004dc324 */
|
|
|
|
undefined4 __cdecl FUN_004dc324(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
iVar1 = FUN_004022b0(0x400);
|
|
if (iVar1 == 0) {
|
|
return 0xffffffff;
|
|
}
|
|
*(int *)(param_1 + 8) = iVar1;
|
|
*(int *)(param_1 + 0xc) = iVar1 + 0x400;
|
|
*(undefined2 *)(param_1 + 4) = 1;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc35c file=? name=FUN_004dc35c */
|
|
|
|
void __cdecl FUN_004dc35c(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_00520748;
|
|
*(undefined2 *)(param_1 + 1) = 0;
|
|
*(undefined2 *)((int)param_1 + 6) = 0;
|
|
param_1[2] = 0;
|
|
param_1[4] = 0;
|
|
param_1[5] = 0;
|
|
param_1[6] = 0;
|
|
param_1[8] = 0;
|
|
param_1[9] = 0;
|
|
param_1[7] = 0;
|
|
param_1[3] = 0;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc3a8 file=? name=FUN_004dc3a8 */
|
|
|
|
uint __cdecl FUN_004dc3a8(int *param_1,undefined4 *param_2,int param_3)
|
|
|
|
{
|
|
byte *pbVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
undefined1 local_8;
|
|
|
|
if ((uint)param_1[8] < (uint)param_1[9]) {
|
|
uVar4 = param_1[9] - param_1[8];
|
|
}
|
|
else {
|
|
uVar4 = 0;
|
|
}
|
|
if (0 < (int)uVar4) {
|
|
FUN_004d4918(param_2,(undefined4 *)param_1[8],uVar4);
|
|
param_2 = (undefined4 *)((int)param_2 + uVar4);
|
|
param_1[8] = param_1[8] + uVar4;
|
|
}
|
|
while( true ) {
|
|
if (param_3 <= (int)uVar4) {
|
|
return uVar4;
|
|
}
|
|
if (((uint)param_1[8] < (uint)param_1[9]) ||
|
|
(iVar2 = (**(code **)(*param_1 + 0xc))(param_1), iVar2 != -1)) {
|
|
pbVar1 = (byte *)param_1[8];
|
|
param_1[8] = param_1[8] + 1;
|
|
uVar3 = (uint)*pbVar1;
|
|
}
|
|
else {
|
|
uVar3 = 0xffffffff;
|
|
}
|
|
if (uVar3 == 0xffffffff) break;
|
|
local_8 = (undefined1)uVar3;
|
|
*(undefined1 *)param_2 = local_8;
|
|
param_2 = (undefined4 *)((int)param_2 + 1);
|
|
uVar4 = uVar4 + 1;
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc41c file=? name=FUN_004dc41c */
|
|
|
|
uint __cdecl FUN_004dc41c(int *param_1,byte *param_2,uint param_3)
|
|
|
|
{
|
|
byte bVar1;
|
|
byte *pbVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
|
|
uVar4 = param_1[6] - param_1[5];
|
|
if (0 < (int)uVar4) {
|
|
FUN_004d4918((undefined4 *)param_1[5],(undefined4 *)param_2,uVar4);
|
|
param_1[5] = param_1[5] + uVar4;
|
|
param_2 = param_2 + uVar4;
|
|
}
|
|
while( true ) {
|
|
if (param_3 <= uVar4) {
|
|
return uVar4;
|
|
}
|
|
bVar1 = *param_2;
|
|
if ((uint)param_1[5] < (uint)param_1[6]) {
|
|
pbVar2 = (byte *)param_1[5];
|
|
param_1[5] = param_1[5] + 1;
|
|
*pbVar2 = bVar1;
|
|
uVar3 = (uint)bVar1;
|
|
}
|
|
else {
|
|
uVar3 = (**(code **)(*param_1 + 0x18))(param_1,bVar1);
|
|
}
|
|
if (uVar3 == 0xffffffff) break;
|
|
uVar4 = uVar4 + 1;
|
|
param_2 = param_2 + 1;
|
|
}
|
|
return uVar4;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc48c file=? name=FUN_004dc48c */
|
|
|
|
void __cdecl FUN_004dc48c(int *param_1,byte param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
*param_1 = (int)&PTR_FUN_00520748;
|
|
if ((short)param_1[1] != 0) {
|
|
FUN_004022e8((int *)param_1[2]);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc4c8 file=? name=FUN_004dc4c8 */
|
|
|
|
undefined4 FUN_004dc4c8(void)
|
|
|
|
{
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc4d0 file=? name=FUN_004dc4d0 */
|
|
|
|
undefined4 FUN_004dc4d0(void)
|
|
|
|
{
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc4d8 file=? name=FUN_004dc4d8 */
|
|
|
|
int __cdecl FUN_004dc4d8(int param_1,uint param_2,int param_3)
|
|
|
|
{
|
|
FUN_004dc4fc(param_1,param_2,param_3 + param_2,0);
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc4fc file=? name=FUN_004dc4fc */
|
|
|
|
void __cdecl FUN_004dc4fc(int param_1,uint param_2,uint param_3,int param_4)
|
|
|
|
{
|
|
undefined2 uVar1;
|
|
|
|
if (((*(short *)(param_1 + 4) != 0) && (*(int *)(param_1 + 8) != 0)) &&
|
|
(param_2 != *(uint *)(param_1 + 8))) {
|
|
FUN_004022e8(*(int **)(param_1 + 8));
|
|
}
|
|
*(uint *)(param_1 + 8) = param_2;
|
|
if (((param_2 == 0) || (param_3 == 0)) || (param_3 < param_2)) {
|
|
param_3 = param_2;
|
|
}
|
|
*(uint *)(param_1 + 0xc) = param_3;
|
|
*(ushort *)(param_1 + 6) = (ushort)(param_2 == 0);
|
|
if ((param_4 == 0) || (param_2 == 0)) {
|
|
uVar1 = 0;
|
|
}
|
|
else {
|
|
uVar1 = 1;
|
|
}
|
|
*(undefined2 *)(param_1 + 4) = uVar1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc564 file=? name=FUN_004dc564 */
|
|
|
|
void __cdecl FUN_004dc564(int param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
{
|
|
if ((param_3 == 0) || (param_2 == 0)) {
|
|
param_2 = param_3;
|
|
}
|
|
*(uint *)(param_1 + 0x1c) = param_2;
|
|
*(uint *)(param_1 + 0x20) = param_3;
|
|
if (((param_3 == 0) || (param_4 == 0)) || (param_4 < param_3)) {
|
|
param_4 = param_3;
|
|
}
|
|
*(uint *)(param_1 + 0x24) = param_4;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc598 file=? name=FUN_004dc598 */
|
|
|
|
void __cdecl FUN_004dc598(int param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
*(uint *)(param_1 + 0x14) = param_2;
|
|
*(uint *)(param_1 + 0x10) = param_2;
|
|
if (((param_2 == 0) || (param_3 == 0)) || (param_3 < param_2)) {
|
|
param_3 = param_2;
|
|
}
|
|
*(uint *)(param_1 + 0x18) = param_3;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc5c0 file=? name=FUN_004dc5c0 */
|
|
|
|
undefined4 FUN_004dc5c0(void)
|
|
|
|
{
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc5c8 file=? name=FUN_004dc5c8 */
|
|
|
|
void __cdecl FUN_004dc5c8(int *param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
{
|
|
(**(code **)(*param_1 + 0x1c))(param_1,param_2,0,param_3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc5e4 file=? name=FUN_004dc5e4 */
|
|
|
|
uint __cdecl FUN_004dc5e4(int *param_1,undefined4 *param_2,uint param_3)
|
|
|
|
{
|
|
if ((uint)(param_1[6] - param_1[5]) < param_3) {
|
|
param_3 = (**(code **)(*param_1 + 0x14))(param_1,param_2,param_3);
|
|
}
|
|
else {
|
|
FUN_004d4918((undefined4 *)param_1[5],param_2,param_3);
|
|
param_1[5] = param_1[5] + param_3;
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc628 file=? name=FUN_004dc628 */
|
|
|
|
undefined4 __cdecl FUN_004dc628(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (*(uint *)(param_1 + 0x20) < *(uint *)(param_1 + 0x24)) {
|
|
iVar1 = *(int *)(param_1 + 0x24) - *(int *)(param_1 + 0x20);
|
|
}
|
|
else {
|
|
iVar1 = 0;
|
|
}
|
|
if (iVar1 == 0) {
|
|
if (*(int *)(param_1 + 0x14) == 0) {
|
|
iVar1 = 0;
|
|
}
|
|
else {
|
|
iVar1 = *(int *)(param_1 + 0x14) - *(int *)(param_1 + 0x10);
|
|
}
|
|
if (iVar1 == 0) {
|
|
return 0;
|
|
}
|
|
}
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc660 file=? name=FUN_004dc660 */
|
|
|
|
uint __cdecl FUN_004dc660(int param_1)
|
|
|
|
{
|
|
if (*(byte **)(param_1 + 0x20) < *(byte **)(param_1 + 0x24)) {
|
|
return (uint)**(byte **)(param_1 + 0x20);
|
|
}
|
|
*(byte **)(param_1 + 0x20) = *(byte **)(param_1 + 0x24);
|
|
return 0xffffffff;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc680 file=? name=FUN_004dc680 */
|
|
|
|
void __cdecl FUN_004dc680(int param_1,uint param_2)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
uVar1 = param_2 & 0xff | *(uint *)(param_1 + 0xc) & 0x80;
|
|
*(uint *)(param_1 + 0xc) = uVar1;
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) & 0xffffff00 | uVar1;
|
|
*(uint *)(param_1 + 0x14) = *(uint *)(param_1 + 0x14) & 0xffffff00 | *(uint *)(param_1 + 0xc);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc6bc file=? name=FUN_004dc6bc */
|
|
|
|
void __cdecl FUN_004dc6bc(undefined4 *param_1)
|
|
|
|
{
|
|
*param_1 = &PTR_FUN_00520788;
|
|
param_1[0xe] = 0;
|
|
*DAT_00524c68 = *DAT_00524c68 + 1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc6d8 file=? name=FUN_004dc6d8 */
|
|
|
|
void __cdecl FUN_004dc6d8(int *param_1,byte param_2)
|
|
|
|
{
|
|
*DAT_00524c68 = *DAT_00524c68 + -1;
|
|
if (param_1 != (int *)0x0) {
|
|
*param_1 = (int)&PTR_FUN_00520788;
|
|
if ((int *)param_1[0xe] != (int *)0x0) {
|
|
FUN_004022e8((int *)param_1[0xe]);
|
|
}
|
|
if ((param_2 & 1) != 0) {
|
|
FUN_004022d0(param_1);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc710 file=? name=FUN_004dc710 */
|
|
|
|
undefined4 __cdecl FUN_004dc710(int param_1,uint param_2)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = *(undefined4 *)(param_1 + 0x18);
|
|
*(uint *)(param_1 + 0x18) = param_2;
|
|
if ((param_2 & 1) == 0) {
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) & 0xfffffeff;
|
|
}
|
|
else {
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) | 0x100;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc738 file=? name=FUN_004dc738 */
|
|
|
|
void __cdecl FUN_004dc738(int param_1,undefined4 param_2)
|
|
|
|
{
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
*(undefined4 *)(param_1 + 0x10) = 0x100;
|
|
*(undefined4 *)(param_1 + 0x18) = 1;
|
|
*(undefined4 *)(param_1 + 0x1c) = 6;
|
|
*(undefined4 *)(param_1 + 0x20) = 0;
|
|
*(undefined4 *)(param_1 + 0x24) = 0x20;
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
*(undefined4 *)(param_1 + 4) = param_2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc77c file=? name=FUN_004dc77c */
|
|
|
|
undefined4 __cdecl FUN_004dc77c(int param_1,uint param_2)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = *(undefined4 *)(param_1 + 0x18);
|
|
if ((DAT_00520790 & param_2) != 0) {
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) & ~DAT_00520790;
|
|
}
|
|
if ((DAT_0052078c & param_2) != 0) {
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) & ~DAT_0052078c;
|
|
}
|
|
if ((DAT_00520794 & param_2) != 0) {
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) & ~DAT_00520794;
|
|
}
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) | param_2;
|
|
if ((*(byte *)(param_1 + 0x18) & 1) == 0) {
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) & 0xfffffeff;
|
|
}
|
|
else {
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) | 0x100;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc7d4 file=? name=FUN_004dc7d4 */
|
|
|
|
undefined4 __cdecl FUN_004dc7d4(int param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
|
|
uVar1 = *(undefined4 *)(param_1 + 0x18);
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) & ~param_3;
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) | param_3 & param_2;
|
|
if ((*(byte *)(param_1 + 0x18) & 1) == 0) {
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) & 0xfffffeff;
|
|
}
|
|
else {
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) | 0x100;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc80c file=? name=FUN_004dc80c */
|
|
|
|
void __cdecl FUN_004dc80c(int param_1,uint param_2)
|
|
|
|
{
|
|
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) | param_2 & 0xff;
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) | param_2 & 0xfffffcff;
|
|
*(uint *)(param_1 + 0x14) = *(uint *)(param_1 + 0x14) | param_2 & 0xfffffdff;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc838 file=? name=FUN_004dc838 */
|
|
|
|
int * __cdecl FUN_004dc838(int param_1,int param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
|
|
piVar1 = *(int **)(param_1 + 8);
|
|
if (piVar1 != (int *)0x0) {
|
|
FUN_004db6b4(piVar1);
|
|
}
|
|
*(int *)(param_1 + 8) = param_2;
|
|
if (param_2 == 0) {
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) & 0xfffffdff;
|
|
*(uint *)(param_1 + 0x14) = *(uint *)(param_1 + 0x14) & 0xfffffdff;
|
|
}
|
|
else {
|
|
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) | 0x200;
|
|
*(uint *)(param_1 + 0x14) = *(uint *)(param_1 + 0x14) | 0x200;
|
|
}
|
|
return piVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc880 file=? name=FUN_004dc880 */
|
|
|
|
void FUN_004dc880(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc888 file=? name=FUN_004dc888 */
|
|
|
|
void FUN_004dc888(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc89c file=? name=FUN_004dc89c */
|
|
|
|
uint __cdecl FUN_004dc89c(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
if (param_1 == 0xffffffff) {
|
|
return 0xffffffff;
|
|
}
|
|
uVar1 = param_1 & 0xff;
|
|
if (((&DAT_005207dd)[uVar1] & 4) != 0) {
|
|
return uVar1 + 0x20;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc8c4 file=? name=FUN_004dc8c4 */
|
|
|
|
uint __cdecl FUN_004dc8c4(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
|
|
if (param_1 == 0xffffffff) {
|
|
return 0xffffffff;
|
|
}
|
|
uVar1 = param_1 & 0xff;
|
|
if (((&DAT_005207dd)[uVar1] & 8) != 0) {
|
|
return uVar1 - 0x20;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc8ec file=? name=FUN_004dc8ec */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
float10 __cdecl FUN_004dc8ec(double param_1,undefined4 param_2,uint param_3)
|
|
|
|
{
|
|
ushort uVar1;
|
|
ushort uVar2;
|
|
float10 fVar3;
|
|
|
|
uVar1 = (ushort)((ulonglong)param_1 >> 0x30) & 0xfff0;
|
|
uVar2 = uVar1 << 1;
|
|
if (uVar2 == 0) {
|
|
if ((param_3 & 0x7ff00000) != 0) {
|
|
if (-1 < (short)(param_3._2_2_ & 0xfff0)) {
|
|
return (float10)param_1;
|
|
}
|
|
if (-1 < (short)uVar1) {
|
|
return (float10)3.141592653589793;
|
|
}
|
|
return -(float10)3.141592653589793;
|
|
}
|
|
LAB_004dc975:
|
|
fVar3 = FUN_004de098(1,s_atan2_005208f6,(undefined8 *)¶m_2,¶m_1,DAT_005208ee,
|
|
DAT_005208f2);
|
|
return fVar3;
|
|
}
|
|
uVar1 = (param_3._2_2_ & 0xfff0) << 1;
|
|
if (uVar1 == 0) {
|
|
LAB_004dc953:
|
|
fVar3 = _DAT_005208e4;
|
|
if (((ulonglong)param_1 & 0x8000000000000000) != 0) {
|
|
fVar3 = -_DAT_005208e4;
|
|
}
|
|
}
|
|
else {
|
|
if (uVar1 < 0xffe0) {
|
|
if (0xffdf < uVar2) goto LAB_004dc953;
|
|
fVar3 = (float10)FUN_004dcaa4();
|
|
}
|
|
else {
|
|
if (0xffdf < uVar2) goto LAB_004dc975;
|
|
fVar3 = (float10)0;
|
|
}
|
|
if ((param_3 & 0x80000000) != 0) {
|
|
if ((param_1._7_1_ & 0x80) == 0) {
|
|
fVar3 = (float10)3.141592653589793 + fVar3;
|
|
}
|
|
else {
|
|
fVar3 = fVar3 - (float10)3.141592653589793;
|
|
}
|
|
}
|
|
}
|
|
return fVar3;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc9a0 file=? name=FUN_004dc9a0 */
|
|
|
|
undefined2 FUN_004dc9a0(void)
|
|
|
|
{
|
|
undefined2 in_FPUStatusWord;
|
|
|
|
return in_FPUStatusWord;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc9b4 file=? name=FUN_004dc9b4 */
|
|
|
|
void __cdecl FUN_004dc9b4(undefined4 param_1,undefined4 param_2)
|
|
|
|
{
|
|
if ((param_2._2_2_ & 0x7ff0) < 0x4340) {
|
|
FUN_004dcc20();
|
|
}
|
|
else {
|
|
FUN_004de098(5,&DAT_00520904,(undefined8 *)¶m_1,(undefined8 *)0x0,DAT_005208fc,DAT_00520900)
|
|
;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dc9f8 file=? name=FUN_004dc9f8 */
|
|
|
|
void FUN_004dc9f8(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dca20 file=? name=thunk_FUN_004dd24c */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void thunk_FUN_004dd24c(void)
|
|
|
|
{
|
|
/* WARNING: Could not recover jumptable at 0x004dca20. Too many branches */
|
|
/* WARNING: Treating indirect jump as call */
|
|
(*_DAT_00520964)();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dca26 file=? name=thunk_FUN_004dd24c */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void thunk_FUN_004dd24c(void)
|
|
|
|
{
|
|
/* WARNING: Could not recover jumptable at 0x004dca26. Too many branches */
|
|
/* WARNING: Treating indirect jump as call */
|
|
(*_DAT_00520968)();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dca2c file=? name=thunk_FUN_004dd258 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void thunk_FUN_004dd258(void)
|
|
|
|
{
|
|
/* WARNING: Could not recover jumptable at 0x004dca2c. Too many branches */
|
|
/* WARNING: Treating indirect jump as call */
|
|
(*_DAT_0052096c)();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dca32 file=? name=thunk_FUN_004dd258 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void thunk_FUN_004dd258(void)
|
|
|
|
{
|
|
/* WARNING: Could not recover jumptable at 0x004dca32. Too many branches */
|
|
/* WARNING: Treating indirect jump as call */
|
|
(*_DAT_00520970)();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dca38 file=? name=FUN_004dca38 */
|
|
|
|
void __thiscall FUN_004dca38(undefined2 param_1,undefined4 param_2,uint param_3)
|
|
|
|
{
|
|
ushort uVar1;
|
|
undefined4 *puVar2;
|
|
int iVar3;
|
|
|
|
if (0x4085 < (param_3._2_2_ & 0x7fff)) {
|
|
uVar1 = 0xffff;
|
|
if ((param_3._2_2_ & 0x7fff) < 0x4087) {
|
|
uVar1 = (ushort)param_3;
|
|
}
|
|
if ((param_3 & 0x80000000) == 0) {
|
|
if (0x2e41 < uVar1) {
|
|
iVar3 = 3;
|
|
puVar2 = &DAT_005209d4;
|
|
LAB_004dca87:
|
|
FUN_004de098(iVar3,&DAT_00520910,(undefined8 *)¶m_2,(undefined8 *)0x0,*puVar2,puVar2[1])
|
|
;
|
|
return;
|
|
}
|
|
}
|
|
else if (0x232a < uVar1) {
|
|
iVar3 = 4;
|
|
puVar2 = &DAT_00520908;
|
|
goto LAB_004dca87;
|
|
}
|
|
}
|
|
FUN_004dcb11(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcaa4 file=? name=FUN_004dcaa4 */
|
|
|
|
void FUN_004dcaa4(void)
|
|
|
|
{
|
|
float10 fVar1;
|
|
float10 in_ST0;
|
|
float10 fVar2;
|
|
float10 fVar3;
|
|
|
|
if (in_ST0 != (float10)0) {
|
|
fVar2 = ABS(in_ST0);
|
|
fVar1 = (float10)1;
|
|
if (fVar1 != fVar2) {
|
|
fVar3 = fVar1;
|
|
if (fVar1 < fVar2) {
|
|
fVar3 = fVar2;
|
|
fVar2 = fVar1;
|
|
}
|
|
fpatan(fVar2,fVar3);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcb11 file=? name=FUN_004dcb11 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void __fastcall FUN_004dcb11(undefined2 param_1)
|
|
|
|
{
|
|
ushort uVar1;
|
|
short sVar2;
|
|
float10 in_ST0;
|
|
float10 fVar3;
|
|
float10 fVar4;
|
|
|
|
sVar2 = CONCAT11((char)((ushort)param_1 >> 8),1);
|
|
fVar4 = in_ST0;
|
|
fVar3 = (float10)1.4426950408889634;
|
|
if (sVar2 != 0) {
|
|
fVar4 = (float10)1.4426950408889634;
|
|
fVar3 = in_ST0;
|
|
}
|
|
if (in_ST0 != (float10)0) {
|
|
if (sVar2 != 0) {
|
|
fVar4 = fVar4 * fVar3;
|
|
}
|
|
fVar4 = ABS(fVar4);
|
|
if ((float10)_DAT_005213bc < fVar4) {
|
|
fVar3 = (float10)fscale(fVar4,(float10)1);
|
|
uVar1 = (ushort)ROUND(ROUND(fVar3));
|
|
fVar3 = (float10)fscale(ROUND(fVar3),-(float10)1);
|
|
fVar4 = (float10)f2xm1(fVar4 - fVar3);
|
|
fVar4 = (float10)1 + fVar4;
|
|
if ((uVar1 & 1) != 0) {
|
|
fVar4 = _DAT_005213c0 * fVar4;
|
|
}
|
|
fscale(fVar4,(float10)(uVar1 >> 1));
|
|
}
|
|
else {
|
|
f2xm1(fVar4);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcbdc file=? name=FUN_004dcbdc */
|
|
|
|
void FUN_004dcbdc(void)
|
|
|
|
{
|
|
float10 in_ST0;
|
|
|
|
if ((in_ST0 != (float10)0) && ((float10)0 <= in_ST0)) {
|
|
log2(in_ST0);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcc1c file=? name=FUN_004dcc1c */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x004dcc96) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dcc3e) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dcccd) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccd8) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccda) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccde) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccee) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccf8) */
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void FUN_004dcc1c(void)
|
|
|
|
{
|
|
float10 fVar1;
|
|
byte bVar2;
|
|
float10 in_ST0;
|
|
float10 fVar3;
|
|
byte bStack_3;
|
|
|
|
if (in_ST0 != (float10)0) {
|
|
fVar1 = (float10)0;
|
|
bVar2 = NAN(_DAT_005213e8) | (byte)((ushort)((ushort)(_DAT_005213e8 < fVar1) << 9) >> 8);
|
|
bStack_3 = bVar2 | (byte)((ushort)((ushort)(_DAT_005213e8 != fVar1) << 10) >> 8) |
|
|
(byte)((ushort)((ushort)(_DAT_005213e8 == fVar1) << 0xe) >> 8);
|
|
fVar3 = ABS(in_ST0) - (float10)(unkint10)(ABS(in_ST0) / _DAT_005213e8) * _DAT_005213e8;
|
|
if ((_DAT_005213e8 != fVar1) == 0) {
|
|
if (3 < (byte)(bVar2 << 1 | (char)(bStack_3 << 1) < '\0')) {
|
|
fVar3 = _DAT_005213e8 - fVar3;
|
|
}
|
|
fptan(fVar3);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcc20 file=? name=FUN_004dcc20 */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x004dcccd) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccd8) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccda) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccde) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccee) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccf8) */
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void FUN_004dcc20(void)
|
|
|
|
{
|
|
float10 fVar1;
|
|
byte bVar2;
|
|
float10 in_ST0;
|
|
float10 fVar3;
|
|
byte bStack_3;
|
|
|
|
if (in_ST0 != (float10)0) {
|
|
fVar1 = (float10)0;
|
|
bVar2 = NAN(_DAT_005213e8) | (byte)((ushort)((ushort)(_DAT_005213e8 < fVar1) << 9) >> 8);
|
|
bStack_3 = bVar2 | (byte)((ushort)((ushort)(_DAT_005213e8 != fVar1) << 10) >> 8) |
|
|
(byte)((ushort)((ushort)(_DAT_005213e8 == fVar1) << 0xe) >> 8);
|
|
fVar3 = ABS(in_ST0) - (float10)(unkint10)(ABS(in_ST0) / _DAT_005213e8) * _DAT_005213e8;
|
|
if ((_DAT_005213e8 != fVar1) == 0) {
|
|
if (3 < (byte)(bVar2 << 1 | (char)(bStack_3 << 1) < '\0')) {
|
|
fVar3 = _DAT_005213e8 - fVar3;
|
|
}
|
|
fptan(fVar3);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcc24 file=? name=FUN_004dcc24 */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x004dcc96) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dcc3e) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccad) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccb1) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccb3) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccc7) */
|
|
/* WARNING: Removing unreachable block (ram,0x004dccc9) */
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void FUN_004dcc24(void)
|
|
|
|
{
|
|
float10 fVar1;
|
|
byte bVar2;
|
|
float10 in_ST0;
|
|
float10 fVar3;
|
|
byte bStack_3;
|
|
|
|
if (in_ST0 != (float10)0) {
|
|
fVar1 = (float10)0;
|
|
bVar2 = NAN(_DAT_005213e8) | (byte)((ushort)((ushort)(_DAT_005213e8 < fVar1) << 9) >> 8);
|
|
bStack_3 = bVar2 | (byte)((ushort)((ushort)(_DAT_005213e8 != fVar1) << 10) >> 8) |
|
|
(byte)((ushort)((ushort)(_DAT_005213e8 == fVar1) << 0xe) >> 8);
|
|
fVar3 = ABS(in_ST0) - (float10)(unkint10)(ABS(in_ST0) / _DAT_005213e8) * _DAT_005213e8;
|
|
if ((_DAT_005213e8 != fVar1) == 0) {
|
|
if (3 < (byte)(bVar2 << 1 | (char)(bStack_3 << 1) < '\0')) {
|
|
fVar3 = _DAT_005213e8 - fVar3;
|
|
}
|
|
fptan(fVar3);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcd00 file=? name=FUN_004dcd00 */
|
|
|
|
float10 __cdecl FUN_004dcd00(double param_1)
|
|
|
|
{
|
|
return (float10)ABS(param_1);
|
|
}
|
|
|
|
|
|
|
|
/* @004dcd10 file=? name=FUN_004dcd10 */
|
|
|
|
float10 __cdecl FUN_004dcd10(double param_1)
|
|
|
|
{
|
|
float10 fVar1;
|
|
|
|
fVar1 = (float10)param_1;
|
|
if ((ushort)(param_1._6_2_ * 2) < 0x8681) {
|
|
fVar1 = FUN_004dd0c8();
|
|
}
|
|
return fVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcd2c file=? name=FUN_004dcd2c */
|
|
|
|
float10 __cdecl FUN_004dcd2c(double param_1,double param_2)
|
|
|
|
{
|
|
ushort in_FPUStatusWord;
|
|
float10 fVar1;
|
|
|
|
if ((ushort)(param_2._6_2_ << 1) != 0) {
|
|
if (0xffdf < (ushort)(param_2._6_2_ << 1)) {
|
|
return (float10)param_1;
|
|
}
|
|
fVar1 = (float10)param_1;
|
|
if (((ushort)(param_1._6_2_ << 1) != 0) && ((ushort)(param_1._6_2_ << 1) < 0xffe0)) {
|
|
do {
|
|
fVar1 = fVar1 - (float10)(unkint10)(fVar1 / (float10)param_2) * (float10)param_2;
|
|
} while ((in_FPUStatusWord & 0x400) != 0);
|
|
return fVar1;
|
|
}
|
|
}
|
|
return (float10)0;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcd7c file=? name=FUN_004dcd7c */
|
|
|
|
void FUN_004dcd7c(void)
|
|
|
|
{
|
|
FUN_004dc9f8();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcd94 file=? name=FUN_004dcd94 */
|
|
|
|
undefined4 FUN_004dcd94(void)
|
|
|
|
{
|
|
float10 in_ST0;
|
|
undefined4 local_10;
|
|
|
|
local_10 = (undefined4)(longlong)ROUND(in_ST0);
|
|
return local_10;
|
|
}
|
|
|
|
|
|
|
|
/* @004dcdbc file=? name=FUN_004dcdbc */
|
|
|
|
float10 __cdecl FUN_004dcdbc(longlong *param_1)
|
|
|
|
{
|
|
if ((longlong)(*param_1 & -0x8000000000000000) == 0) {
|
|
return (float10)*param_1;
|
|
}
|
|
return (float10)CONCAT28(0x403e,*param_1);
|
|
}
|
|
|
|
|
|
|
|
/* @004dcdec file=? name=FUN_004dcdec */
|
|
|
|
void __cdecl FUN_004dcdec(longlong *param_1,float10 *param_2)
|
|
|
|
{
|
|
if (*(short *)((int)param_2 + 8) != 0x403e) {
|
|
*param_1 = (longlong)ROUND(*param_2);
|
|
return;
|
|
}
|
|
*(undefined4 *)param_1 = *(undefined4 *)param_2;
|
|
*(undefined4 *)((int)param_1 + 4) = *(undefined4 *)((int)param_2 + 4);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dce10 file=? name=FUN_004dce10 */
|
|
|
|
ushort __cdecl FUN_004dce10(float10 *param_1)
|
|
|
|
{
|
|
float10 fVar1;
|
|
float10 fVar2;
|
|
|
|
fVar1 = *param_1;
|
|
fVar2 = (float10)0;
|
|
return (ushort)NAN(fVar1) << 8 | (ushort)(fVar1 < fVar2) << 9 | (ushort)(fVar1 != fVar2) << 10 |
|
|
(ushort)(fVar1 == fVar2) << 0xe;
|
|
}
|
|
|
|
|
|
|
|
/* @004dce24 file=? name=FUN_004dce24 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void __cdecl FUN_004dce24(undefined4 param_1,int param_2)
|
|
|
|
{
|
|
double *pdVar1;
|
|
int iVar2;
|
|
double local_c;
|
|
|
|
if ((short)(param_2._2_2_ * 2) == 0) {
|
|
iVar2 = 2;
|
|
local_c = -_DAT_005209d4;
|
|
pdVar1 = &local_c;
|
|
}
|
|
else if (param_2 < 0) {
|
|
iVar2 = 1;
|
|
pdVar1 = (double *)&DAT_00520914;
|
|
}
|
|
else {
|
|
if ((short)(param_2._2_2_ * 2) != -0x20) {
|
|
FUN_004dcbdc();
|
|
return;
|
|
}
|
|
iVar2 = 3;
|
|
pdVar1 = (double *)&DAT_005209d4;
|
|
}
|
|
FUN_004de098(iVar2,&DAT_0052091c,(undefined8 *)¶m_1,(undefined8 *)0x0,*(undefined4 *)pdVar1,
|
|
*(undefined4 *)((int)pdVar1 + 4));
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dce94 file=? name=FUN_004dce94 */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x004dcf54) */
|
|
|
|
float10 __cdecl FUN_004dce94(double param_1,undefined4 param_2,uint param_3)
|
|
|
|
{
|
|
double dVar1;
|
|
char cVar2;
|
|
ushort uVar3;
|
|
byte bVar4;
|
|
undefined2 extraout_CX;
|
|
double *pdVar5;
|
|
ushort uVar6;
|
|
int iVar7;
|
|
short sVar8;
|
|
bool bVar9;
|
|
float10 fVar10;
|
|
float10 fVar11;
|
|
ushort uStack_10;
|
|
undefined2 uStack_e;
|
|
double local_c;
|
|
|
|
bVar9 = false;
|
|
fVar10 = (float10)param_1;
|
|
uVar6 = (ushort)((ulonglong)param_1 >> 0x30);
|
|
uVar3 = (ushort)(param_3 >> 0x10);
|
|
if (((ulonglong)param_1 & 0x7ff0000000000000) == 0) {
|
|
if (0xffff < (int)param_3) {
|
|
return (float10)0;
|
|
}
|
|
iVar7 = 1;
|
|
if (uVar3 == 0) {
|
|
pdVar5 = (double *)&DAT_00520930;
|
|
}
|
|
else {
|
|
pdVar5 = (double *)&DAT_005209d4;
|
|
}
|
|
}
|
|
else {
|
|
if ((uVar6 & 0x7ff0) == 0x7ff0) {
|
|
local_c = param_1;
|
|
if ((int)param_3 < 0) {
|
|
iVar7 = 4;
|
|
pdVar5 = (double *)&DAT_00520928;
|
|
goto LAB_004dcf19;
|
|
}
|
|
}
|
|
else {
|
|
dVar1 = (double)CONCAT17(param_3._3_1_,
|
|
CONCAT16(param_3._2_1_,CONCAT24((undefined2)param_3,param_2)));
|
|
uVar3 = uVar3 & 0x7ff0;
|
|
if ((param_3 & 0x7ff00000) == 0) {
|
|
return (float10)1;
|
|
}
|
|
if (uVar3 != 0x7ff0) {
|
|
uVar3 = uVar3 >> 4;
|
|
if ((ushort)(uVar3 - 0x3ff) < 0x3f) {
|
|
if (((byte)(uVar3 - 0x3ff) < 0xc) &&
|
|
(sVar8 = uVar6 * 2 + -0x7fe0, bVar4 = (char)uVar3 + 2, uVar3 = uVar3 - 0x3ff,
|
|
(short)(sVar8 << (bVar4 & 0x1f)) >> (bVar4 & 0x1f) == sVar8)) {
|
|
uVar6 = (ushort)CONCAT31((int3)((param_3 & 0xfff0) >> 8),
|
|
(byte)(param_3 & 0xfff0) | param_3._2_1_ & 0xf);
|
|
uVar6 = uVar6 >> 4 | uVar6 << 0xc;
|
|
fVar11 = fVar10;
|
|
while (cVar2 = (char)uVar3, uVar3 = (ushort)(byte)(cVar2 - 1), '\0' < cVar2) {
|
|
fVar11 = fVar11 * fVar11;
|
|
bVar9 = (short)uVar6 < 0;
|
|
uVar6 = uVar6 << 1;
|
|
if (bVar9) {
|
|
fVar11 = fVar11 * fVar10;
|
|
}
|
|
}
|
|
if ((param_3 & 0x80000000) == 0) {
|
|
return fVar11;
|
|
}
|
|
return (float10)1 / fVar11;
|
|
}
|
|
local_c = (double)(longlong)ROUND(ROUND(dVar1));
|
|
if ((((ulonglong)param_1 & 0x8000000000000000) != 0) &&
|
|
(fVar10 = -fVar10, ((ulonglong)local_c & 1) != 0)) {
|
|
bVar9 = true;
|
|
}
|
|
}
|
|
if (fVar10 < (float10)0) {
|
|
iVar7 = 1;
|
|
pdVar5 = (double *)&DAT_00520920;
|
|
goto LAB_004dcf19;
|
|
}
|
|
fVar10 = (float10)FUN_004dcbdc();
|
|
fVar10 = fVar10 * (float10)(double)CONCAT17(param_3._3_1_,
|
|
CONCAT16(param_3._2_1_,
|
|
CONCAT24((undefined2)param_3,param_2)))
|
|
;
|
|
uStack_e = (ushort)((unkuint10)fVar10 >> 0x40);
|
|
if ((uStack_e & 0x7fff) < 0x4008) {
|
|
LAB_004dcfc5:
|
|
fVar10 = (float10)FUN_004dcb11(extraout_CX);
|
|
if (!bVar9) {
|
|
return fVar10;
|
|
}
|
|
return -fVar10;
|
|
}
|
|
uStack_10 = 0xffff;
|
|
if ((uStack_e & 0x7fff) < 0x4009) {
|
|
uStack_10 = (ushort)((unkuint10)fVar10 >> 0x30);
|
|
}
|
|
uStack_e._1_1_ = (byte)((unkuint10)fVar10 >> 0x48);
|
|
if ((uStack_e._1_1_ & 0x80) == 0) {
|
|
if (uStack_10 < 0xb172) goto LAB_004dcfc5;
|
|
iVar7 = 3;
|
|
pdVar5 = (double *)&DAT_005209d4;
|
|
}
|
|
else {
|
|
if (uStack_10 < 0xb172) goto LAB_004dcfc5;
|
|
iVar7 = 4;
|
|
pdVar5 = (double *)&DAT_00520928;
|
|
}
|
|
goto LAB_004dcf19;
|
|
}
|
|
local_c = dVar1;
|
|
}
|
|
iVar7 = 3;
|
|
pdVar5 = &local_c;
|
|
}
|
|
LAB_004dcf19:
|
|
fVar10 = FUN_004de098(iVar7,&DAT_00520938,¶m_1,(undefined8 *)¶m_2,*(undefined4 *)pdVar5,
|
|
*(undefined4 *)((int)pdVar5 + 4));
|
|
return fVar10;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd070 file=? name=FUN_004dd070 */
|
|
|
|
undefined4 __cdecl FUN_004dd070(undefined4 *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 uVar2;
|
|
uint uVar3;
|
|
|
|
uVar1 = param_1[1];
|
|
uVar3 = 0;
|
|
if (uVar1 != 0) {
|
|
uVar3 = uVar1 % 10;
|
|
param_1[1] = uVar1 / 10;
|
|
}
|
|
uVar2 = *param_1;
|
|
*param_1 = (int)(CONCAT44(uVar3,uVar2) / 10);
|
|
return (int)(CONCAT44(uVar3,uVar2) % 10);
|
|
}
|
|
|
|
|
|
|
|
/* @004dd098 file=? name=FUN_004dd098 */
|
|
|
|
undefined4 __cdecl FUN_004dd098(uint *param_1,uint param_2)
|
|
|
|
{
|
|
longlong lVar1;
|
|
ulonglong uVar2;
|
|
|
|
uVar2 = (ulonglong)*param_1 * 10 + (ulonglong)param_2;
|
|
*param_1 = (uint)uVar2;
|
|
lVar1 = (ulonglong)param_1[1] * 10 + (uVar2 >> 0x20);
|
|
param_1[1] = (uint)lVar1;
|
|
return (int)((ulonglong)lVar1 >> 0x20);
|
|
}
|
|
|
|
|
|
|
|
/* @004dd0c8 file=? name=FUN_004dd0c8 */
|
|
|
|
float10 FUN_004dd0c8(void)
|
|
|
|
{
|
|
float10 in_ST0;
|
|
|
|
return ROUND(in_ST0);
|
|
}
|
|
|
|
|
|
|
|
/* @004dd0f4 file=? name=FUN_004dd0f4 */
|
|
|
|
void __cdecl FUN_004dd0f4(undefined4 param_1,undefined4 param_2)
|
|
|
|
{
|
|
if ((param_2._2_2_ & 0x7ff0) < 0x4340) {
|
|
FUN_004dcc1c();
|
|
}
|
|
else {
|
|
FUN_004de098(5,&DAT_00520944,(undefined8 *)¶m_1,(undefined8 *)0x0,DAT_0052093c,DAT_00520940)
|
|
;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd138 file=? name=FUN_004dd138 */
|
|
|
|
float10 __cdecl FUN_004dd138(double param_1)
|
|
|
|
{
|
|
float10 fVar1;
|
|
|
|
fVar1 = (float10)param_1;
|
|
if (((ulonglong)param_1 & 0x7fff000000000000) != 0) {
|
|
if ((longlong)param_1 < 0) {
|
|
fVar1 = FUN_004de098(1,&DAT_00520950,¶m_1,(undefined8 *)0x0,DAT_00520948,DAT_0052094c);
|
|
}
|
|
else {
|
|
fVar1 = SQRT(fVar1);
|
|
}
|
|
}
|
|
return fVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd174 file=? name=FUN_004dd174 */
|
|
|
|
undefined2 FUN_004dd174(void)
|
|
|
|
{
|
|
undefined2 in_FPUStatusWord;
|
|
|
|
return in_FPUStatusWord;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd188 file=? name=FUN_004dd188 */
|
|
|
|
void __cdecl FUN_004dd188(undefined4 param_1,undefined4 param_2)
|
|
|
|
{
|
|
if ((param_2._2_2_ & 0x7ff0) < 0x4340) {
|
|
FUN_004dcc24();
|
|
}
|
|
else {
|
|
FUN_004de098(5,&DAT_00520960,(undefined8 *)¶m_1,(undefined8 *)0x0,DAT_00520958,DAT_0052095c)
|
|
;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd1cc file=? name=FUN_004dd1cc */
|
|
|
|
void __cdecl FUN_004dd1cc(undefined4 param_1)
|
|
|
|
{
|
|
FUN_004ddd94(param_1,(undefined4 *)0x0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd1e0 file=? name=FUN_004dd1e0 */
|
|
|
|
int __cdecl FUN_004dd1e0(char *param_1)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
char *pcVar3;
|
|
bool bVar4;
|
|
|
|
iVar2 = 0;
|
|
do {
|
|
pcVar3 = param_1;
|
|
cVar1 = *pcVar3;
|
|
param_1 = pcVar3 + 1;
|
|
} while (((&DAT_005207dd)[cVar1] & 1) != 0);
|
|
if ((cVar1 == '+') || (cVar1 == '-')) {
|
|
bVar4 = cVar1 == '-';
|
|
cVar1 = *param_1;
|
|
param_1 = pcVar3 + 2;
|
|
}
|
|
else {
|
|
bVar4 = false;
|
|
}
|
|
while (('/' < cVar1 && (cVar1 < ':'))) {
|
|
iVar2 = iVar2 * 10 + (int)cVar1 + -0x30;
|
|
cVar1 = *param_1;
|
|
param_1 = param_1 + 1;
|
|
}
|
|
if (bVar4) {
|
|
iVar2 = -iVar2;
|
|
}
|
|
return iVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd23c file=? name=FUN_004dd23c */
|
|
|
|
void __cdecl FUN_004dd23c(char *param_1)
|
|
|
|
{
|
|
FUN_004dd1e0(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd24c file=? name=FUN_004dd24c */
|
|
|
|
void FUN_004dd24c(void)
|
|
|
|
{
|
|
FUN_004ded48(s_printf___floating_point_formats_n_00520974);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd258 file=? name=FUN_004dd258 */
|
|
|
|
void FUN_004dd258(void)
|
|
|
|
{
|
|
FUN_004ded48(s_scanf___floating_point_formats_n_0052099f);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd264 file=? name=FUN_004dd264 */
|
|
|
|
float10 __cdecl
|
|
FUN_004dd264(int param_1,undefined4 param_2,undefined4 param_3,ushort param_4,undefined4 param_5,
|
|
undefined4 param_6)
|
|
|
|
{
|
|
ushort uVar1;
|
|
ushort uVar2;
|
|
ushort uVar3;
|
|
float10 fVar4;
|
|
undefined8 local_10;
|
|
|
|
if (param_1 == 0) {
|
|
uVar1 = 0x407e;
|
|
uVar3 = 0x3f6a;
|
|
}
|
|
else {
|
|
uVar1 = 0x43fe;
|
|
uVar3 = 0x3bcd;
|
|
}
|
|
uVar2 = param_4 & 0x7fff;
|
|
if (uVar2 == 0x7fff) {
|
|
return (float10)CONCAT28(param_4,CONCAT26(param_3._2_2_,CONCAT24((short)param_3,param_2)));
|
|
}
|
|
if (uVar1 < uVar2) {
|
|
local_10 = (double)CONCAT44(param_6,param_5);
|
|
}
|
|
else {
|
|
if (uVar1 == uVar2) {
|
|
FUN_004dc9f8();
|
|
FUN_004dc9f8();
|
|
FUN_004dc9f8();
|
|
return (float10)(float)(float10)CONCAT28(param_4,CONCAT26(param_3._2_2_,
|
|
CONCAT24((short)param_3,param_2)));
|
|
}
|
|
if (((((short)param_2 == 0 && uVar2 == 0) && param_2._2_2_ == 0) && (short)param_3 == 0) &&
|
|
param_3._2_2_ == 0) {
|
|
return (float10)CONCAT28(param_4,CONCAT26(param_3._2_2_,CONCAT24((short)param_3,param_2)));
|
|
}
|
|
if (uVar3 <= uVar2) {
|
|
return (float10)CONCAT28(param_4,CONCAT26(param_3._2_2_,CONCAT24((short)param_3,param_2)));
|
|
}
|
|
local_10 = 0.0;
|
|
}
|
|
DAT_00520bcc = 0x22;
|
|
if ((param_4 & 0x8000) == 0) {
|
|
fVar4 = (float10)local_10;
|
|
}
|
|
else {
|
|
fVar4 = -(float10)local_10;
|
|
}
|
|
return fVar4;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd35c file=? name=FUN_004dd35c */
|
|
|
|
char * __cdecl FUN_004dd35c(uint param_1,char *param_2,uint param_3,char param_4,char param_5)
|
|
|
|
{
|
|
char cVar1;
|
|
char *pcVar2;
|
|
char *pcVar3;
|
|
char local_28 [36];
|
|
|
|
pcVar3 = param_2;
|
|
if ((1 < (int)param_3) && ((int)param_3 < 0x25)) {
|
|
if (((int)param_1 < 0) && (param_4 != '\0')) {
|
|
*param_2 = '-';
|
|
pcVar3 = param_2 + 1;
|
|
param_1 = -param_1;
|
|
}
|
|
pcVar2 = local_28;
|
|
do {
|
|
*pcVar2 = (char)(param_1 % param_3);
|
|
pcVar2 = pcVar2 + 1;
|
|
param_1 = param_1 / param_3;
|
|
} while (param_1 != 0);
|
|
while (pcVar2 != local_28) {
|
|
pcVar2 = pcVar2 + -1;
|
|
cVar1 = *pcVar2;
|
|
if (cVar1 < '\n') {
|
|
*pcVar3 = cVar1 + '0';
|
|
pcVar3 = pcVar3 + 1;
|
|
}
|
|
else {
|
|
*pcVar3 = cVar1 + param_5 + -10;
|
|
pcVar3 = pcVar3 + 1;
|
|
}
|
|
}
|
|
}
|
|
*pcVar3 = '\0';
|
|
return param_2;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd3d0 file=? name=FUN_004dd3d0 */
|
|
|
|
void __cdecl FUN_004dd3d0(uint param_1,char *param_2)
|
|
|
|
{
|
|
FUN_004dd35c(param_1,param_2,10,'\0','a');
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd3ec file=? name=FUN_004dd3ec */
|
|
|
|
void __cdecl FUN_004dd3ec(uint param_1,char *param_2,uint param_3)
|
|
|
|
{
|
|
FUN_004dd35c(param_1,param_2,param_3,param_3 == 10,'a');
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd41c file=? name=FUN_004dd41c */
|
|
|
|
void __cdecl FUN_004dd41c(uint param_1,char *param_2,uint param_3)
|
|
|
|
{
|
|
FUN_004dd35c(param_1,param_2,param_3,'\0','a');
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd43c file=? name=FUN_004dd43c */
|
|
|
|
void __cdecl FUN_004dd43c(uint param_1,char *param_2,uint param_3)
|
|
|
|
{
|
|
FUN_004dd35c(param_1,param_2,param_3,param_3 == 10,'a');
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd464 file=? name=FUN_004dd464 */
|
|
|
|
undefined4 __cdecl FUN_004dd464(int *param_1)
|
|
|
|
{
|
|
if (*param_1 == 4) {
|
|
param_1[7] = 0;
|
|
param_1[8] = 0;
|
|
*(undefined2 *)(param_1 + 9) = 0;
|
|
return 1;
|
|
}
|
|
if (*param_1 == 5) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd494 file=? name=FUN_004dd494 */
|
|
|
|
void __cdecl FUN_004dd494(undefined *param_1,undefined *param_2)
|
|
|
|
{
|
|
PTR_FUN_005209fc = param_1;
|
|
PTR_FUN_00520a00 = param_2;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd4b0 file=? name=FUN_004dd4b0 */
|
|
|
|
void __cdecl FUN_004dd4b0(uint param_1)
|
|
|
|
{
|
|
FUN_004de144(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd4c0 file=? name=FUN_004dd4c0 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void __cdecl FUN_004dd4c0(undefined4 param_1)
|
|
|
|
{
|
|
DAT_00520a48 = param_1;
|
|
_DAT_00520a4c = 0;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd4d4 file=? name=FUN_004dd4d4 */
|
|
|
|
uint FUN_004dd4d4(void)
|
|
|
|
{
|
|
DAT_00520a48 = DAT_00520a48 * 0x15a4e35 + 1;
|
|
return DAT_00520a48 >> 0x10 & 0x7fff;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd53c file=? name=FUN_004dd53c */
|
|
|
|
uint __cdecl FUN_004dd53c(char param_1,uint param_2,uint param_3)
|
|
|
|
{
|
|
if ((param_1 == 'G') || (param_1 == 'g')) {
|
|
while (*(char *)(param_3 - 1) == '0') {
|
|
param_3 = param_3 - 1;
|
|
if (param_3 <= param_2) {
|
|
return param_2;
|
|
}
|
|
}
|
|
}
|
|
if (*PTR_DAT_005207a0 == *(char *)(param_3 - 1)) {
|
|
param_3 = param_3 - 1;
|
|
}
|
|
return param_3;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd574 file=? name=FUN_004dd574 */
|
|
|
|
byte * __cdecl
|
|
FUN_004dd574(float10 *param_1,uint param_2,byte *param_3,byte param_4,char param_5,int param_6)
|
|
|
|
{
|
|
char cVar1;
|
|
int iVar2;
|
|
char *pcVar3;
|
|
byte *pbVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
byte *pbVar7;
|
|
byte *pbVar8;
|
|
int iVar9;
|
|
char *pcVar10;
|
|
byte local_3c [46];
|
|
byte local_e;
|
|
byte local_d;
|
|
uint local_c;
|
|
uint local_8;
|
|
|
|
local_e = *PTR_DAT_005207a0;
|
|
if (0x28 < (int)param_2) {
|
|
param_2 = 0x28;
|
|
}
|
|
local_c = param_2;
|
|
local_d = param_4 & 0xdf;
|
|
if (local_d == 0x46) {
|
|
uVar5 = -param_2;
|
|
if (0 < (int)-param_2) {
|
|
param_2 = 0;
|
|
uVar5 = 0;
|
|
}
|
|
}
|
|
else if ((int)param_2 < 1) {
|
|
uVar5 = 1;
|
|
}
|
|
else {
|
|
uVar5 = param_2;
|
|
if (local_d == 0x45) {
|
|
uVar5 = param_2 + 1;
|
|
param_2 = param_2 + 1;
|
|
}
|
|
}
|
|
iVar2 = FUN_004dddc8(param_1,uVar5,&local_8,(undefined4 *)local_3c,param_6);
|
|
if (iVar2 == 0x7fff) {
|
|
if (local_8 == 0) {
|
|
pcVar3 = &DAT_00520a55;
|
|
}
|
|
else {
|
|
pcVar3 = &DAT_00520a50;
|
|
}
|
|
uVar5 = 0xffffffff;
|
|
do {
|
|
pcVar10 = pcVar3;
|
|
if (uVar5 == 0) break;
|
|
uVar5 = uVar5 - 1;
|
|
pcVar10 = pcVar3 + 1;
|
|
cVar1 = *pcVar3;
|
|
pcVar3 = pcVar10;
|
|
} while (cVar1 != '\0');
|
|
uVar5 = ~uVar5;
|
|
pbVar7 = (byte *)(pcVar10 + -uVar5);
|
|
pbVar4 = param_3;
|
|
for (uVar6 = uVar5 >> 2; uVar6 != 0; uVar6 = uVar6 - 1) {
|
|
*(undefined4 *)pbVar4 = *(undefined4 *)pbVar7;
|
|
pbVar7 = pbVar7 + 4;
|
|
pbVar4 = pbVar4 + 4;
|
|
}
|
|
for (uVar5 = uVar5 & 3; uVar5 != 0; uVar5 = uVar5 - 1) {
|
|
*pbVar4 = *pbVar7;
|
|
pbVar7 = pbVar7 + 1;
|
|
pbVar4 = pbVar4 + 1;
|
|
}
|
|
return param_3;
|
|
}
|
|
if (iVar2 == 0x7ffe) {
|
|
if (local_8 == 0) {
|
|
pcVar3 = &DAT_00520a5f;
|
|
}
|
|
else {
|
|
pcVar3 = &DAT_00520a5a;
|
|
}
|
|
uVar5 = 0xffffffff;
|
|
do {
|
|
pcVar10 = pcVar3;
|
|
if (uVar5 == 0) break;
|
|
uVar5 = uVar5 - 1;
|
|
pcVar10 = pcVar3 + 1;
|
|
cVar1 = *pcVar3;
|
|
pcVar3 = pcVar10;
|
|
} while (cVar1 != '\0');
|
|
uVar5 = ~uVar5;
|
|
pbVar7 = (byte *)(pcVar10 + -uVar5);
|
|
pbVar4 = param_3;
|
|
for (uVar6 = uVar5 >> 2; uVar6 != 0; uVar6 = uVar6 - 1) {
|
|
*(undefined4 *)pbVar4 = *(undefined4 *)pbVar7;
|
|
pbVar7 = pbVar7 + 4;
|
|
pbVar4 = pbVar4 + 4;
|
|
}
|
|
for (uVar5 = uVar5 & 3; uVar5 != 0; uVar5 = uVar5 - 1) {
|
|
*pbVar4 = *pbVar7;
|
|
pbVar7 = pbVar7 + 1;
|
|
pbVar4 = pbVar4 + 1;
|
|
}
|
|
return param_3;
|
|
}
|
|
pbVar7 = param_3;
|
|
if (local_8 != 0) {
|
|
*param_3 = 0x2d;
|
|
pbVar7 = param_3 + 1;
|
|
}
|
|
if (local_d != 0x46) {
|
|
if ((local_d != 0x47) || (iVar2 < -3)) goto LAB_004dd739;
|
|
uVar5 = param_2;
|
|
if (param_2 == 0) {
|
|
uVar5 = 1;
|
|
}
|
|
if ((int)uVar5 < iVar2) goto LAB_004dd739;
|
|
}
|
|
if (iVar2 < 0x29) {
|
|
if (iVar2 < 1) {
|
|
*pbVar7 = 0x30;
|
|
pbVar7[1] = local_e;
|
|
pbVar7 = pbVar7 + 2;
|
|
for (iVar9 = iVar2; iVar2 = 0, iVar9 != 0; iVar9 = iVar9 + 1) {
|
|
*pbVar7 = 0x30;
|
|
pbVar7 = pbVar7 + 1;
|
|
}
|
|
}
|
|
iVar9 = 0;
|
|
for (pbVar4 = local_3c; *pbVar4 != 0; pbVar4 = pbVar4 + 1) {
|
|
*pbVar7 = *pbVar4;
|
|
pbVar8 = pbVar7 + 1;
|
|
iVar2 = iVar2 + -1;
|
|
if (iVar2 == 0) {
|
|
*pbVar8 = local_e;
|
|
pbVar8 = pbVar7 + 2;
|
|
iVar9 = iVar9 + 1;
|
|
}
|
|
pbVar7 = pbVar8;
|
|
}
|
|
if ((int)(iVar9 + local_c) < (int)param_2) {
|
|
uVar5 = param_2 - (iVar9 + local_c);
|
|
pbVar4 = (byte *)FUN_004d4988((undefined4 *)pbVar7,0x30,uVar5);
|
|
pbVar7 = pbVar7 + uVar5;
|
|
}
|
|
else if ((iVar2 != 1) && (param_5 == '\0')) {
|
|
pbVar4 = (byte *)FUN_004dd53c(param_4,(uint)param_3,(uint)pbVar7);
|
|
pbVar7 = pbVar4;
|
|
}
|
|
if (pbVar7 == param_3) {
|
|
*pbVar7 = 0x30;
|
|
pbVar7 = pbVar7 + 1;
|
|
}
|
|
*pbVar7 = 0;
|
|
return pbVar4;
|
|
}
|
|
LAB_004dd739:
|
|
*pbVar7 = local_3c[0];
|
|
pbVar4 = pbVar7 + 1;
|
|
if (local_3c[1] == 0) {
|
|
if (param_5 != '\0') {
|
|
*pbVar4 = local_e;
|
|
pbVar4 = pbVar7 + 2;
|
|
}
|
|
}
|
|
else {
|
|
*pbVar4 = local_e;
|
|
pbVar4 = pbVar7 + 2;
|
|
pbVar7 = local_3c + 2;
|
|
while (local_3c[1] != 0) {
|
|
*pbVar4 = local_3c[1];
|
|
pbVar4 = pbVar4 + 1;
|
|
local_3c[1] = *pbVar7;
|
|
pbVar7 = pbVar7 + 1;
|
|
}
|
|
if (param_5 == '\0') {
|
|
pbVar4 = (byte *)FUN_004dd53c(param_4,(uint)param_3,(uint)pbVar4);
|
|
}
|
|
}
|
|
*pbVar4 = param_4 & 0x20 | 0x45;
|
|
pbVar7 = (byte *)(iVar2 + -1);
|
|
if ((int)pbVar7 < 0) {
|
|
pbVar7 = (byte *)-(int)pbVar7;
|
|
pbVar4[1] = 0x2d;
|
|
}
|
|
else {
|
|
pbVar4[1] = 0x2b;
|
|
}
|
|
if ((int)pbVar7 < 1000) {
|
|
if ((int)pbVar7 < 100) {
|
|
iVar2 = 2;
|
|
}
|
|
else {
|
|
iVar2 = 3;
|
|
}
|
|
}
|
|
else {
|
|
iVar2 = 4;
|
|
}
|
|
pbVar4[iVar2 + 2] = 0;
|
|
pbVar4 = pbVar4 + iVar2 + 2;
|
|
pbVar8 = pbVar4;
|
|
for (; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
pbVar4 = pbVar4 + -1;
|
|
*pbVar4 = (char)((int)pbVar7 % 10) + 0x30;
|
|
pbVar8 = (byte *)((int)pbVar7 / 10);
|
|
pbVar7 = pbVar8;
|
|
}
|
|
return pbVar8;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd7f4 file=? name=FUN_004dd7f4 */
|
|
|
|
int __cdecl FUN_004dd7f4(int param_1,int param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
if (param_2 == 0) {
|
|
iVar1 = param_1 + 8;
|
|
}
|
|
else {
|
|
iVar1 = param_1 + 0xc;
|
|
}
|
|
return iVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004dd861 file=? name=FUN_004dd861 */
|
|
|
|
void __fastcall FUN_004dd861(int param_1)
|
|
|
|
{
|
|
int *piVar1;
|
|
int *piVar2;
|
|
undefined4 *puVar3;
|
|
undefined2 in_AX;
|
|
uint uVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
int unaff_EBP;
|
|
int unaff_ESI;
|
|
int iVar7;
|
|
float10 fVar8;
|
|
|
|
*(undefined1 *)(param_1 + 0x4589dc45) = *(undefined1 *)(param_1 + 0x4589dc45);
|
|
*(undefined2 *)(unaff_EBP + -0x1c) = in_AX;
|
|
*(int *)(unaff_EBP + -0x34) = unaff_EBP + -0x24;
|
|
piVar1 = (int *)(unaff_EBP + -0x24);
|
|
*(undefined *)(unaff_EBP + -0x3d) = *PTR_DAT_005207a0;
|
|
do {
|
|
*(int *)(unaff_EBP + -0x14) = *(int *)(unaff_EBP + -0x14) + 1;
|
|
uVar4 = (**(code **)(unaff_EBP + 0xc))(*(undefined4 *)(unaff_EBP + 0x14));
|
|
if (uVar4 == 0xffffffff) {
|
|
*(undefined4 *)(unaff_EBP + -0x18) = 0xffffffff;
|
|
goto LAB_004ddb50;
|
|
}
|
|
} while (((uVar4 & 0x80) == 0) && (((&DAT_005207dd)[uVar4] & 1) != 0));
|
|
piVar2 = (int *)(unaff_EBP + 0x18);
|
|
*piVar2 = *piVar2 + -1;
|
|
if (-1 < *piVar2) {
|
|
if (uVar4 == 0x2b) {
|
|
*(undefined1 *)(unaff_EBP + -0xb) = 1;
|
|
}
|
|
else {
|
|
iVar7 = unaff_ESI;
|
|
if (uVar4 != 0x2d) goto LAB_004dd8e2;
|
|
*(undefined1 *)(unaff_EBP + -0xb) = 1;
|
|
*(undefined1 *)(unaff_EBP + -9) = 1;
|
|
}
|
|
while( true ) {
|
|
piVar2 = (int *)(unaff_EBP + 0x18);
|
|
*piVar2 = *piVar2 + -1;
|
|
if (*piVar2 < 0) break;
|
|
*(int *)(unaff_EBP + -0x14) = *(int *)(unaff_EBP + -0x14) + 1;
|
|
uVar4 = (**(code **)(unaff_EBP + 0xc))(*(undefined4 *)(unaff_EBP + 0x14));
|
|
iVar7 = unaff_ESI;
|
|
LAB_004dd8e2:
|
|
if ((*(char *)(unaff_EBP + -10) == '\x01') && (*(char *)(unaff_EBP + -0xb) != '\0')) {
|
|
if (uVar4 == 0x49) {
|
|
*(int *)(unaff_EBP + -0x14) = *(int *)(unaff_EBP + -0x14) + 1;
|
|
uVar4 = (**(code **)(unaff_EBP + 0xc))(*(undefined4 *)(unaff_EBP + 0x14));
|
|
piVar1 = (int *)(unaff_EBP + 0x18);
|
|
*piVar1 = *piVar1 + -1;
|
|
if ((*piVar1 < 0) || (uVar4 != 0x4e)) goto LAB_004ddb4b;
|
|
*(int *)(unaff_EBP + -0x14) = *(int *)(unaff_EBP + -0x14) + 1;
|
|
uVar4 = (**(code **)(unaff_EBP + 0xc))(*(undefined4 *)(unaff_EBP + 0x14));
|
|
piVar1 = (int *)(unaff_EBP + 0x18);
|
|
*piVar1 = *piVar1 + -1;
|
|
if ((*piVar1 < 0) || (uVar4 != 0x46)) goto LAB_004ddb4b;
|
|
if (*(char *)(unaff_EBP + -9) == '\0') {
|
|
*(undefined4 *)(unaff_EBP + -0x24) = DAT_00520a64;
|
|
*(undefined4 *)(unaff_EBP + -0x20) = DAT_00520a68;
|
|
*(undefined2 *)(unaff_EBP + -0x1c) = DAT_00520a6c;
|
|
}
|
|
else {
|
|
*(undefined4 *)(unaff_EBP + -0x24) = DAT_00520a6e;
|
|
*(undefined4 *)(unaff_EBP + -0x20) = DAT_00520a72;
|
|
*(undefined2 *)(unaff_EBP + -0x1c) = DAT_00520a76;
|
|
}
|
|
goto LAB_004ddb20;
|
|
}
|
|
if (uVar4 == 0x4e) {
|
|
*(int *)(unaff_EBP + -0x14) = *(int *)(unaff_EBP + -0x14) + 1;
|
|
uVar4 = (**(code **)(unaff_EBP + 0xc))(*(undefined4 *)(unaff_EBP + 0x14));
|
|
piVar1 = (int *)(unaff_EBP + 0x18);
|
|
*piVar1 = *piVar1 + -1;
|
|
if ((*piVar1 < 0) || (uVar4 != 0x41)) goto LAB_004ddb4b;
|
|
*(int *)(unaff_EBP + -0x14) = *(int *)(unaff_EBP + -0x14) + 1;
|
|
uVar4 = (**(code **)(unaff_EBP + 0xc))(*(undefined4 *)(unaff_EBP + 0x14));
|
|
piVar1 = (int *)(unaff_EBP + 0x18);
|
|
*piVar1 = *piVar1 + -1;
|
|
if ((*piVar1 < 0) || (uVar4 != 0x4e)) goto LAB_004ddb4b;
|
|
if (*(char *)(unaff_EBP + -9) == '\0') {
|
|
*(undefined4 *)(unaff_EBP + -0x24) = DAT_00520a78;
|
|
*(undefined4 *)(unaff_EBP + -0x20) = DAT_00520a7c;
|
|
*(undefined2 *)(unaff_EBP + -0x1c) = DAT_00520a80;
|
|
}
|
|
else {
|
|
*(undefined4 *)(unaff_EBP + -0x24) = DAT_00520a82;
|
|
*(undefined4 *)(unaff_EBP + -0x20) = DAT_00520a86;
|
|
*(undefined2 *)(unaff_EBP + -0x1c) = DAT_00520a8a;
|
|
}
|
|
goto LAB_004ddb20;
|
|
}
|
|
}
|
|
*(undefined1 *)(unaff_EBP + -10) = 0;
|
|
unaff_ESI = iVar7;
|
|
if (uVar4 == (int)*(char *)(unaff_EBP + -0x3d)) {
|
|
if (*(int *)(unaff_EBP + -4) != 0x8000) goto LAB_004dd9c8;
|
|
if (iVar7 < 1) {
|
|
iVar7 = 0;
|
|
}
|
|
*(int *)(unaff_EBP + -4) = iVar7;
|
|
}
|
|
else {
|
|
if (((int)uVar4 < 0x30) || (0x39 < (int)uVar4)) goto LAB_004dd9c8;
|
|
uVar4 = uVar4 - 0x30;
|
|
unaff_ESI = iVar7 + 1;
|
|
if (unaff_ESI < 1) {
|
|
**(undefined2 **)(unaff_EBP + -0x34) = (short)uVar4;
|
|
if (uVar4 == 0) {
|
|
unaff_ESI = -1;
|
|
if (*(int *)(unaff_EBP + -4) != 0x8000) {
|
|
*(int *)(unaff_EBP + -4) = *(int *)(unaff_EBP + -4) + -1;
|
|
}
|
|
}
|
|
else {
|
|
unaff_ESI = 1;
|
|
}
|
|
}
|
|
else if (unaff_ESI < 10) {
|
|
*piVar1 = *piVar1 * 10 + uVar4;
|
|
}
|
|
else if (unaff_ESI <= *(int *)(unaff_EBP + -8)) {
|
|
*(int *)(unaff_EBP + -0x3c) = *piVar1;
|
|
*(undefined4 *)(unaff_EBP + -0x38) = *(undefined4 *)(unaff_EBP + -0x20);
|
|
iVar5 = FUN_004dd098((uint *)(unaff_EBP + -0x3c),uVar4);
|
|
if (iVar5 == 0) {
|
|
*piVar1 = *(int *)(unaff_EBP + -0x3c);
|
|
*(undefined4 *)(unaff_EBP + -0x20) = *(undefined4 *)(unaff_EBP + -0x38);
|
|
}
|
|
else {
|
|
*(int *)(unaff_EBP + -8) = iVar7;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
uVar4 = 0x65;
|
|
LAB_004dd9c8:
|
|
if (unaff_ESI == -2) {
|
|
LAB_004ddb4b:
|
|
*(undefined4 *)(unaff_EBP + -0x18) = 0;
|
|
LAB_004ddb50:
|
|
if (-1 < *(int *)(unaff_EBP + 0x18)) {
|
|
(**(code **)(unaff_EBP + 0x10))(uVar4,*(undefined4 *)(unaff_EBP + 0x14));
|
|
*(int *)(unaff_EBP + -0x14) = *(int *)(unaff_EBP + -0x14) + -1;
|
|
}
|
|
*(undefined4 *)(unaff_EBP + -0x24) = 0;
|
|
*(undefined4 *)(unaff_EBP + -0x20) = 0;
|
|
*(undefined2 *)(unaff_EBP + -0x1c) = 0;
|
|
}
|
|
else {
|
|
if (*(int *)(unaff_EBP + -4) == 0x8000) {
|
|
*(int *)(unaff_EBP + -4) = unaff_ESI;
|
|
}
|
|
iVar7 = 0;
|
|
if ((uVar4 == 0x65) || (uVar4 == 0x45)) {
|
|
*(undefined4 *)(unaff_EBP + -0x44) = 1;
|
|
LAB_004dd9f0:
|
|
while( true ) {
|
|
piVar1 = (int *)(unaff_EBP + 0x18);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 < 0) break;
|
|
*(int *)(unaff_EBP + -0x14) = *(int *)(unaff_EBP + -0x14) + 1;
|
|
uVar4 = (**(code **)(unaff_EBP + 0xc))(*(undefined4 *)(unaff_EBP + 0x14));
|
|
if (*(int *)(unaff_EBP + -0x44) == 0) goto LAB_004dda1d;
|
|
*(undefined4 *)(unaff_EBP + -0x44) = 0;
|
|
if (uVar4 != 0x2d) goto LAB_004dda18;
|
|
*(undefined1 *)(unaff_EBP + -0xc) = 1;
|
|
}
|
|
}
|
|
else {
|
|
LAB_004dda43:
|
|
(**(code **)(unaff_EBP + 0x10))(uVar4,*(undefined4 *)(unaff_EBP + 0x14));
|
|
*(int *)(unaff_EBP + -0x14) = *(int *)(unaff_EBP + -0x14) + -1;
|
|
}
|
|
if (*(char *)(unaff_EBP + -0xc) != '\0') {
|
|
iVar7 = -iVar7;
|
|
*(char *)(unaff_EBP + -0xd) = -*(char *)(unaff_EBP + -0xd);
|
|
}
|
|
if (unaff_ESI < 0) {
|
|
*(undefined4 *)(unaff_EBP + -0x24) = 0;
|
|
*(undefined4 *)(unaff_EBP + -0x20) = 0;
|
|
*(undefined2 *)(unaff_EBP + -0x1c) = 0;
|
|
}
|
|
else if (*(char *)(unaff_EBP + -0xd) == '\0') {
|
|
if (*(int *)(unaff_EBP + -8) < unaff_ESI) {
|
|
unaff_ESI = *(int *)(unaff_EBP + -8);
|
|
}
|
|
uVar4 = iVar7 + (*(int *)(unaff_EBP + -4) - unaff_ESI);
|
|
fVar8 = FUN_004dcdbc((longlong *)(unaff_EBP + -0x24));
|
|
*(float10 *)(unaff_EBP + -0x24) = fVar8;
|
|
if (uVar4 != 0) {
|
|
uVar6 = uVar4;
|
|
if ((int)uVar4 < 1) {
|
|
uVar6 = -uVar4;
|
|
}
|
|
fVar8 = FUN_004de144(uVar6);
|
|
*(float10 *)(unaff_EBP + -0x30) = fVar8;
|
|
if ((int)uVar4 < 0) {
|
|
*(float10 *)(unaff_EBP + -0x24) =
|
|
*(float10 *)(unaff_EBP + -0x24) / *(float10 *)(unaff_EBP + -0x30);
|
|
}
|
|
else {
|
|
*(float10 *)(unaff_EBP + -0x24) =
|
|
*(float10 *)(unaff_EBP + -0x30) * *(float10 *)(unaff_EBP + -0x24);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (*(char *)(unaff_EBP + -0xd) == '\x01') {
|
|
*(undefined2 *)(*(int *)(unaff_EBP + -0x34) + 6) = 0xffff;
|
|
*(undefined2 *)(*(int *)(unaff_EBP + -0x34) + 4) = 0xffff;
|
|
*(undefined2 *)(*(int *)(unaff_EBP + -0x34) + 2) = 0xffff;
|
|
**(undefined2 **)(unaff_EBP + -0x34) = 0xffff;
|
|
*(undefined2 *)(*(int *)(unaff_EBP + -0x34) + 8) = 0x7ffe;
|
|
}
|
|
else {
|
|
*(undefined4 *)(unaff_EBP + -0x24) = 0;
|
|
*(undefined4 *)(unaff_EBP + -0x20) = 0;
|
|
*(undefined2 *)(unaff_EBP + -0x1c) = 0;
|
|
}
|
|
*(undefined4 *)(unaff_EBP + -0x18) = 2;
|
|
}
|
|
}
|
|
if (*(char *)(unaff_EBP + -9) != '\0') {
|
|
*(float10 *)(unaff_EBP + -0x24) = -*(float10 *)(unaff_EBP + -0x24);
|
|
}
|
|
LAB_004ddb20:
|
|
**(int **)(unaff_EBP + 0x1c) = **(int **)(unaff_EBP + 0x1c) + *(int *)(unaff_EBP + -0x14);
|
|
**(undefined4 **)(unaff_EBP + 0x20) = *(undefined4 *)(unaff_EBP + -0x18);
|
|
puVar3 = *(undefined4 **)(unaff_EBP + 8);
|
|
*puVar3 = *(undefined4 *)(unaff_EBP + -0x24);
|
|
puVar3[1] = *(undefined4 *)(unaff_EBP + -0x20);
|
|
*(undefined2 *)(puVar3 + 2) = *(undefined2 *)(unaff_EBP + -0x1c);
|
|
return;
|
|
LAB_004dda18:
|
|
if (uVar4 != 0x2b) {
|
|
LAB_004dda1d:
|
|
if (((int)uVar4 < 0x30) || (0x39 < (int)uVar4)) goto LAB_004dda43;
|
|
iVar7 = uVar4 + iVar7 * 10 + -0x30;
|
|
if (0x1344 < iVar7) {
|
|
*(undefined1 *)(unaff_EBP + -0xd) = 1;
|
|
}
|
|
}
|
|
goto LAB_004dd9f0;
|
|
}
|
|
|
|
|
|
|
|
/* @004ddc7c file=? name=FUN_004ddc7c */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
void __cdecl FUN_004ddc7c(float *param_1,double *param_2,uint param_3)
|
|
|
|
{
|
|
float10 fVar1;
|
|
|
|
if ((param_3 & 4) == 0) {
|
|
if ((param_3 & 8) == 0) {
|
|
fVar1 = FUN_004dd264(0,*param_1,param_1[1],SUB42(param_1[2],0),SUB84((double)_DAT_00520a64,0),
|
|
(int)((ulonglong)(double)_DAT_00520a64 >> 0x20));
|
|
*(float *)param_2 = (float)fVar1;
|
|
}
|
|
else {
|
|
*(float *)param_2 = *param_1;
|
|
*(float *)((int)param_2 + 4) = param_1[1];
|
|
*(undefined2 *)(param_2 + 1) = *(undefined2 *)(param_1 + 2);
|
|
}
|
|
}
|
|
else {
|
|
fVar1 = FUN_004dd264(1,*param_1,param_1[1],SUB42(param_1[2],0),DAT_005209d4,DAT_005209d8);
|
|
*param_2 = (double)fVar1;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004ddd20 file=? name=FUN_004ddd20 */
|
|
|
|
void __cdecl FUN_004ddd20(undefined4 param_1,int *param_2)
|
|
|
|
{
|
|
*param_2 = *param_2 + -1;
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004ddd2c file=? name=FUN_004ddd2c */
|
|
|
|
undefined1 [10] __cdecl FUN_004ddd2c(undefined4 param_1,undefined4 *param_2)
|
|
|
|
{
|
|
undefined1 local_18 [10];
|
|
int local_c;
|
|
|
|
thunk_FUN_004dd258();
|
|
if ((0 < local_c) && (local_c == 2)) {
|
|
DAT_00520bcc = 0x22;
|
|
}
|
|
if (param_2 != (undefined4 *)0x0) {
|
|
*param_2 = param_1;
|
|
}
|
|
return local_18;
|
|
}
|
|
|
|
|
|
|
|
/* @004ddd94 file=? name=FUN_004ddd94 */
|
|
|
|
void __cdecl FUN_004ddd94(undefined4 param_1,undefined4 *param_2)
|
|
|
|
{
|
|
undefined1 auVar1 [10];
|
|
undefined4 uVar2;
|
|
undefined4 uVar3;
|
|
|
|
uVar2 = DAT_005209d4;
|
|
uVar3 = DAT_005209d8;
|
|
auVar1 = FUN_004ddd2c(param_1,param_2);
|
|
FUN_004dd264(1,auVar1._0_4_,auVar1._4_4_,auVar1._8_2_,uVar2,uVar3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dddc8 file=? name=FUN_004dddc8 */
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
int __cdecl
|
|
FUN_004dddc8(float10 *param_1,uint param_2,uint *param_3,undefined4 *param_4,int param_5)
|
|
|
|
{
|
|
ushort uVar1;
|
|
uint uVar2;
|
|
undefined4 uVar3;
|
|
uint uVar4;
|
|
char *pcVar5;
|
|
byte bVar6;
|
|
uint uVar7;
|
|
float10 fVar8;
|
|
undefined4 *local_28;
|
|
int local_18;
|
|
undefined1 local_10 [8];
|
|
ushort uStack_8;
|
|
short local_6;
|
|
|
|
local_6 = 10;
|
|
if (param_5 == 2) {
|
|
_local_10 = (float10)*(float *)param_1;
|
|
}
|
|
else if (param_5 == 6) {
|
|
_local_10 = (float10)*(double *)param_1;
|
|
}
|
|
else if (param_5 == 8) {
|
|
_local_10 = *param_1;
|
|
}
|
|
uVar1 = uStack_8;
|
|
uVar2 = (uint)uStack_8;
|
|
_local_10 = (float10)CONCAT28(uStack_8 & 0x7fff,local_10);
|
|
*param_3 = (uint)((uVar1 & 0x8000) != 0);
|
|
uVar1 = FUN_004dce10((float10 *)local_10);
|
|
uVar1 = uVar1 & 0x4700;
|
|
if (uVar1 != 0x4000) {
|
|
if (uVar1 == 0x500) {
|
|
return 0x7fff;
|
|
}
|
|
if (uVar1 == 0x100) {
|
|
return 0x7ffe;
|
|
}
|
|
uVar2 = ((uVar2 & 0x7fff) - 0x3fff) * 0x4d10 + ((uint)local_10[7] * 2 & 0xff) * 0x4d;
|
|
local_18 = (int)uVar2 >> 0x10;
|
|
if ((uVar2 & 0xffff) != 0) {
|
|
local_18 = local_18 + 1;
|
|
}
|
|
uVar2 = param_2;
|
|
if ((0 < (int)param_2) || (uVar2 = local_18 - param_2, -1 < (int)uVar2)) {
|
|
if (0x13 < (int)uVar2) {
|
|
uVar2 = 0x13;
|
|
}
|
|
for (uVar7 = uVar2 - local_18; uVar7 != 0; uVar7 = uVar7 + uVar4) {
|
|
uVar4 = uVar7;
|
|
if ((int)uVar7 < 0) {
|
|
uVar4 = -uVar7;
|
|
}
|
|
if (0x1344 < (int)uVar4) {
|
|
uVar4 = 0x1344;
|
|
}
|
|
fVar8 = FUN_004de144(uVar4);
|
|
if ((int)uVar7 < 0) {
|
|
_local_10 = _local_10 / fVar8;
|
|
}
|
|
else {
|
|
_local_10 = _local_10 * fVar8;
|
|
uVar4 = -uVar4;
|
|
}
|
|
}
|
|
fVar8 = FUN_004de144(uVar2);
|
|
if (_local_10 <= fVar8) {
|
|
fVar8 = FUN_004de144(uVar2 - 1);
|
|
uVar7 = uVar2;
|
|
if (_local_10 < fVar8) {
|
|
local_18 = local_18 + -1;
|
|
uVar7 = uVar2 - 1;
|
|
if (0 < (int)param_2) {
|
|
_local_10 = _local_10 * (float10)(int)local_6;
|
|
uVar7 = uVar2;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
local_18 = local_18 + 1;
|
|
uVar7 = uVar2 + 1;
|
|
if (((int)uVar7 < 0x14) && (0 < (int)param_2)) {
|
|
_local_10 = _local_10 / (float10)(int)local_6;
|
|
uVar7 = uVar2;
|
|
}
|
|
}
|
|
if (-1 < (int)uVar7) {
|
|
FUN_004dcdec((longlong *)local_10,(float10 *)local_10);
|
|
local_28 = (undefined4 *)((int)param_4 + uVar7);
|
|
*(undefined1 *)local_28 = 0;
|
|
pcVar5 = (char *)((int)local_28 + -1);
|
|
bVar6 = 0;
|
|
if (uVar7 == 0) {
|
|
if (local_10[0] != '\x01') goto LAB_004dde4f;
|
|
bVar6 = 0;
|
|
}
|
|
else {
|
|
do {
|
|
uVar3 = FUN_004dd070((undefined4 *)local_10);
|
|
bVar6 = bVar6 | (byte)uVar3;
|
|
*pcVar5 = (byte)uVar3 + 0x30;
|
|
pcVar5 = pcVar5 + -1;
|
|
uVar7 = uVar7 - 1;
|
|
} while (uVar7 != 0);
|
|
}
|
|
if (bVar6 == 0) {
|
|
local_18 = local_18 + 1;
|
|
if ((int)param_2 < 1) {
|
|
*(undefined1 *)local_28 = 0x30;
|
|
}
|
|
local_28 = (undefined4 *)((int)local_28 + 1);
|
|
pcVar5[1] = '1';
|
|
}
|
|
if ((int)param_2 < 1) {
|
|
param_2 = local_18 - param_2;
|
|
}
|
|
if (0x28 < (int)param_2) {
|
|
param_2 = 0x28;
|
|
}
|
|
*(undefined1 *)local_28 = 0;
|
|
uVar2 = param_2 - ((int)local_28 - (int)param_4);
|
|
if ((int)uVar2 < 1) {
|
|
return local_18;
|
|
}
|
|
FUN_004d4988(local_28,0x30,uVar2);
|
|
*(undefined1 *)((int)local_28 + uVar2) = 0;
|
|
return local_18;
|
|
}
|
|
}
|
|
}
|
|
LAB_004dde4f:
|
|
if ((int)param_2 < 1) {
|
|
param_2 = 1 - param_2;
|
|
}
|
|
if (0x28 < (int)param_2) {
|
|
param_2 = 0x28;
|
|
}
|
|
FUN_004d4988(param_4,0x30,param_2);
|
|
*(undefined1 *)((int)param_4 + param_2) = 0;
|
|
*param_3 = 0;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
/* @004de098 file=? name=FUN_004de098 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
float10 __cdecl
|
|
FUN_004de098(int param_1,undefined4 param_2,undefined8 *param_3,undefined8 *param_4,
|
|
undefined4 param_5,undefined4 param_6)
|
|
|
|
{
|
|
int iVar1;
|
|
char local_74 [80];
|
|
int local_24;
|
|
undefined4 local_20;
|
|
undefined8 local_1c;
|
|
undefined8 local_14;
|
|
undefined4 local_c;
|
|
undefined4 uStack_8;
|
|
|
|
local_24 = param_1;
|
|
local_20 = param_2;
|
|
local_1c = _DAT_004de13c;
|
|
if (param_3 != (undefined8 *)0x0) {
|
|
local_1c = *param_3;
|
|
}
|
|
local_14 = _DAT_004de13c;
|
|
if (param_4 != (undefined8 *)0x0) {
|
|
local_14 = *param_4;
|
|
}
|
|
local_c = param_5;
|
|
uStack_8 = param_6;
|
|
iVar1 = (*(code *)PTR_FUN_005209fc)(&local_24);
|
|
if (iVar1 == 0) {
|
|
FUN_004d7f10(local_74,s__s___s_error_00520a8c);
|
|
if (param_1 - 2U < 3) {
|
|
DAT_00520bcc = 0x22;
|
|
}
|
|
else {
|
|
DAT_00520bcc = 0x21;
|
|
}
|
|
FUN_004dec88(local_74);
|
|
}
|
|
return (float10)(double)CONCAT44(uStack_8,local_c);
|
|
}
|
|
|
|
|
|
|
|
/* @004de144 file=? name=FUN_004de144 */
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
float10 __cdecl FUN_004de144(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
undefined1 local_10 [8];
|
|
undefined2 uStack_8;
|
|
|
|
_local_10 = _DAT_004de2a0;
|
|
if (((-0x1345 < (int)param_1) && (_local_10 = _DAT_00520b52, (int)param_1 < 0x1345)) &&
|
|
(_local_10 = _DAT_004de2ac, param_1 != 0)) {
|
|
uVar1 = param_1;
|
|
if ((int)param_1 < 0) {
|
|
uVar1 = -param_1;
|
|
}
|
|
uVar2 = uVar1 & 7;
|
|
_local_10 = (float10)CONCAT28(*(undefined2 *)(&DAT_00520aa4 + uVar2 * 10),
|
|
CONCAT44(*(undefined4 *)(&DAT_00520aa0 + uVar2 * 10),
|
|
*(undefined4 *)(&DAT_00520a9c + uVar2 * 10)));
|
|
if (((int)uVar1 >> 3 & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520aec;
|
|
}
|
|
if ((int)uVar1 >> 4 != 0) {
|
|
if (((int)uVar1 >> 4 & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520af8;
|
|
}
|
|
if (((int)uVar1 >> 5 & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520b02;
|
|
}
|
|
if (((int)uVar1 >> 6 & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520b0c;
|
|
}
|
|
if (((int)uVar1 >> 7 & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520b16;
|
|
}
|
|
if (((int)uVar1 >> 8 & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520b20;
|
|
}
|
|
if (((int)uVar1 >> 9 & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520b2a;
|
|
}
|
|
if (((int)uVar1 >> 10 & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520b34;
|
|
}
|
|
if (((int)uVar1 >> 0xb & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520b3e;
|
|
}
|
|
if (((int)uVar1 >> 0xc & 1U) != 0) {
|
|
_local_10 = _local_10 * _DAT_00520b48;
|
|
}
|
|
}
|
|
if ((int)param_1 < 0) {
|
|
_local_10 = (float10)_DAT_004de2b8 / _local_10;
|
|
}
|
|
}
|
|
return _local_10;
|
|
}
|
|
|
|
|
|
|
|
/* @004de2bc file=? name=FUN_004de2bc */
|
|
|
|
int * __cdecl FUN_004de2bc(int param_1,int param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
|
|
piVar1 = FUN_004de55c(param_1 * param_2);
|
|
if (piVar1 != (int *)0x0) {
|
|
FUN_004d4988(piVar1,0,param_1 * param_2);
|
|
}
|
|
return piVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004de2e8 file=? name=FUN_004de2e8 */
|
|
|
|
undefined4 __cdecl FUN_004de2e8(int param_1)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint local_c;
|
|
int *local_8;
|
|
|
|
uVar2 = param_1 + 0xffffU & 0xffff0000;
|
|
uVar3 = (int)DAT_00520b60 - (int)DAT_00520b5c;
|
|
if (uVar3 != 0) {
|
|
if (uVar2 < uVar3) {
|
|
uVar3 = uVar2;
|
|
}
|
|
iVar1 = FUN_004deac8(DAT_00520b5c,uVar3);
|
|
if (iVar1 == 0) {
|
|
return 0xffffffff;
|
|
}
|
|
FUN_004de4b8(DAT_00520b5c,uVar3);
|
|
DAT_00520b5c = (int *)((int)DAT_00520b5c + uVar3);
|
|
}
|
|
if (uVar3 < uVar2) {
|
|
iVar1 = FUN_004dea5c(uVar2,&local_8,&local_c);
|
|
if (iVar1 == 0) {
|
|
return 0xffffffff;
|
|
}
|
|
if (local_8 == DAT_00520b60) {
|
|
uVar2 = uVar2 - uVar3;
|
|
}
|
|
iVar1 = FUN_004deac8(local_8,uVar2);
|
|
if (iVar1 == 0) {
|
|
FUN_004deb5c(local_8);
|
|
return 0xffffffff;
|
|
}
|
|
FUN_004de4b8(local_8,uVar2);
|
|
DAT_00520b5c = (int *)(uVar2 + (int)local_8);
|
|
DAT_00520b60 = (int *)((int)local_8 + local_c);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004de420 file=? name=FUN_004de420 */
|
|
|
|
void __cdecl FUN_004de420(int *param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
undefined4 *puVar4;
|
|
uint uVar5;
|
|
int *piVar6;
|
|
bool bVar7;
|
|
|
|
if ((param_1 != (int *)0x0) && ((param_1[-1] & 1U) != 0)) {
|
|
uVar5 = param_1[-1] & 0xfffffffe;
|
|
uVar1 = param_1[-2];
|
|
bVar7 = (uVar1 & 1) == 0;
|
|
if (bVar7) {
|
|
param_1 = (int *)((int)param_1 - uVar1);
|
|
uVar5 = uVar5 + uVar1;
|
|
}
|
|
piVar6 = (int *)(uVar5 + (int)param_1);
|
|
uVar1 = piVar6[-1];
|
|
if ((uVar1 & 1) == 0) {
|
|
piVar2 = (int *)piVar6[1];
|
|
iVar3 = *piVar6;
|
|
*piVar2 = iVar3;
|
|
*(int *)(iVar3 + 4) = piVar6[1];
|
|
if (piVar6 == DAT_00525120) {
|
|
DAT_00525120 = piVar2;
|
|
}
|
|
uVar5 = uVar5 + uVar1;
|
|
}
|
|
*(uint *)((int)param_1 + (uVar5 - 8)) = uVar5;
|
|
param_1[-1] = uVar5;
|
|
if (!bVar7) {
|
|
puVar4 = *(undefined4 **)(DAT_0052511c + 4);
|
|
*(int **)(DAT_0052511c + 4) = param_1;
|
|
param_1[1] = (int)puVar4;
|
|
*param_1 = DAT_0052511c;
|
|
*puVar4 = param_1;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004de4b8 file=? name=FUN_004de4b8 */
|
|
|
|
undefined4 __cdecl FUN_004de4b8(int *param_1,uint param_2)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
|
|
if (param_2 < 0x10) {
|
|
uVar1 = 0xffffffff;
|
|
}
|
|
else {
|
|
uVar4 = param_2 & 0xfffffffc;
|
|
iVar3 = 0;
|
|
for (piVar2 = &DAT_00524f08; (iVar3 < DAT_00525108 && ((int *)(*piVar2 + piVar2[1]) != param_1))
|
|
; piVar2 = piVar2 + 2) {
|
|
iVar3 = iVar3 + 1;
|
|
}
|
|
if (iVar3 == DAT_00525108) {
|
|
if (DAT_00525108 == 0x40) {
|
|
return 0xffffffff;
|
|
}
|
|
(&DAT_00524f08)[DAT_00525108 * 2] = param_1;
|
|
(&DAT_00524f0c)[DAT_00525108 * 2] = uVar4;
|
|
DAT_00525108 = DAT_00525108 + 1;
|
|
uVar4 = uVar4 - 8;
|
|
piVar2 = param_1 + 2;
|
|
*param_1 = 1;
|
|
}
|
|
else {
|
|
(&DAT_00524f0c)[iVar3 * 2] = (&DAT_00524f0c)[iVar3 * 2] + uVar4;
|
|
piVar2 = param_1;
|
|
}
|
|
piVar2[-1] = uVar4 | 1;
|
|
*(uint *)((int)piVar2 + (uVar4 - 8)) = uVar4 | 1;
|
|
*(undefined4 *)((int)piVar2 + (uVar4 - 4)) = 1;
|
|
FUN_004de420(piVar2);
|
|
uVar1 = 0;
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004de55c file=? name=FUN_004de55c */
|
|
|
|
int * __cdecl FUN_004de55c(uint param_1)
|
|
|
|
{
|
|
uint uVar1;
|
|
int *piVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
int *piVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
|
|
if (param_1 < 8) {
|
|
uVar8 = 0x10;
|
|
}
|
|
else {
|
|
uVar8 = (param_1 + 3 & 0xfffffffc) + 8;
|
|
}
|
|
if ((0xf < (int)uVar8) && (param_1 != 0)) {
|
|
iVar6 = 0;
|
|
piVar3 = DAT_00525120;
|
|
do {
|
|
do {
|
|
uVar1 = piVar3[-1];
|
|
if (uVar8 <= uVar1) {
|
|
iVar6 = *piVar3;
|
|
piVar2 = (int *)piVar3[1];
|
|
uVar7 = uVar1 - uVar8;
|
|
if (0xf < uVar7) {
|
|
piVar5 = (int *)(uVar8 + (int)piVar3);
|
|
*(int **)(iVar6 + 4) = piVar5;
|
|
DAT_00525120 = piVar5;
|
|
*piVar2 = (int)piVar5;
|
|
piVar5[1] = (int)piVar2;
|
|
*piVar5 = iVar6;
|
|
piVar5[-2] = uVar8 | 1;
|
|
piVar3[-1] = uVar8 | 1;
|
|
*(uint *)((int)piVar5 + (uVar7 - 8)) = uVar7;
|
|
piVar5[-1] = uVar7;
|
|
return piVar3;
|
|
}
|
|
*(int **)(iVar6 + 4) = piVar2;
|
|
*piVar2 = iVar6;
|
|
if (piVar3 == DAT_00525120) {
|
|
DAT_00525120 = piVar2;
|
|
}
|
|
*(uint *)((int)piVar3 + (uVar1 - 8)) = uVar1 | 1;
|
|
piVar3[-1] = uVar1 | 1;
|
|
return piVar3;
|
|
}
|
|
piVar2 = piVar3 + 1;
|
|
piVar3 = (int *)*piVar2;
|
|
} while ((int *)*piVar2 != DAT_00525120);
|
|
if (iVar6 == 2) {
|
|
return (int *)0x0;
|
|
}
|
|
iVar6 = iVar6 + 1;
|
|
iVar4 = FUN_004de2e8(uVar8);
|
|
piVar3 = DAT_00525120;
|
|
} while (iVar4 == 0);
|
|
}
|
|
return (int *)0x0;
|
|
}
|
|
|
|
|
|
|
|
/* @004de644 file=? name=FUN_004de644 */
|
|
|
|
int __cdecl FUN_004de644(int param_1,uint param_2)
|
|
|
|
{
|
|
int iVar1;
|
|
uint uVar2;
|
|
uint uVar3;
|
|
uint uVar4;
|
|
int *piVar5;
|
|
int *piVar6;
|
|
|
|
if (param_2 < 8) {
|
|
uVar2 = 0x10;
|
|
}
|
|
else {
|
|
uVar2 = (param_2 + 3 & 0xfffffffc) + 8;
|
|
}
|
|
if (((int)uVar2 < 0x10) || (param_2 == 0)) {
|
|
param_1 = 0;
|
|
}
|
|
else {
|
|
uVar4 = *(uint *)(param_1 + -4) & 0xfffffffe;
|
|
if (uVar2 != uVar4) {
|
|
if (uVar4 < uVar2) {
|
|
piVar5 = (int *)(param_1 + uVar4);
|
|
uVar3 = piVar5[-1];
|
|
if (((uVar3 & 1) == 0) && (uVar2 <= uVar4 + uVar3)) {
|
|
iVar1 = *piVar5;
|
|
if (piVar5 == DAT_00525120) {
|
|
piVar5 = (int *)piVar5[1];
|
|
DAT_00525120 = piVar5;
|
|
}
|
|
else {
|
|
piVar5 = (int *)piVar5[1];
|
|
}
|
|
uVar4 = (uVar4 + uVar3) - uVar2;
|
|
if (uVar4 < 0x10) {
|
|
*(int **)(iVar1 + 4) = piVar5;
|
|
*piVar5 = iVar1;
|
|
uVar3 = uVar2 + uVar4 | 1;
|
|
*(uint *)(param_1 + uVar2 + uVar4 + -8) = uVar3;
|
|
*(uint *)(param_1 + -4) = uVar3;
|
|
}
|
|
else {
|
|
piVar6 = (int *)(param_1 + uVar2);
|
|
*(int **)(iVar1 + 4) = piVar6;
|
|
*piVar5 = (int)piVar6;
|
|
piVar6[1] = (int)piVar5;
|
|
*piVar6 = iVar1;
|
|
piVar6[-2] = uVar2 | 1;
|
|
*(uint *)(param_1 + -4) = uVar2 | 1;
|
|
*(uint *)((int)piVar6 + (uVar4 - 8)) = uVar4;
|
|
piVar6[-1] = uVar4;
|
|
}
|
|
}
|
|
else {
|
|
param_1 = 0;
|
|
}
|
|
}
|
|
else {
|
|
uVar4 = uVar4 - uVar2;
|
|
if (0xf < uVar4) {
|
|
piVar5 = (int *)(param_1 + uVar2);
|
|
piVar5[-2] = uVar2 | 1;
|
|
*(uint *)(param_1 + -4) = uVar2 | 1;
|
|
*(uint *)((int)piVar5 + (uVar4 - 8)) = uVar4 | 1;
|
|
piVar5[-1] = uVar4 | 1;
|
|
FUN_004de420(piVar5);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004de760 file=? name=FUN_004de760 */
|
|
|
|
int * __cdecl FUN_004de760(int *param_1,uint param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
int *piVar4;
|
|
uint uVar5;
|
|
uint local_c;
|
|
|
|
if (param_2 == 0) {
|
|
FUN_004de420(param_1);
|
|
piVar1 = (int *)0x0;
|
|
}
|
|
else if (param_1 == (int *)0x0) {
|
|
piVar1 = FUN_004de55c(param_2);
|
|
}
|
|
else {
|
|
iVar2 = FUN_004de644((int)param_1,param_2);
|
|
piVar1 = param_1;
|
|
if (iVar2 == 0) {
|
|
if (param_2 < 8) {
|
|
local_c = 0x10;
|
|
}
|
|
else {
|
|
local_c = (param_2 + 3 & 0xfffffffc) + 8;
|
|
}
|
|
if (((int)local_c < 0x10) || (param_2 == 0)) {
|
|
piVar1 = (int *)0x0;
|
|
}
|
|
else {
|
|
uVar5 = param_1[-1] & 0xfffffffe;
|
|
uVar3 = param_1[-2];
|
|
if (((uVar3 & 1) == 0) && (local_c <= uVar3 + uVar5)) {
|
|
piVar1 = (int *)((int)param_1 - uVar3);
|
|
piVar4 = (int *)piVar1[1];
|
|
iVar2 = *piVar1;
|
|
*(int **)(iVar2 + 4) = piVar4;
|
|
*piVar4 = iVar2;
|
|
if (piVar1 == DAT_00525120) {
|
|
DAT_00525120 = piVar4;
|
|
}
|
|
FUN_004d493c(piVar1,param_1,uVar5);
|
|
uVar5 = uVar5 + uVar3;
|
|
uVar3 = uVar5 - local_c;
|
|
if (uVar3 < 0x10) {
|
|
*(uint *)((int)piVar1 + (uVar5 - 8)) = uVar5 | 1;
|
|
piVar1[-1] = uVar5 | 1;
|
|
}
|
|
else {
|
|
piVar4 = (int *)(local_c + (int)piVar1);
|
|
piVar4[-2] = local_c | 1;
|
|
piVar1[-1] = local_c | 1;
|
|
*(uint *)((int)piVar4 + (uVar3 - 8)) = uVar3 | 1;
|
|
piVar4[-1] = uVar3 | 1;
|
|
FUN_004de420(piVar4);
|
|
}
|
|
}
|
|
else {
|
|
piVar1 = FUN_004de55c(param_2);
|
|
if (piVar1 != (int *)0x0) {
|
|
FUN_004d493c(piVar1,param_1,uVar5 - 8);
|
|
FUN_004de420(param_1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return piVar1;
|
|
}
|
|
|
|
|
|
|
|
/* @004de8b8 file=? name=FUN_004de8b8 */
|
|
|
|
int __cdecl FUN_004de8b8(int param_1)
|
|
|
|
{
|
|
if (param_1 == 0) {
|
|
return 0;
|
|
}
|
|
return (*(uint *)(param_1 + -4) & 0xfffffffe) - 8;
|
|
}
|
|
|
|
|
|
|
|
/* @004de8d4 file=? name=FUN_004de8d4 */
|
|
|
|
int * __cdecl FUN_004de8d4(int *param_1,int param_2,int param_3,uint param_4,undefined *param_5)
|
|
|
|
{
|
|
int *piVar1;
|
|
uint uVar2;
|
|
|
|
if (param_1 == (int *)0x0) {
|
|
param_1 = (int *)0x0;
|
|
}
|
|
else {
|
|
if ((param_4 & 0x10) != 0) {
|
|
param_3 = param_1[-1];
|
|
}
|
|
uVar2 = param_4 & 7;
|
|
piVar1 = (int *)((param_3 + -1) * param_2 + (int)param_1);
|
|
while (param_3 != 0) {
|
|
if (uVar2 == 1) {
|
|
(*(code *)param_5)(piVar1,2);
|
|
}
|
|
else if (uVar2 == 2) {
|
|
(*(code *)param_5)(piVar1,2);
|
|
}
|
|
else if (uVar2 == 3) {
|
|
(*(code *)param_5)();
|
|
}
|
|
else if (uVar2 == 5) {
|
|
(*(code *)param_5)(piVar1,2);
|
|
}
|
|
else {
|
|
FUN_004ded48(s_Illegal_mode_in__vector_delete__00520b64);
|
|
}
|
|
piVar1 = (int *)((int)piVar1 - param_2);
|
|
param_3 = param_3 + -1;
|
|
}
|
|
if ((param_4 & 0x10) != 0) {
|
|
param_1 = param_1 + -1;
|
|
}
|
|
if ((param_4 & 8) != 0) {
|
|
FUN_004022e8(param_1);
|
|
param_1 = (int *)0x0;
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|
|
|
|
|
|
/* @004de998 file=? name=FUN_004de998 */
|
|
|
|
int * __cdecl FUN_004de998(int *param_1,int param_2,int param_3,uint param_4,undefined *param_5)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
uint uVar2;
|
|
int iVar3;
|
|
int *unaff_EDI;
|
|
|
|
uVar1 = *DAT_00524c68;
|
|
if (param_1 == (int *)0x0) {
|
|
iVar3 = 4;
|
|
if ((param_4 & 0x10) == 0) {
|
|
iVar3 = 0;
|
|
}
|
|
param_1 = (int *)FUN_004022b0(param_2 * param_3 + iVar3);
|
|
if (param_1 == (int *)0x0) {
|
|
return unaff_EDI;
|
|
}
|
|
}
|
|
if ((param_4 & 0x10) != 0) {
|
|
*param_1 = param_3;
|
|
param_1 = param_1 + 1;
|
|
}
|
|
if (param_5 != (undefined *)0x0) {
|
|
while (param_3 != 0) {
|
|
uVar2 = param_4 & 7;
|
|
if (uVar2 == 1) {
|
|
(*(code *)param_5)(param_1);
|
|
}
|
|
else if (uVar2 == 2) {
|
|
(*(code *)param_5)(param_1);
|
|
}
|
|
else if (uVar2 == 3) {
|
|
(*(code *)param_5)();
|
|
}
|
|
else if (uVar2 == 5) {
|
|
(*(code *)param_5)(param_1);
|
|
}
|
|
else {
|
|
FUN_004ded48(s_Illegal_mode_in__vector_new__00520b84);
|
|
}
|
|
param_1 = (int *)((int)param_1 + param_2);
|
|
param_3 = param_3 + -1;
|
|
}
|
|
if ((param_4 & 0x200) != 0) {
|
|
*DAT_00524c68 = uVar1;
|
|
}
|
|
}
|
|
return unaff_EDI;
|
|
}
|
|
|
|
|
|
|
|
/* @004dea5c file=? name=FUN_004dea5c */
|
|
|
|
undefined4 __cdecl FUN_004dea5c(int param_1,undefined4 *param_2,uint *param_3)
|
|
|
|
{
|
|
LPVOID pvVar1;
|
|
uint dwSize;
|
|
|
|
if (DAT_00520ba4 == 0) {
|
|
if ((DAT_00525224 == 1) || (DAT_00525224 == 2)) {
|
|
DAT_00520ba4 = 0x100000;
|
|
}
|
|
else {
|
|
DAT_00520ba4 = 0x400000;
|
|
}
|
|
}
|
|
dwSize = (param_1 + DAT_00520ba4) - 1U & ~(DAT_00520ba4 - 1U);
|
|
pvVar1 = VirtualAlloc((LPVOID)0x0,dwSize,0x2000,1);
|
|
*param_2 = pvVar1;
|
|
if (pvVar1 == (LPVOID)0x0) {
|
|
return 0;
|
|
}
|
|
*param_3 = dwSize;
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
/* @004deac8 file=? name=FUN_004deac8 */
|
|
|
|
undefined4 __cdecl FUN_004deac8(LPVOID param_1,int param_2)
|
|
|
|
{
|
|
LPVOID pvVar1;
|
|
LPVOID lpAddress;
|
|
|
|
lpAddress = param_1;
|
|
while( true ) {
|
|
if (param_2 == 0) {
|
|
return 1;
|
|
}
|
|
pvVar1 = VirtualAlloc(lpAddress,0x1000,0x1000,4);
|
|
if (pvVar1 == (LPVOID)0x0) break;
|
|
lpAddress = (LPVOID)((int)lpAddress + 0x1000);
|
|
param_2 = param_2 + -0x1000;
|
|
}
|
|
FUN_004deb1c(param_1,(int)lpAddress - (int)param_1);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004deb1c file=? name=FUN_004deb1c */
|
|
|
|
undefined4 __cdecl FUN_004deb1c(LPVOID param_1,int param_2)
|
|
|
|
{
|
|
BOOL BVar1;
|
|
|
|
while( true ) {
|
|
if (param_2 == 0) {
|
|
return 1;
|
|
}
|
|
BVar1 = VirtualFree(param_1,0x1000,0x4000);
|
|
if (BVar1 != 1) break;
|
|
param_1 = (LPVOID)((int)param_1 + 0x1000);
|
|
param_2 = param_2 + -0x1000;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/* @004deb5c file=? name=FUN_004deb5c */
|
|
|
|
undefined4 __cdecl FUN_004deb5c(LPVOID param_1)
|
|
|
|
{
|
|
BOOL BVar1;
|
|
|
|
BVar1 = VirtualFree(param_1,0,0x8000);
|
|
if (BVar1 != 1) {
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
/* @004deb80 file=? name=FUN_004deb80 */
|
|
|
|
void __cdecl FUN_004deb80(char *param_1,int param_2)
|
|
|
|
{
|
|
char *pcVar1;
|
|
int iVar2;
|
|
uint uVar3;
|
|
undefined4 *local_8;
|
|
|
|
*param_1 = '\0';
|
|
local_8 = (undefined4 *)&stack0x0000000c;
|
|
while( true ) {
|
|
pcVar1 = (char *)*local_8;
|
|
if (pcVar1 == (char *)0x0) {
|
|
return;
|
|
}
|
|
iVar2 = FUN_004d4a78(param_1);
|
|
uVar3 = (param_2 - iVar2) - 1;
|
|
if ((int)uVar3 < 1) break;
|
|
FUN_004d4a94(param_1,pcVar1,uVar3);
|
|
local_8 = local_8 + 1;
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004debc8 file=? name=FUN_004debc8 */
|
|
|
|
void __cdecl FUN_004debc8(undefined4 param_1,undefined4 param_2,uint param_3)
|
|
|
|
{
|
|
int iVar1;
|
|
|
|
FUN_004deb80(&DAT_00525124,0xf6);
|
|
iVar1 = FUN_004d4a78(&DAT_00525124);
|
|
FUN_004dd3d0(param_3,&DAT_00525124 + iVar1);
|
|
FUN_004dec88(&DAT_00525124);
|
|
FUN_004dedb8();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dec40 file=? name=FUN_004dec40 */
|
|
|
|
undefined4 FUN_004dec40(void)
|
|
|
|
{
|
|
DWORD DVar1;
|
|
undefined4 uVar2;
|
|
WNDENUMPROC lpfn;
|
|
int *lParam;
|
|
int local_4;
|
|
|
|
lParam = &local_4;
|
|
local_4 = 0;
|
|
DVar1 = GetVersion();
|
|
if ((DVar1 & 0x80000000) == 0) {
|
|
return 0x2000;
|
|
}
|
|
lpfn = (WNDENUMPROC)&LAB_004dec2c;
|
|
DVar1 = GetCurrentThreadId();
|
|
EnumThreadWindows(DVar1,lpfn,(LPARAM)lParam);
|
|
uVar2 = 0x2000;
|
|
if (local_4 == 0) {
|
|
uVar2 = 0x1000;
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
|
|
|
|
/* @004dec88 file=? name=FUN_004dec88 */
|
|
|
|
void __cdecl FUN_004dec88(char *param_1)
|
|
|
|
{
|
|
char *pcVar1;
|
|
uint uVar2;
|
|
HANDLE hFile;
|
|
DWORD nNumberOfBytesToWrite;
|
|
LPCSTR lpCaption;
|
|
DWORD *lpNumberOfBytesWritten;
|
|
LPOVERLAPPED lpOverlapped;
|
|
CHAR local_58 [80];
|
|
DWORD local_8;
|
|
|
|
if (DAT_004e0069 != '\0') {
|
|
GetModuleFileNameA((HMODULE)0x0,local_58,0x50);
|
|
pcVar1 = FUN_004d4c4c(local_58,'\\');
|
|
if ((pcVar1 == (char *)0x0) && (pcVar1 = FUN_004d4c4c(local_58,':'), pcVar1 == (char *)0x0)) {
|
|
lpCaption = local_58;
|
|
}
|
|
else {
|
|
lpCaption = pcVar1 + 1;
|
|
}
|
|
uVar2 = FUN_004dec40();
|
|
MessageBoxA((HWND)0x0,param_1,lpCaption,uVar2 | 0x10);
|
|
return;
|
|
}
|
|
hFile = GetStdHandle(0xfffffff4);
|
|
WriteFile(hFile,&DAT_00520bd0,2,&local_8,(LPOVERLAPPED)0x0);
|
|
lpOverlapped = (LPOVERLAPPED)0x0;
|
|
lpNumberOfBytesWritten = &local_8;
|
|
nNumberOfBytesToWrite = FUN_004d4a78(param_1);
|
|
WriteFile(hFile,param_1,nNumberOfBytesToWrite,lpNumberOfBytesWritten,lpOverlapped);
|
|
WriteFile(hFile,&DAT_00520bd3,2,&local_8,(LPOVERLAPPED)0x0);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004ded38 file=? name=FUN_004ded38 */
|
|
|
|
void __cdecl FUN_004ded38(char *param_1)
|
|
|
|
{
|
|
FUN_004dec88(param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004ded48 file=? name=FUN_004ded48 */
|
|
|
|
void __cdecl FUN_004ded48(char *param_1)
|
|
|
|
{
|
|
FUN_004dec88(param_1);
|
|
FUN_004dee3c(1);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004deda4 file=? name=FUN_004deda4 */
|
|
|
|
void FUN_004deda4(void)
|
|
|
|
{
|
|
FUN_004dec88(s_Abnormal_program_termination_00520bf0);
|
|
FUN_004dee3c(3);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dedb8 file=? name=FUN_004dedb8 */
|
|
|
|
void FUN_004dedb8(void)
|
|
|
|
{
|
|
FUN_004df428(0x16);
|
|
FUN_004deda4();
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dedc8 file=? name=FUN_004dedc8 */
|
|
|
|
void FUN_004dedc8(void)
|
|
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dedcc file=? name=FUN_004dedcc */
|
|
|
|
void __cdecl FUN_004dedcc(int param_1,int param_2,UINT param_3)
|
|
|
|
{
|
|
if (param_1 == 0) {
|
|
while (DAT_00520c10 != 0) {
|
|
DAT_00520c10 = DAT_00520c10 + -1;
|
|
(**(code **)(&DAT_00525228 + DAT_00520c10 * 4))();
|
|
}
|
|
FUN_004df6bc();
|
|
(*(code *)PTR_FUN_00520c14)();
|
|
}
|
|
if (param_2 == 0) {
|
|
if (param_1 == 0) {
|
|
(*(code *)PTR_FUN_00520c18)();
|
|
(*(code *)PTR_FUN_00520c1c)();
|
|
}
|
|
FUN_004df734(param_3);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
/* @004dee24 file=? name=FUN_004dee24 */
|
|
|
|
void __cdecl FUN_004dee24(UINT param_1)
|
|
|
|
{
|
|
FUN_004dedcc(0,0,param_1);
|
|
return;
|
|
}
|
|
|
|
|
|
|