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