RaspInitializeGlyphData
__int64 __fastcall RaspInitializeGlyphData(__int64 a1, int a2, __int64 *a3, __int64 *a4){
int v7;
unsigned int v8;
INT64 v9;
unsigned int v10;
unsigned int v11;
unsigned int v12;
unsigned __int16 v13;
unsigned __int16 v14;
unsigned __int64 Memory;
unsigned __int64 v16;
INT64 v17;
int v18;
_WORD *v19;
int v20;
int v21;
unsigned int v22;
__int64 v23;
unsigned int v24;
_QWORD *v25;
unsigned int v26;
INT64 v27;
__int64 *v28;
_BYTE *v29;
_BYTE *v30;
int v31;
__int64 v32;
__int64 v33;
__int16 v34;
__int64 v35;
__int64 v36;
unsigned int v37;
INT64 v38;
__int16 v39;
_DWORD *v40;
char v41;
__int64 v42;
__int16 v43;
_DWORD *v44;
char v45;
_QWORD *v46;
INT64 v47;
__int64 v49;
__int64 v50;
unsigned int v51;
__int16 v52;
size_t Size;
INT64 a1a;
INT64 v55;
_WORD v56[4];
__int16 v57[12];
__int64 v58;
int v59;
__int64 *v60;
_QWORD *a2a;
a2a = a4;
v60 = a3;
v59 = a2;
*(_QWORD *)v56 = 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 = *(_QWORD *)(*(_QWORD *)(a1 + 16) + 16i64);
v9 = v55;
FioFwReadUshortAtOffset(v55, (unsigned int)(v7 + a2), v56);
FioFwReadUshortAtOffset(v55, v8 + 2, &v56[1]);
v8 += 4;
FioFwReadUshortAtOffset(v55, v8, &v56[2]);
FioFwReadUshortAtOffset(v55, v8 + 2, &v56[3]);
v10 = v8 + 4;
FioFwReadUshortAtOffset(v55, v10, v57);
v11 = v56[0];
if( v56[0] < 0 )
return 3221225485i64;
if( v56[0] )
{
v12 = v10 + 2 * v56[0];
FioFwReadUshortAtOffset(v55, v12, &v52);
v13 = v52 + 1;
FioFwReadUshortAtOffset(v9, v12 + 2, &v58);
v14 = v58;
a1a = (unsigned __int16)v58;
Size = v13 + (unsigned __int64)(unsigned __int16)v58 + 8i64 * v13 + 2 * ((__int16)v11 + 41i64);
Memory = RaspAllocateMemory(Size, a4);
v16 = Memory;
if( Memory )
{
memset(Memory, 0i64);
v17 = v16;
v18 = v56[1];
*(_DWORD *)(v16 + 6) = v56[2];
*(_DWORD *)(v16 + 10) = v56[3];
*(_DWORD *)(v16 + 14) = v57[0];
*(_WORD *)v16 = v11;
*(_DWORD *)(v16 + 2) = v18;
*(_DWORD *)(v16 + 18) = v18;
*(_WORD *)(v16 + 22) = v14;
*(_WORD *)(v16 + 24) = v13;
v19 = (_WORD *)(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 = a2a;
v26 = v14 + v24;
v27 = (INT64)v19 + a1a;
v28 = a2a;
*(_QWORD *)(v17 + 42) = v27;
v29 = (_BYTE *)RaspAllocateMemory(v13, v28);
a1a = (INT64)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 = v13 + v27;
v39 = v32;
*(_QWORD *)(v17 + 50) = v38;
if( v31 )
{
while( 1 )
{
v40 = (_DWORD *)(v38 + 4i64 * v39);
*v40 = v32;
v41 = *(_BYTE *)(v39 + *(_QWORD *)(v17 + 42));
if( (v41 & 2) != 0 )
{
FioFwReadBytesAtOffset(v9, v37++, 1ui64, (VOID *)(v38 + 4i64 * v39));
if( (*(_BYTE *)(v39 + *(_QWORD *)(v17 + 42)) & 0x10) == 0 )
*v40 = -*v40;
}
else
{
if( (v41 & 0x10) != 0 )
goto LABEL_20;
FioFwReadUshortAtOffset(v9, v37, (_WORD *)(v38 + 4i64 * v39));
v37 += 2;
}
LODWORD(v32) = 0;
LABEL_20:
if( ++v39 >= v31 )
{
v38 = *(_QWORD *)(v17 + 50);
break;
}
}
}
v42 = v38 + 4 * (v31 + 2i64);
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, v44);
v37 += 2;
}
LODWORD(v32) = 0;
LABEL_27:
++v43;
v42 = v58;
}
while( v43 < v31 );
}
v46 = a2a;
v47 = a1a;
*v60 = v17;
RaspFreeMemory(v47, v46);
return 0i64;
}
RaspFreeMemory(v17, v25);
}
}
else
{
v50 = RaspAllocateMemory(0x42ui64, a4);
if( v50 )
{
v51 = v56[1];
*(_DWORD *)(v50 + 6) = v56[2];
*(_DWORD *)(v50 + 10) = v56[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:
No references.