RaspInitializeGlyphData
__int64 __fastcall RaspInitializeGlyphData(__int64 a1, int a2, _QWORD *a3, _BG_RASTERIZER_WORKSPACE *a4){
int v7;
unsigned int v8;
_FILE_IMAGE *v9;
unsigned int v10;
unsigned int v11;
unsigned int v12;
unsigned __int16 v13;
unsigned __int16 v14;
char *Memory;
char *v16;
char *v17;
int v18;
UINT16 *v19;
int v20;
int v21;
unsigned int v22;
__int64 v23;
unsigned int v24;
_BG_RASTERIZER_WORKSPACE *v25;
unsigned int v26;
char *v27;
_BG_RASTERIZER_WORKSPACE *v28;
VOID *v29;
_BYTE *v30;
int v31;
__int64 v32;
__int64 v33;
__int16 v34;
__int64 v35;
__int64 v36;
unsigned int v37;
char *v38;
__int16 v39;
char *v40;
char v41;
__int64 v42;
__int16 v43;
_DWORD *v44;
char v45;
_BG_RASTERIZER_WORKSPACE *v46;
VOID *v47;
__int64 v49;
char *v50;
unsigned int v51;
UINT16 v52;
size_t Size[2];
VOID *v54;
_FILE_IMAGE *v55;
UINT16 Buffer[4];
__int16 v57[12];
__int64 v58;
int v59;
_QWORD *v60;
_BG_RASTERIZER_WORKSPACE *Workspace;
Workspace = a4;
v60 = a3;
v59 = a2;
*(_QWORD *)Buffer = 0i64;
v57[0] = 0;
LOWORD(v58) = 0;
v52 = 0;
if( !a1 )
return 3221225473i64;
v7 = *(_DWORD *)(a1 + 60);
if( !v7 )
return 3221225473i64;
v8 = v7 + a2;
v55 = *(_FILE_IMAGE **)(*(_QWORD *)(a1 + 16) + 16i64);
v9 = v55;
FioFwReadUshortAtOffset(v55, (unsigned int)(v7 + a2), Buffer);
FioFwReadUshortAtOffset(v55, v8 + 2, &Buffer[1]);
v8 += 4;
FioFwReadUshortAtOffset(v55, v8, &Buffer[2]);
FioFwReadUshortAtOffset(v55, v8 + 2, &Buffer[3]);
v10 = v8 + 4;
FioFwReadUshortAtOffset(v55, v10, (UINT16 *)v57);
v11 = Buffer[0];
if( (Buffer[0] & 0x8000u) != 0 )
return 3221225485i64;
if( Buffer[0] )
{
v12 = v10 + 2 * (__int16)Buffer[0];
FioFwReadUshortAtOffset(v55, v12, &v52);
v13 = v52 + 1;
FioFwReadUshortAtOffset(v9, v12 + 2, (UINT16 *)&v58);
v14 = v58;
v54 = (VOID *)(unsigned __int16)v58;
*(_QWORD *)Size = v13 + (unsigned __int64)(unsigned __int16)v58 + 8i64 * v13 + 2 * ((__int16)v11 + 41i64);
Memory = (char *)RaspAllocateMemory(*(UINT64 *)Size, a4);
v16 = Memory;
if( Memory )
{
memset(Memory, 0i64, Size[0]);
v17 = v16;
v18 = (__int16)Buffer[1];
*(_DWORD *)(v16 + 6) = (__int16)Buffer[2];
*(_DWORD *)(v16 + 10) = (__int16)Buffer[3];
*(_DWORD *)(v16 + 14) = v57[0];
*(_WORD *)v16 = v11;
*(_DWORD *)(v16 + 2) = v18;
*(_DWORD *)(v16 + 18) = v18;
*((_WORD *)v16 + 11) = v14;
*((_WORD *)v16 + 12) = v13;
v19 = (UINT16 *)(v16 + 66);
v20 = *(_DWORD *)(a1 + 60);
v21 = v59 + 10;
*(_QWORD *)(v17 + 26) = v19;
v22 = v20 + v21;
if( (__int16)v11 > 0 )
{
v23 = v11;
do
{
FioFwReadUshortAtOffset(v9, v22, v19);
v22 += 2;
++v19;
--v23;
}
while( v23 );
v14 = v58;
}
v24 = v22 + 2;
*(_QWORD *)(v17 + 34) = v19;
FioFwReadBytesAtOffset(v9, v24, v14, v19);
v25 = Workspace;
v26 = v14 + v24;
v27 = (char *)v19 + (_QWORD)v54;
v28 = Workspace;
*(_QWORD *)(v17 + 42) = v27;
v29 = RaspAllocateMemory(v13, v28);
v54 = v29;
v30 = v29;
if( v29 )
{
v31 = v13;
FioFwReadBytesAtOffset(v9, v26, v13, v29);
LODWORD(v32) = 0;
LODWORD(v33) = 0;
v34 = 0;
if( v13 )
{
do
{
v35 = (unsigned int)v33;
v36 = v34++;
*(_BYTE *)(v36 + *(_QWORD *)(v17 + 42)) = v30[(unsigned int)v33];
if( (v30[(unsigned int)v33] & 8) != 0 )
{
v33 = (unsigned int)(v33 + 1);
if( v30[v33] )
{
v32 = (unsigned __int8)v30[v33];
do
{
v49 = v34++;
*(_BYTE *)(v49 + *(_QWORD *)(v17 + 42)) = v30[v35];
--v32;
}
while( v32 );
v31 = v13;
}
}
LODWORD(v33) = v33 + 1;
}
while( v34 < v31 );
v9 = v55;
}
v37 = v33 + v26;
v38 = &v27[v13];
v39 = v32;
*(_QWORD *)(v17 + 50) = v38;
if( v31 )
{
while( 1 )
{
v40 = &v38[4 * v39];
*(_DWORD *)v40 = v32;
v41 = *(_BYTE *)(v39 + *(_QWORD *)(v17 + 42));
if( (v41 & 2) != 0 )
{
FioFwReadBytesAtOffset(v9, v37++, 1ui64, &v38[4 * v39]);
if( (*(_BYTE *)(v39 + *(_QWORD *)(v17 + 42)) & 0x10) == 0 )
*(_DWORD *)v40 = -*(_DWORD *)v40;
}
else
{
if( (v41 & 0x10) != 0 )
goto LABEL_20;
FioFwReadUshortAtOffset(v9, v37, (UINT16 *)&v38[4 * v39]);
v37 += 2;
}
LODWORD(v32) = 0;
LABEL_20:
if( ++v39 >= v31 )
{
v38 = *(char **)(v17 + 50);
break;
}
}
}
v42 = (__int64)&v38[4 * v31 + 8];
v43 = v32;
v58 = v42;
*(_QWORD *)(v17 + 58) = v42;
if( v31 )
{
do
{
v44 = (_DWORD *)(v42 + 4i64 * v43);
*v44 = v32;
v45 = *(_BYTE *)(*(_QWORD *)(v17 + 42) + v43);
if( (v45 & 4) != 0 )
{
FioFwReadBytesAtOffset(v9, v37++, 1ui64, v44);
if( (*(_BYTE *)(*(_QWORD *)(v17 + 42) + v43) & 0x20) == 0 )
*v44 = -*v44;
}
else
{
if( (v45 & 0x20) != 0 )
goto LABEL_27;
FioFwReadUshortAtOffset(v9, v37, (UINT16 *)v44);
v37 += 2;
}
LODWORD(v32) = 0;
LABEL_27:
++v43;
v42 = v58;
}
while( v43 < v31 );
}
v46 = Workspace;
v47 = v54;
*v60 = v17;
RaspFreeMemory(v47, v46);
return 0i64;
}
RaspFreeMemory(v17, v25);
}
}
else
{
v50 = (char *)RaspAllocateMemory(0x42ui64, a4);
if( v50 )
{
v51 = (__int16)Buffer[1];
*(_DWORD *)(v50 + 6) = (__int16)Buffer[2];
*(_DWORD *)(v50 + 10) = (__int16)Buffer[3];
*(_DWORD *)(v50 + 14) = v57[0];
*(_WORD *)v50 = 0;
*(_DWORD *)(v50 + 2) = v51;
*(_QWORD *)(v50 + 18) = v51;
*a3 = v50;
return 0i64;
}
}
return 3221225626i64;
}Referenced by:
RaspLoadGlyphData