RaspLoadCompositeGlyphData

INT64 __fastcall RaspLoadCompositeGlyphData(
        INT64 rcx0,
        INT64 a2,
        INT64 a3,
        INT64 *a4,
        INT64 Workspace,
        INT64 a6,
        INT64 a7,
        INT64 a8,
        INT64 a9,
        INT64 NumberOfInstructions,
        INT64 a11,
        INT64 a12,
        INT64 a13,
        INT64 a14){
  unsigned int v16; 
  int v18; 
  unsigned int v19; 
  INT64 v20; 
  unsigned int v21; 
  INT64 result; 
  _QWORD *v23; 
  int v24; 
  INT64 v25; 
  __int64 v26; 
  INT64 v27; 
  INT64 *InstructionOffset; 
  __int16 v29[2]; 
  UINT16 v30; 
  INT64 GlyphTableSize; 
  INT64 GlyphData; 
  INT64 v33; 
  __int16 v34; 
  INT64 a1[2]; 
  INT64 v36; 
  v33 = 0i64;
  v34 = 0;
  LODWORD(GlyphTableSize) = 0;
  LOWORD(v36) = 0;
  v16 = a2;
  v29[0] = 0;
  v30 = 0;
  GlyphData = 0i64;
  *(_OWORD *)a1 = 0i64;
  if( !rcx0 )
    return 3221225473i64;
  v18 = *(_DWORD *)(rcx0 + 60);
  if( !v18 )
    return 3221225473i64;
  v19 = v18 + a2;
  v20 = *(_QWORD *)(*(_QWORD *)(rcx0 + 16) + 16i64);
  FioFwReadUshortAtOffset(v20, (unsigned int)(v18 + a2), &v33);
  FioFwReadUshortAtOffset(v20, v19 + 2, (_WORD *)&v33 + 1);
  v19 += 4;
  FioFwReadUshortAtOffset(v20, v19, (_WORD *)&v33 + 2);
  FioFwReadUshortAtOffset(v20, v19 + 2, (_WORD *)&v33 + 3);
  v21 = v19 + 4;
  FioFwReadUshortAtOffset(v20, v21, &v34);
  if( (v33 & 0x8000u) == 0i64 )
    return 3221225485i64;
  v23 = (_QWORD *)Workspace;
  InstructionOffset = a1;
  result = RaspGetCompositeGlyphList(rcx0, v16, &v30, v29, (INT64)&v36, (INT64)&GlyphTableSize);
  if( (int)result >= 0 )
  {
    LODWORD(InstructionOffset) = v21 + GlyphTableSize + 2;
    v24 = RaspInitializeCompositeGlyphData(
            v20,
            (INT64)a1,
            (INT64)&v33,
            v30,
            v29[0],
            v36,
            (INT64)InstructionOffset,
            a3,
            (INT64)&GlyphData,
            (INT64)v23);
    if( v24 >= 0 )
    {
      v27 = GlyphData;
    }
    else
    {
      while( 1 )
      {
        v25 = a1[0];
        if( (INT64 *)a1[0] == a1 )
          break;
        if( *(INT64 **)(a1[0] + 8) != a1 || (v26 = *(_QWORD *)a1[0], *(_QWORD *)(*(_QWORD *)a1[0] + 8i64) != a1[0]) )
          __fastfail(3u);
        a1[0] = *(_QWORD *)a1[0];
        *(_QWORD *)(v26 + 8) = a1;
        RaspFreeMemory(*(_QWORD *)(v25 + 16), v23);
        RaspFreeMemory(v25, v23);
      }
      v27 = GlyphData;
      if( GlyphData )
      {
        RaspFreeMemory(GlyphData, v23);
        v27 = 0i64;
      }
    }
    *a4 = v27;
    return(unsigned int)v24;
  }
  return result;
}

Referenced by:

No references.