int __fastcall VgaModeProgramFifo(int a1)
{
unsigned int v1; // esi
int Width; // eax
int v3; // eax
int dst_1; // ebx
int v6; // esi
unsigned int n0x300_1; // edi
int v8; // ebp
char *src; // ebx
unsigned int v10; // esi
unsigned int n0x400_1; // ebp
char *dst; // esi
bool i; // zf
int v14; // [esp-4h] [ebp-1050h]
unsigned int n0x400; // [esp+10h] [ebp-103Ch] BYREF
int v16; // [esp+14h] [ebp-1038h] BYREF
int v17; // [esp+18h] [ebp-1034h] BYREF
unsigned int n0x300; // [esp+1Ch] [ebp-1030h] BYREF
unsigned int n3145728; // [esp+20h] [ebp-102Ch] BYREF
_DWORD v20[4]; // [esp+24h] [ebp-1028h] BYREF
_DWORD v21[4]; // [esp+34h] [ebp-1018h] BYREF
int v22; // [esp+44h] [ebp-1008h]
char buf[4100]; // [esp+48h] [ebp-1004h] BYREF
v16 = 0;
v20[0] = -447900028;
v1 = -15663104;
v20[1] = 1139746613;
v20[2] = -231704157;
v20[3] = 280662773;
v21[0] = 2075298713;
v21[1] = 299196859;
v21[2] = -1879024230;
v21[3] = 1304510247;
while ( 1 )
{
v14 = a1;
Width = ImageDecodeGetWidth((_BYTE *)v1, v20);
a1 = v14;
if ( !Width )
{
v3 = ImageDecodeGetWidth((_BYTE *)(v1 + 24), v21);
a1 = v14;
if ( !v3 )
break;
}
v1 += 8;
if ( v1 >= 0xFFBAF000 )
return -2147483634;
}
if ( (*(_DWORD *)(v1 + 48) & 0xFFFFFF) == 4 )
return -2147483634;
n3145728 = 3145728;
dst_1 = -1879048192;
v17 = -1879048192;
v6 = VgaAttrProgramPalette(&v17, &n3145728, &n0x300, &v16, &n0x400);
v22 = v6;
if ( v6 >= 0 && n0x400 < 0x400 )
{
n0x300_1 = n0x300;
if ( n0x300 < 0x300 )
{
v17 = (int)(1024 - n0x400) / 2;
v8 = (int)(768 - n0x300) / 2;
v16 = v8;
n0x400 *= 4;
SetMem(buf, 0x1000u, 0);
if ( n0x300_1 )
{
src = (char *)(n3145728 - n0x400 - 1879048192);
v10 = v8 + n0x300_1 - 458753;
n0x400_1 = n0x400;
dst = (char *)(v10 << 12);
do
{
if ( n0x400_1 )
CopyMem(&buf[4 * v17], src, n0x400_1);
CopyMem(dst, buf, 0x1000u);
dst -= 4096;
src -= n0x400_1;
--n0x300_1;
}
while ( n0x300_1 );
v8 = v16;
dst_1 = -1879048192;
v6 = v22;
}
SetMem(buf, 0x1000u, 0);
for ( i = v8 == 0; !i; i = v8 == 0 )
{
CopyMem((char *)dst_1, buf, 0x1000u);
dst_1 += 4096;
--v8;
}
}
}
return v6;
}