RaspInitializeCompositeGlyphData
__int64 __fastcall RaspInitializeCompositeGlyphData(
_FILE_IMAGE *a1,
VOID **a2,
__int64 a3,
unsigned __int16 a4,
__int16 a5,
__int16 a6,
UINT64 Offset,
__int64 a8,
__int64 a9,
_BG_RASTERIZER_WORKSPACE *Workspace){
VOID **v10;
__int64 v11;
UINT64 v12;
char *Memory;
char *v14;
_DWORD *v16;
__int64 v17;
char *v18;
__int16 *v19;
int v20;
int v21;
_DWORD *v22;
_WORD *v23;
char *v24;
char *v25;
char *v26;
__int16 v27;
char *v28;
VOID **v29;
unsigned __int16 *v30;
unsigned __int16 v31;
__int64 v32;
size_t v33;
__int64 v34;
__int16 v35;
__int16 v36;
__int16 v37;
unsigned __int16 v38;
__int16 v39;
__int16 v40;
__int64 v41;
__int64 v42;
__int64 v43;
__int16 v44;
__int16 v45;
_WORD *v46;
_DWORD *v47;
char *v48;
__int16 v52;
__int16 v53;
__int16 v54;
v10 = a2;
v11 = a4;
v12 = a4 + (unsigned __int16)a6 + 8 * (unsigned int)a4 + 2 * (a5 + 41);
Memory = (char *)RaspAllocateMemory(v12, Workspace);
v14 = Memory;
if( !Memory )
return 3221225626i64;
memset(Memory, 0i64, v12);
v16 = v14 + 2;
v17 = 4i64;
v48 = v14;
v18 = v14;
*(_WORD *)v14 = a5;
v19 = (__int16 *)(a3 + 2);
do
{
v20 = *v19++;
*v16++ = v20;
--v17;
}
while( v17 );
v21 = *(_DWORD *)(v14 + 2);
v22 = v14 + 18;
*((_WORD *)v14 + 11) = a6;
*((_WORD *)v14 + 12) = v11;
v23 = v14 + 66;
v47 = v22;
*v22 = v21;
v46 = v23;
*(_QWORD *)(v18 + 26) = v23;
v24 = (char *)&v23[a5];
if( a6 )
{
*(_QWORD *)(v18 + 34) = v24;
v24 += (unsigned __int16)a6;
FioFwReadBytesAtOffset(a1, (unsigned int)Offset, (unsigned __int16)a6, &v23[a5]);
v22 = v47;
v23 = *(_WORD **)(v18 + 26);
v46 = v23;
}
v25 = &v24[v11];
*(_QWORD *)(v18 + 42) = v24;
*(_QWORD *)(v18 + 50) = &v24[v11];
v26 = &v24[4 * (unsigned int)(v11 + 2) + v11];
v54 = 0;
*(_QWORD *)(v18 + 58) = v26;
v27 = 0;
v53 = 0;
while( 1 )
{
v28 = (char *)*v10;
if( *v10 == v10 )
break;
if( *((VOID ***)v28 + 1) != v10 || (v29 = *(VOID ***)v28, *(char **)(*(_QWORD *)v28 + 8i64) != v28) )
__fastfail(3u);
*v10 = v29;
v29[1] = v10;
v30 = (unsigned __int16 *)*((_QWORD *)v28 + 2);
if( (*((_WORD *)v28 + 12) & 0x200) != 0 )
{
*(_WORD *)a8 = *((_WORD *)v28 + 13);
*v22 = *(_DWORD *)(v30 + 1);
}
v31 = 0;
if( (__int16)*v30 > 0 )
{
do
{
v32 = v31++;
*v23++ = v27 + *(_WORD *)(*(_QWORD *)(v30 + 13) + 2 * v32);
}
while( v31 < (__int16)*v30 );
v46 = v23;
}
v33 = v30[12];
v52 = v33 + v27;
memmove(v24, *(const VOID **)(v30 + 21), v33);
v34 = v30[12];
v35 = 0x4000;
v36 = *((_WORD *)v28 + 12);
v24 += v34;
v37 = 0x4000;
if( (v36 & 8) != 0 )
{
v37 = *((_WORD *)v28 + 16);
v35 = v37;
}
else if( (v36 & 0x40) != 0 )
{
v37 = *((_WORD *)v28 + 16);
v35 = *((_WORD *)v28 + 17);
}
v38 = 0;
if( (_WORD)v34 )
{
v39 = v54;
v40 = v53;
v41 = v37;
v42 = v35;
do
{
*(_WORD *)v25 = *(_WORD *)(*(_QWORD *)(v30 + 25) + 4i64 * v38);
*(_WORD *)v26 = *(_WORD *)(*(_QWORD *)(v30 + 29) + 4i64 * v38);
*(_WORD *)v25 = v41 * *(__int16 *)v25 / 0x4000;
v43 = v42 * *(__int16 *)v26 / 0x4000;
*(_WORD *)v26 = v43;
if( !v38 )
{
*(_WORD *)v25 -= v39;
*(_WORD *)v26 -= v40;
v44 = *((_WORD *)v28 + 12);
LOWORD(v43) = *(_WORD *)v26;
if( (v44 & 2) != 0 )
{
if( (v44 & 1) != 0 )
{
*(_WORD *)v25 += *((_WORD *)v28 + 14);
v45 = *((_WORD *)v28 + 15);
}
else
{
*(_WORD *)v25 += v28[28];
v45 = v28[29];
}
*(_WORD *)v26 += v45;
LOWORD(v43) = *(_WORD *)v26;
}
}
v39 += *(_WORD *)v25;
v40 += v43;
v25 += 4;
v26 += 4;
++v38;
}
while( v38 < v30[12] );
v23 = v46;
v53 = v40;
v10 = a2;
v54 = v39;
v18 = v48;
}
RaspFreeMemory(v30, Workspace);
RaspFreeMemory(v28, Workspace);
v27 = v52;
v22 = v47;
}
*(_QWORD *)a9 = v18;
return 0i64;
}Referenced by:
RaspLoadCompositeGlyphData