BgpGxBlendRectangle

INT64 __fastcall BgpGxBlendRectangle(UINT64 *a1, _DWORD *a2, INT64 *a3, INT64 *a4){
  __int64 v4; 
  int v5; 
  INT64 *v6; 
  _DWORD *v8; 
  UINT64 *v9; 
  unsigned int v10; 
  int v11; 
  unsigned int v12; 
  int v13; 
  int v14; 
  int v15; 
  int v16; 
  int v17; 
  __int64 v18; 
  unsigned int *v19; 
  unsigned int v20; 
  __int64 v21; 
  unsigned int v22; 
  unsigned int v23; 
  unsigned int *v24; 
  unsigned int v25; 
  __int64 v26; 
  __int64 v27; 
  bool v28; 
  int v30; 
  __int64 v31; 
  unsigned int v32; 
  __int64 v33; 
  int v34; 
  __int64 v35; 
  __int64 v36; 
  v34 = 0;
  v4 = 0i64;
  v5 = 0;
  v31 = 0i64;
  v6 = a4;
  v8 = a2;
  v9 = a1;
  if( !a4
    || (v10 = *(_DWORD *)a1) == 0
    || (v11 = *a2) == 0
    || (v12 = *((_DWORD *)a1 + 1)) == 0
    || (v13 = a2[1]) == 0
    || *((_DWORD *)a1 + 2) != 32
    || a2[2] != 32
    || (v14 = *(_DWORD *)a3, v12 < *(_DWORD *)a3 + v13)
    || (v15 = *((_DWORD *)a3 + 1), v10 < v15 + v11) )
  {
    v5 = -1073741811;
    goto LABEL_25;
  }
  v4 = *v6;
  if( *v6 )
  {
    if( *(_DWORD *)(v4 + 4) == v13 && *(_DWORD *)v4 == v11 )
    {
LABEL_15:
      v17 = *(_DWORD *)v4;
      v18 = *(_QWORD *)(v4 + 24);
      v19 = (unsigned int *)*((_QWORD *)v8 + 3);
      v20 = *(_DWORD *)(v4 + 8) >> 3;
      v36 = v18;
      LODWORD(v31) = v20;
      v30 = v17;
      v21 = v9[3] + v20 * (v14 + v12 * v15);
      v35 = v21;
      if( v17 )
      {
        v22 = *(_DWORD *)(v4 + 4);
        v23 = v22;
        do
        {
          v32 = 0;
          v24 = v19;
          if( v22 )
          {
            v25 = v32;
            v33 = v20;
            v26 = v21 - (_QWORD)v19;
            v27 = v18 - (_QWORD)v19;
            do
            {
              *(unsigned int *)((char *)v24 + v27) = BgpGxBlendColor(
                                                       *(unsigned int *)((char *)v24 + v26),
                                                       *v24,
                                                       *((_BYTE *)v24 + 3));
              ++v25;
              v23 = *(_DWORD *)(v4 + 4);
              v24 = (unsigned int *)((char *)v24 + v20);
            }
            while( v25 < v23 );
            v9 = a1;
            v8 = a2;
            v20 = v31;
            v21 = v35;
            v18 = v36;
            v17 = v30;
          }
          v22 = v23;
          v19 = (unsigned int *)((char *)v19 + v20 * v8[1]);
          v21 += v20 * *((_DWORD *)v9 + 1);
          v35 = v21;
          v18 += v20 * v23;
          v28 = v17-- == 1;
          v36 = v18;
          v30 = v17;
        }
        while( !v28 );
        v6 = a4;
      }
LABEL_25:
      if( v5 >= 0 )
        goto LABEL_29;
      goto LABEL_26;
    }
    v5 = -1073741670;
  }
  else
  {
    HIDWORD(v33) = *a2;
    LODWORD(v33) = v13;
    v16 = BgpGxRectangleCreate(&v33, 32, &v31);
    v4 = v31;
    v5 = v16;
    if( v16 >= 0 )
    {
      v12 = *((_DWORD *)v9 + 1);
      v15 = *((_DWORD *)a3 + 1);
      v14 = *(_DWORD *)a3;
      goto LABEL_15;
    }
  }
LABEL_26:
  if( *v6 )
    return(unsigned int)v5;
  if( v4 )
  {
    BgpGxRectangleDestroy(v4);
    v4 = 0i64;
  }
LABEL_29:
  if( !*v6 )
    *v6 = v4;
  return(unsigned int)v5;
}

Referenced by:

BgpTxtDisplayCharacter
BgpTxtDisplayString