RaspGetXExtent
INT64 __fastcall RaspGetXExtent(UINT16 a1, INT64 a2, _DWORD *a3, INT64 a4, INT64 a5, INT64 *a6){
INT64 *v8;
int v9;
INT64 v10;
int v11;
INT64 v12;
int v13;
INT64 v14;
INT64 v15;
__int64 Memory;
INT64 v18;
INT64 *v19;
int v20;
UINT64 v21;
__int64 v22;
__int128 v23;
__int64 v24;
INT64 result[16];
INT64 a8;
_DWORD *v27;
INT64 v28;
v28 = a4;
v27 = a3;
memset((INT64)result, 0i64);
v8 = a6;
v9 = 0;
v22 = 0i64;
v10 = 0i64;
LODWORD(a8) = 0;
v11 = 0;
v28 = 0i64;
v12 = *a6;
LODWORD(a5) = 0;
v24 = 0i64;
v23 = 0i64;
if( a1 >= 0x20u )
{
v13 = *(_DWORD *)(a2 + 16);
a6 = *(INT64 **)(a2 + 8);
RaspGetCacheEntry((__int64 **)&RaspBitmapCache, a1, v13, *((_DWORD *)a6 + 10), (__int64)a6, &v22);
Memory = v22;
if( v22 )
{
LABEL_3:
v11 = *(_DWORD *)(Memory + 44);
v8[2] = *(_QWORD *)(Memory + 62);
goto LABEL_4;
}
LODWORD(v21) = 0;
v9 = RaspRasterize(a2, a1, v14, v15, v21, (INT64)&v28, (INT64)&a5, &a8, v8);
if( v9 >= 0 )
{
if( v12 )
{
Memory = (__int64)result;
LABEL_10:
v18 = v8[2];
v19 = a6;
v10 = v28;
v20 = *((_DWORD *)a6 + 10);
*(_DWORD *)(Memory + 40) = *(_DWORD *)(a2 + 16);
*(_DWORD *)(Memory + 44) = a5;
*(_DWORD *)(Memory + 48) = a8;
*(_DWORD *)(Memory + 52) = 4;
*(_DWORD *)(Memory + 56) = 4;
*(_WORD *)(Memory + 60) = a1;
*(_DWORD *)(Memory + 36) = v20;
*(_QWORD *)(Memory + 24) = v19;
*(_QWORD *)(Memory + 16) = v10;
*(_QWORD *)(Memory + 62) = v18;
if( !v12 )
RaspAddCacheEntry((__int64)&RaspBitmapCache, (__int64 *)Memory);
goto LABEL_3;
}
Memory = RaspAllocateMemory(0x46ui64, (__int64 *)&v23);
if( Memory )
goto LABEL_10;
v9 = -1073741801;
}
v10 = v28;
v11 = a5;
}
LABEL_4:
*v27 = v11;
if( v12 || v9 < 0 )
{
if( v10 )
RaspFreeMemory(v10, v8);
}
return(unsigned int)v9;
}Referenced by:
BcpGetCharacterMaxResourceProfile
BgpRasGetGlyphAdvanceWidth