int __fastcall VgaGcProgramMode(_BYTE *a1, _DWORD *a2)
{
char *i; // esi
char v4; // bl
_BYTE *v5; // eax
char *i_1; // edi
char v7; // cl
_BYTE *v8; // eax
char *i_2; // ecx
int v10; // eax
int v11; // eax
int v12; // eax
int v13; // eax
int n8; // eax
// "mode3+"
for ( i = aMode3_0; ; i += 18 )
{
v4 = *i;
v5 = &unk_FFE77004;
i_1 = i;
if ( *i )
{
v7 = *i;
do
{
if ( v7 != *v5 )
break;
++i_1;
++v5;
v7 = *i_1;
}
while ( *i_1 );
}
if ( *i_1 == *v5 )
return 0;
v8 = a1;
i_2 = i;
while ( v4 && v4 == *v8 )
{
++i_2;
++v8;
v4 = *i_2;
}
if ( *i_2 == *v8 )
break;
}
*a2 = *((unsigned __int16 *)i + 6);
a2[1] = *((unsigned __int16 *)i + 7);
v10 = *((unsigned __int16 *)i + 8);
a2[2] = v10;
v11 = v10 - 1;
if ( v11 )
{
v12 = v11 - 7;
if ( v12 )
{
v13 = v12 - 8;
if ( v13 )
{
n8 = v13 - 8;
if ( n8 && n8 != 8 )
return 0;
a2[4] = &unk_FFE7B088;
}
else
{
a2[4] = &unk_FFE7B04D;
}
}
else
{
a2[4] = &unk_FFE7B012;
}
}
else
{
a2[4] = &unk_FFE7AF9C;
}
switch ( *a2 )
{
case 0x280:
case 0x2D0:
a2[5] = &unk_FFE7B194;
return 1;
case 0x320:
a2[5] = &unk_FFE7B924;
return 1;
case 0x400:
a2[5] = &unk_FFE7B81C;
return 1;
case 0x500:
a2[5] = &unk_FFE7B0C4;
return 1;
case 0x640:
a2[5] = &unk_FFE7BA2C;
return 1;
}
return 0;
}