RaspLoadBearings

NTSTATUS __fastcall RaspLoadBearings(__int64 a1, unsigned int a2, __int64 a3, int *a4){
  unsigned int v4; 
  __int64 v5; 
  int v7; 
  _FILE_IMAGE *v11; 
  NTSTATUS result; 
  unsigned __int16 v13; 
  int v14; 
  signed __int16 v15; 
  int v16; 
  __int64 v17; 
  __int64 v18; 
  int v19; 
  int v20; 
  __int64 v21; 
  __int64 v22; 
  int v23; 
  int v24; 
  UINT16 Buffer; 

  v4 = *(unsigned __int16 *)(a1 + 88);
  v5 = *(_QWORD *)(a1 + 16);
  v7 = *(_DWORD *)(a1 + 68);
  v24 = 0;
  Buffer = 0;
  v11 = *(_FILE_IMAGE **)(v5 + 16);
  if( a2 >= v4 )
  {
    v23 = v7 + 4 * v4;
    result = FioFwReadBytesAtOffset(v11, (unsigned int)(v23 - 4), 4ui64, &v24);
    if( result < 0 )
      return result;
    v14 = (unsigned __int16)__ROR2__(v24, 8);
    result = FioFwReadUshortAtOffset(*(_FILE_IMAGE **)(*(_QWORD *)(a1 + 16) + 16i64), v23 + 2 * (a2 - v4), &Buffer);
    if( result < 0 )
      return result;
    v15 = Buffer;
  }
  else
  {
    result = FioFwReadBytesAtOffset(v11, v7 + 4 * a2, 4ui64, &v24);
    if( result < 0 )
      return result;
    v13 = __ROR2__(v24, 8);
    v14 = v13;
    v15 = __ROR2__(HIWORD(v24), 8);
    if( !v13 )
    {
      result = FioFwReadBytesAtOffset(
                 *(_FILE_IMAGE **)(*(_QWORD *)(a1 + 16) + 16i64),
                 *(_DWORD *)(a1 + 68) - 4 + 4 * v4,
                 4ui64,
                 &v24);
      if( result < 0 )
        return result;
      v14 = (unsigned __int16)__ROR2__(v24, 8);
    }
  }
  if( v15 < 0 )
    v15 = 0;
  v16 = *(_DWORD *)(a3 + 18);
  v17 = *(unsigned __int16 *)(a3 + 24);
  v18 = *(_QWORD *)(a3 + 50);
  v19 = v15 + *(_DWORD *)(a3 + 10) - v16;
  if( v14 >= v19 )
    v19 = v14;
  *(_DWORD *)(v18 + 4 * v17) = v16 - v15;
  v20 = *(_DWORD *)(a3 + 18) - v15;
  *a4 = v19;
  *(_DWORD *)(v18 + 4 * v17 + 4) = v19 + v20;
  v21 = *(unsigned __int16 *)(a3 + 24);
  v22 = *(_QWORD *)(a3 + 58);
  *(_DWORD *)(v22 + 4 * v21) = *(__int16 *)(a1 + 82) + *(__int16 *)(a1 + 84);
  result = 0;
  *(_DWORD *)(v22 + 4 * v21 + 4) = *(__int16 *)(a1 + 82) + *(__int16 *)(a1 + 84);
  *(_WORD *)(a3 + 24) += 2;
  return result;
}

Referenced by:

RaspGetUnscaledGlyphData