char __fastcall VgaDisplayProgramLarge(_BYTE *a1, int a2)
{
unsigned __int8 n2_1; // ch
char v5; // dh
_DWORD *v6; // ebx
int v7; // ebp
unsigned __int8 n0xC1; // cl
char v10; // al
_BYTE *v11; // esi
int v12; // eax
bool v13; // cf
char n4; // dl
int n3; // ebx
unsigned __int8 v16; // dl
int i; // eax
unsigned __int8 n4_1; // [esp+11h] [ebp-7h]
char n2; // [esp+12h] [ebp-6h]
char v20; // [esp+13h] [ebp-5h]
unsigned __int16 v21; // [esp+14h] [ebp-4h]
n2_1 = 0;
n2 = 0;
v5 = 0;
v20 = 0;
v6 = *(_DWORD **)(a2 + 58);
v7 = *(_DWORD *)(a2 + 62);
n4_1 = 0;
if ( *a1 != 0xFF || a1[1] != 0xD8 )
return 0;
while ( 1 )
{
n0xC1 = a1[1];
if ( n0xC1 != 0xD8 )
break;
a1 += 2;
LABEL_26:
if ( *a1 != 0xFF )
return 0;
}
if ( n0xC1 == 0xD9 )
goto LABEL_29;
if ( !n0xC1 )
return 0;
if ( (n0xC1 & 0xF0) == 0xE0 )
{
LABEL_25:
v10 = a1[3];
v11 = a1 + 2;
LOBYTE(v21) = v10;
HIBYTE(v21) = *v11;
a1 = &v11[v21];
goto LABEL_26;
}
if ( n0xC1 == 0xC0 )
{
v5 |= 2u;
v20 = v5;
*(_DWORD *)(a2 + 6) = a1 + 2;
goto LABEL_25;
}
if ( n0xC1 == 0xC4 )
{
*(_QWORD *)(v7 + 8 * n4_1) = (int)(a1 + 4);
n2_1 = n2;
++n4_1;
LABEL_19:
v5 = v20;
goto LABEL_25;
}
if ( (n0xC1 & 0xF0) == 0xC0 )
{
if ( n0xC1 >= 0xC1u && n0xC1 < 0xD0u )
return 0;
goto LABEL_25;
}
if ( n0xC1 != 0xDA )
{
if ( n0xC1 != 0xDB )
{
if ( n0xC1 == 0xDD )
{
*(_BYTE *)(a2 + 80) = a1[5];
*(_BYTE *)(a2 + 81) = a1[4];
}
else if ( (n0xC1 & 0xF8) != 0xD0 && (n0xC1 < 0xF0u || n0xC1 == 0xFF) )
{
return 0;
}
goto LABEL_25;
}
*(_QWORD *)&v6[2 * n2_1] = (int)(a1 + 4);
n2_1 = ++n2;
goto LABEL_19;
}
*(_DWORD *)a2 = a1 + 14;
LABEL_29:
if ( n2_1 == 1 )
{
v12 = v6[1];
v13 = __CFADD__(*v6, 65);
v6[2] = *v6 + 65;
n2 = 2;
v6[3] = v13 + v12;
}
n4 = n4_1;
if ( n4_1 == 1 )
{
n3 = 3;
do
{
v16 = 0;
for ( i = 0; i < 16; ++i )
v16 += *(_BYTE *)(*(_DWORD *)v7 + i + 1);
*(_QWORD *)(v7 + 8) = *(_QWORD *)v7 + v16 + 17LL;
v7 += 8;
--n3;
}
while ( n3 );
n4 = 4;
v5 = v20;
}
if ( n4 != 4 || n2 != 2 || (v5 & 2) == 0 )
return 0;
VgaDisplaySetCursor(2u, 4u, a2);
return 1;
}