aboutsummaryrefslogtreecommitdiffstats
path: root/fw/pseudo/merit.merit_cmd05.before.c
blob: 2603a81a1cd54f120651f4c67a0be6610d109c36 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
int __fastcall sub_401A90(_DWORD *a1)
{
  _DWORD *v1; // r8
  int v3; // r4
  int *v4; // r7
  int v5; // r6
  unsigned __int8 *v6; // r9
  int result; // r0
  int v8; // r7
  int *v9; // r11
  int v10; // r0
  int v11; // r10
  bool v12; // zf
  int v13; // r3
  int v14; // r6
  int v15; // r7
  _OWORD *v16; // r5
  int v17; // r0
  __int128 v18; // [sp+8h] [bp-14h] BYREF
  int v19; // [sp+18h] [bp-4h]

  v1 = (_DWORD *)off_401BD8;
  v19 = *(_DWORD *)off_401BD8;
  v3 = a1[4];
  if ( (unsigned int)(v3 - 1) <= 0x3F && (v4 = (int *)off_401CE0, v5 = 257 * v3, *((_BYTE *)off_401CE0 + 257 * v3) != 0) )
  {
    if ( sub_401338(a1: v3, a2: (int)(a1 + 5), a3: 0x1010u, a4: (int)(a1 + 5)) == nullptr )
      goto LABEL_10;
    v6 = (unsigned __int8 *)v4 + v5 + 33;
    if ( a1[17] == (*v6
                  | (*((unsigned __int8 *)v4 + v5 + 34) << 8)
                  | ((*((unsigned __int8 *)v4 + v5 + 35) | (*((unsigned __int8 *)v4 + v5 + 36) << 8)) << 16)) )
    {
      if ( sub_401000(a1: (int *)off_401BDC, a2: a1 + 13, a3: 16) == 0 )
      {
        v8 = a1[19];
        v9 = (int *)off_401BE0;
        v10 = 0;
        while ( 1 )
        {
          v11 = v10 + 16;
          if ( v10 == 128 )
            break;
          v12 = sub_401000(a1: (char *)v9 + v10, a2: a1 + 20, a3: v8) == 0;
          v10 = v11;
          if ( v12 )
          {
            v13 = a1[10];
            v14 = a1[11];
            v15 = a1[12];
            a1[1038] = a1[9];
            a1[1039] = v13;
            a1[1040] = v14;
            a1[1041] = v15;
            a1[1042] = dword_401BE4;
            a1[1037] = 20;
            sub_401124(a1: a1 + 1043, a2: 4056);
            v16 = a1 + 1033;
            if ( ((int (__fastcall *)(_OWORD *, int, __int128 *, int))loc_4012FC)(a1: v16, a2: 4096, a3: &v18, a4: v3) != 0 )
            {
              result = 266;
            }
            else
            {
              *v16 = v18;
              v17 = ((*v6)++ | (v6[1] << 8) | ((v6[2] | (v6[3] << 8)) << 16)) + 1;
              v6[2] = BYTE2(v17);
              v6[3] = HIBYTE(v17);
              v6[1] = BYTE1(v17);
              result = 0;
            }
            goto LABEL_8;
          }
        }
      }
      result = 262;
    }
    else
    {
      result = 260;
    }
  }
  else
  {
    result = 259;
  }
LABEL_8:
  while ( *v1 != v19 )
  {
    ((void (__fastcall *)(int, int))loc_40202C)(a1: result, a2: *v1 - v19);
LABEL_10:
    result = 261;
  }
  return result;
}