Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* This file has been generated by the Hex-Rays decompiler.
- Copyright (c) 2007-2012 Hex-Rays <info@hex-rays.com>
- Detected compiler: GNU C++
- */
- #include <defs.h>
- //-------------------------------------------------------------------------
- // Function declarations
- int __fastcall scale_nn(int a1, int a2);
- int __fastcall grub_video_bitmap_create_scaled(int *a1, int a2, int a3, int a4);
- int __fastcall grub_video_bitmap_scale_proportional(int *a1, unsigned int a2, unsigned int a3, int a4, int scale_method, int selection_method, unsigned int v_align, unsigned int h_align);
- // int __fastcall _aeabi_uidiv(_DWORD, _DWORD); weak
- int __fastcall grub_error(_DWORD); // weak
- int __fastcall grub_video_bitmap_create(_DWORD, _DWORD, _DWORD, _DWORD); // weak
- int __fastcall grub_video_bitmap_destroy(_DWORD); // weak
- //----- (00000000) --------------------------------------------------------
- int __fastcall scale_nn(int a1, int a2)
- {
- bool v2; // zf@1
- int v3; // r4@3
- int v4; // r5@3
- int v5; // r7@4
- int v6; // r12@5
- int v7; // r0@6
- int v8; // r2@7
- int v9; // r6@8
- int v10; // lr@9
- int v11; // r1@10
- int v12; // r3@11
- bool v13; // zf@13
- int (__fastcall *v14)(_DWORD); // r3@16
- int result; // r0@16
- int v16; // r9@18
- int v17; // r7@18
- unsigned int v18; // r6@18
- unsigned int v19; // r3@19
- int v20; // r2@19
- int v21; // r3@19
- int v22; // r8@21
- int (__fastcall *v23)(_DWORD, _DWORD); // r0@21
- int v24; // r10@23
- int v25; // r11@23
- unsigned int v26; // r5@23
- int v27; // r2@26
- int v28; // r4@26
- int v29; // r0@26
- int v30; // lr@27
- int v31; // r1@27
- int v32; // r2@28
- int v33; // lr@29
- int v34; // t1@30
- int v35; // r0@36
- int v36; // r12@36
- int v37; // r1@36
- int v38; // r3@37
- int v39; // r0@37
- bool v40; // cf@37
- char v41; // r2@40
- char v42; // r2@43
- int v43; // r2@45
- unsigned int v44; // r2@48
- int v45; // r1@48
- char v46; // t1@49
- int (__fastcall *v47)(_DWORD); // r3@54
- int (__fastcall *v48)(_DWORD); // r3@56
- int (__fastcall *v49)(_DWORD); // r3@57
- bool v50; // zf@58
- bool v51; // zf@62
- int (__fastcall *v52)(_DWORD); // r3@72
- int (__fastcall *v53)(_DWORD); // r3@73
- int v54; // [sp+4h] [bp-84h]@21
- int (__fastcall *v55)(_DWORD, _DWORD); // [sp+8h] [bp-80h]@21
- int v56; // [sp+Ch] [bp-7Ch]@23
- unsigned int ddata; // [sp+10h] [bp-78h]@18
- int sw; // [sp+14h] [bp-74h]@18
- int v59; // [sp+24h] [bp-64h]@21
- int v60; // [sp+28h] [bp-60h]@21
- int v61; // [sp+2Ch] [bp-5Ch]@21
- int comp; // [sp+30h] [bp-58h]@21
- int v63; // [sp+34h] [bp-54h]@21
- int v64; // [sp+38h] [bp-50h]@19
- int v65; // [sp+3Ch] [bp-4Ch]@19
- int v66; // [sp+40h] [bp-48h]@19
- unsigned int v67; // [sp+44h] [bp-44h]@21
- int v68; // [sp+48h] [bp-40h]@19
- unsigned int dh; // [sp+4Ch] [bp-3Ch]@18
- unsigned int dy; // [sp+50h] [bp-38h]@21
- int sh; // [sp+54h] [bp-34h]@18
- int dstride; // [sp+58h] [bp-30h]@18
- int sstride; // [sp+5Ch] [bp-2Ch]@18
- v2 = a2 == 0;
- if ( a2 )
- v2 = a1 == 0;
- v3 = a1;
- v4 = a2;
- if ( v2 )
- {
- v49 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v49) = (unsigned int)&grub_error;
- result = v49(38);
- }
- else
- {
- v5 = *(_DWORD *)(a1 + 40);
- if ( v5 << 29
- || (v6 = *(_DWORD *)(a1 + 48), v6 & 7)
- || (v7 = *(_DWORD *)(a1 + 56), v7 << 29)
- || (v8 = *(_DWORD *)(v3 + 64), v8 << 29) )
- {
- v47 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v47) = (unsigned int)&grub_error;
- result = v47(38);
- }
- else
- {
- v9 = *(_DWORD *)(a2 + 40);
- if ( v9 << 29
- || (v10 = *(_DWORD *)(a2 + 48), v10 & 7)
- || (v11 = *(_DWORD *)(a2 + 56), v11 << 29)
- || (v12 = *(_DWORD *)(v4 + 64), v12 & 7) )
- {
- v48 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v48) = (unsigned int)&grub_error;
- result = v48(38);
- }
- else
- {
- if ( v5 != v9 )
- goto LABEL_77;
- v13 = v6 == v10;
- if ( v6 == v10 )
- v13 = *(_DWORD *)(v3 + 36) == *(_DWORD *)(v4 + 36);
- if ( !v13 )
- goto LABEL_77;
- v50 = v7 == v11;
- if ( v7 == v11 )
- v50 = *(_DWORD *)(v3 + 44) == *(_DWORD *)(v4 + 44);
- if ( !v50 )
- goto LABEL_77;
- v51 = v8 == v12;
- if ( v8 == v12 )
- v51 = *(_DWORD *)(v3 + 52) == *(_DWORD *)(v4 + 52);
- if ( v51 && *(_DWORD *)(v3 + 60) == *(_DWORD *)(v4 + 60) )
- {
- v18 = *(_DWORD *)(v3 + 16);
- if ( v18 == *(_DWORD *)(v4 + 16) )
- {
- v17 = *(_DWORD *)v3;
- if ( *(_DWORD *)v3 )
- {
- dh = *(_DWORD *)(v3 + 4);
- if ( dh )
- {
- sw = *(_DWORD *)v4;
- if ( *(_DWORD *)v4 )
- {
- sh = *(_DWORD *)(v4 + 4);
- if ( sh )
- {
- v16 = *(_DWORD *)(v4 + 76);
- ddata = *(_DWORD *)(v3 + 76);
- dstride = *(_DWORD *)(v3 + 20);
- sstride = *(_DWORD *)(v4 + 20);
- LABEL_19:
- v19 = (v18 - 4) >> 2;
- v68 = 0;
- v66 = v19 + 1;
- v20 = 4 * (v19 + 1);
- v64 = v19 - 8;
- v21 = (v19 - 8) & 0xFFFFFFF8;
- v65 = v20;
- if ( v18 - 1 <= 2 )
- v20 = 0;
- v22 = v21 + 8;
- v61 = v20 + 1;
- comp = v20;
- v54 = v20 + 2;
- dy = 0;
- v59 = ddata + v20 + 1;
- v60 = ddata + v20 + 2;
- LOWORD(v23) = (unsigned int)&_aeabi_uidiv;
- HIWORD(v23) = (unsigned int)&_aeabi_uidiv;
- v63 = ddata + v20;
- v55 = v23;
- v67 = ddata;
- while ( !v17 )
- {
- LABEL_51:
- v67 += dstride;
- ++dy;
- v68 += sh;
- if ( dy >= dh )
- goto LABEL_52;
- }
- v24 = 0;
- v25 = 0;
- v26 = v67;
- v56 = sstride * v55(v68, dh);
- while ( 1 )
- {
- while ( 1 )
- {
- v35 = v18 * v55(v24, v17);
- v36 = v26 - ddata;
- v37 = v35 + v56;
- if ( v18 )
- break;
- LABEL_35:
- ++v25;
- v26 += v18;
- v24 += sw;
- if ( v25 == v17 )
- goto LABEL_51;
- }
- v38 = v16 + v37;
- v39 = v16 + v56 + 4 + v35;
- v40 = v16 + v37 >= v26 + 4;
- if ( v16 + v37 < v26 + 4 )
- v40 = v26 >= v39;
- v41 = v40 != 0;
- if ( v18 > 9 )
- v42 = v41 & 1;
- else
- v42 = 0;
- v43 = v42 & 1;
- if ( ((unsigned __int8)v38 | (unsigned __int8)v26) & 3 )
- v43 = 0;
- v30 = v16 + v37;
- if ( v43 )
- {
- if ( v18 - 1 <= 2 )
- goto LABEL_78;
- if ( (unsigned int)v64 > 0xFFFFFFF6 )
- {
- v31 = v26;
- v32 = 0;
- }
- else
- {
- v27 = v38 + 32;
- v28 = v26 + 32;
- v29 = 0;
- do
- {
- v29 += 8;
- __pld((void *)(v27 + 84));
- v30 = v27;
- v31 = v28;
- *(_DWORD *)(v28 - 32) = *(_DWORD *)(v27 - 32);
- v27 += 32;
- v28 += 32;
- *(_DWORD *)(v28 - 60) = *(_DWORD *)(v27 - 60);
- *(_DWORD *)(v28 - 56) = *(_DWORD *)(v27 - 56);
- *(_DWORD *)(v28 - 52) = *(_DWORD *)(v27 - 52);
- *(_DWORD *)(v28 - 48) = *(_DWORD *)(v27 - 48);
- *(_DWORD *)(v28 - 44) = *(_DWORD *)(v27 - 44);
- *(_DWORD *)(v28 - 40) = *(_DWORD *)(v27 - 40);
- *(_DWORD *)(v28 - 36) = *(_DWORD *)(v27 - 36);
- }
- while ( v29 != v22 );
- v32 = v22;
- }
- v33 = v30 - 4;
- do
- {
- v34 = *(_DWORD *)(v33 + 4);
- v33 += 4;
- ++v32;
- *(_DWORD *)v31 = v34;
- v31 += 4;
- }
- while ( v32 < (unsigned int)v66 );
- if ( v18 != v65 )
- {
- LABEL_78:
- *(_BYTE *)(v63 + v36) = *(_BYTE *)(v38 + comp);
- if ( v61 < v18 )
- {
- *(_BYTE *)(v59 + v36) = *(_BYTE *)(v38 + v61);
- if ( v18 > v54 )
- *(_BYTE *)(v60 + v36) = *(_BYTE *)(v38 + v54);
- }
- }
- goto LABEL_35;
- }
- v44 = v26;
- v45 = v37 + v18 + v16;
- do
- {
- v46 = *(_BYTE *)v38++;
- *(_BYTE *)v44++ = v46;
- }
- while ( v38 != v45 );
- ++v25;
- v26 += v18;
- v24 += sw;
- if ( v25 == v17 )
- goto LABEL_51;
- }
- }
- }
- }
- }
- v52 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v52) = (unsigned int)&grub_error;
- result = v52(38);
- }
- else
- {
- v53 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v53) = (unsigned int)&grub_error;
- result = v53(24);
- }
- }
- else
- {
- LABEL_77:
- v14 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v14) = (unsigned int)&grub_error;
- result = v14(38);
- }
- }
- }
- }
- if ( !result )
- {
- v16 = *(_DWORD *)(v4 + 76);
- ddata = *(_DWORD *)(v3 + 76);
- dh = *(_DWORD *)(v3 + 4);
- v17 = *(_DWORD *)v3;
- sw = *(_DWORD *)v4;
- v18 = *(_DWORD *)(v3 + 16);
- sh = *(_DWORD *)(v4 + 4);
- sstride = *(_DWORD *)(v4 + 20);
- dstride = *(_DWORD *)(v3 + 20);
- if ( dh )
- goto LABEL_19;
- LABEL_52:
- result = 0;
- }
- return result;
- }
- // 9F0: using guessed type int __fastcall grub_error(_DWORD);
- //----- (0000035C) --------------------------------------------------------
- int __fastcall grub_video_bitmap_create_scaled(int *a1, int a2, int a3, int a4)
- {
- int *v4; // r6@1
- int v5; // r7@1
- int v6; // r8@1
- int v7; // r4@1
- int (__fastcall *v8)(_DWORD); // r3@9
- int v9; // r5@9
- bool v10; // zf@11
- bool v11; // nf@11
- char v12; // vf@11
- int (__fastcall *v13)(_DWORD, _DWORD, _DWORD, _DWORD); // r5@14
- int (__fastcall *v15)(_DWORD); // r3@16
- int (__fastcall *v16)(_DWORD); // r3@17
- void (__fastcall *v17)(_DWORD); // r3@19
- int (__fastcall *v18)(_DWORD); // r3@20
- int (__fastcall *v19)(_DWORD); // r3@21
- v4 = a1;
- v5 = a2;
- v6 = a3;
- v7 = a4;
- *a1 = 0;
- if ( a4 )
- {
- if ( *(_DWORD *)(a4 + 40) << 29
- || *(_DWORD *)(a4 + 48) << 29
- || *(_DWORD *)(a4 + 56) << 29
- || *(_DWORD *)(a4 + 64) << 29 )
- {
- v15 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v15) = (unsigned int)&grub_error;
- v9 = v15(38);
- }
- else if ( *(_DWORD *)a4 && *(_DWORD *)(a4 + 4) )
- {
- if ( *(_DWORD *)(a4 + 12) == 8 * *(_DWORD *)(a4 + 16) )
- goto LABEL_11;
- v8 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v8) = (unsigned int)&grub_error;
- v9 = v8(38);
- }
- else
- {
- v18 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v18) = (unsigned int)&grub_error;
- v9 = v18(38);
- }
- }
- else
- {
- v19 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v19) = (unsigned int)&grub_error;
- v9 = v19(38);
- }
- if ( v9 )
- return v9;
- LABEL_11:
- v12 = 0;
- v10 = v6 == 0;
- v11 = v6 < 0;
- if ( v6 > 0 )
- {
- v12 = 0;
- v10 = v5 == 0;
- v11 = v5 < 0;
- }
- if ( !((unsigned __int8)(v11 ^ v12) | v10) )
- {
- v13 = (int (__fastcall *)(_DWORD, _DWORD, _DWORD, _DWORD))&grub_video_bitmap_create;
- HIWORD(v13) = (unsigned int)&grub_video_bitmap_create;
- v9 = v13(v4, v5, v6, *(_DWORD *)(v7 + 32));
- if ( !v9 )
- {
- v9 = scale_nn(*v4, v7);
- if ( v9 )
- {
- v17 = (void (__fastcall *)(_DWORD))&grub_video_bitmap_destroy;
- HIWORD(v17) = (unsigned int)&grub_video_bitmap_destroy;
- v17(*v4);
- *v4 = 0;
- }
- }
- return v9;
- }
- v16 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v16) = (unsigned int)&grub_error;
- return v16(38);
- }
- // 9F0: using guessed type int __fastcall grub_error(_DWORD);
- // 9F4: using guessed type int __fastcall grub_video_bitmap_create(_DWORD, _DWORD, _DWORD, _DWORD);
- // 9F8: using guessed type int __fastcall grub_video_bitmap_destroy(_DWORD);
- //----- (0000045C) --------------------------------------------------------
- int __fastcall grub_video_bitmap_scale_proportional(int *a1, unsigned int a2, unsigned int a3, int a4, int scale_method, int selection_method, unsigned int v_align, unsigned int h_align)
- {
- int *v8; // r6@1
- unsigned int v9; // r5@1
- unsigned int v10; // r7@1
- int v11; // r4@1
- int (__fastcall *v12)(_DWORD); // r3@9
- int result; // r0@9
- bool v14; // zf@11
- bool v15; // nf@11
- char v16; // vf@11
- int (__fastcall *v17)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@14
- unsigned int v18; // r11@15
- unsigned int v19; // r8@15
- int (__fastcall *v20)(_DWORD); // r3@17
- int (__fastcall *v21)(_DWORD); // r3@19
- int (__fastcall *v22)(_DWORD); // r3@20
- int v23; // r0@21
- int (__fastcall *v24)(_DWORD, _DWORD); // r3@22
- int v25; // r0@22
- int v26; // r0@23
- unsigned int v27; // lr@27
- unsigned int v28; // r9@27
- unsigned int v29; // r12@28
- unsigned int v30; // r3@28
- int v31; // r5@28
- int v32; // r10@28
- unsigned int v33; // r7@29
- int v34; // r2@30
- int v35; // r8@30
- int v36; // r12@30
- int v37; // r11@30
- int v38; // r2@30
- int v39; // r9@30
- int v40; // ST14_4@30
- int v41; // r12@30
- int v42; // r2@30
- int v43; // lr@30
- int v44; // ST10_4@30
- int v45; // lr@30
- int v46; // r3@30
- int v47; // r0@30
- int v48; // r0@30
- int v49; // r5@30
- int v50; // r3@30
- void (__fastcall *v51)(_DWORD); // r3@31
- int v52; // lr@32
- int (__fastcall *v53)(_DWORD, _DWORD); // r7@33
- unsigned int v54; // r1@33
- int v55; // r0@33
- int v56; // r0@34
- int v57; // r1@39
- int (__fastcall *v58)(_DWORD, _DWORD); // r2@41
- int v59; // r0@41
- int (__fastcall *v60)(_DWORD, _DWORD); // r5@52
- int v61; // r0@52
- int (__fastcall *v62)(_DWORD); // r3@57
- int (__fastcall *v63)(_DWORD); // r7@69
- int dw; // [sp+4h] [bp-3Ch]@14
- int dh; // [sp+8h] [bp-38h]@14
- unsigned int src_height_orig; // [sp+Ch] [bp-34h]@29
- v8 = a1;
- v9 = a2;
- v10 = a3;
- *a1 = 0;
- v11 = a4;
- if ( !a4 )
- {
- v62 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v62) = (unsigned int)&grub_error;
- result = v62(38);
- LABEL_10:
- if ( result )
- return result;
- goto LABEL_11;
- }
- if ( !(*(_DWORD *)(a4 + 40) << 29)
- && !(*(_DWORD *)(a4 + 48) << 29)
- && !(*(_DWORD *)(a4 + 56) << 29)
- && !(*(_DWORD *)(a4 + 64) << 29) )
- {
- if ( *(_DWORD *)a4 && *(_DWORD *)(a4 + 4) )
- {
- if ( *(_DWORD *)(a4 + 12) == 8 * *(_DWORD *)(a4 + 16) )
- goto LABEL_11;
- v12 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v12) = (unsigned int)&grub_error;
- result = v12(38);
- }
- else
- {
- v22 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v22) = (unsigned int)&grub_error;
- result = v22(38);
- }
- goto LABEL_10;
- }
- v20 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v20) = (unsigned int)&grub_error;
- result = v20(38);
- if ( result )
- return result;
- LABEL_11:
- v16 = 0;
- v14 = v10 == 0;
- v15 = (v10 & 0x80000000u) != 0;
- if ( (signed int)v10 > 0 )
- {
- v16 = 0;
- v14 = v9 == 0;
- v15 = (v9 & 0x80000000u) != 0;
- }
- if ( (unsigned __int8)(v15 ^ v16) | v14 )
- {
- v21 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v21) = (unsigned int)&grub_error;
- return v21(38);
- }
- v17 = (int (__fastcall *)(_DWORD, _DWORD, _DWORD, _DWORD))&grub_video_bitmap_create;
- HIWORD(v17) = (unsigned int)&grub_video_bitmap_create;
- result = v17(v8, v9, v10, *(_DWORD *)(v11 + 32));
- dw = v9;
- dh = v10;
- if ( !result )
- {
- v18 = *(_DWORD *)v11;
- v19 = *(_DWORD *)(v11 + 4);
- if ( (unsigned int)(selection_method - 1) > 3 )
- {
- LABEL_49:
- v49 = grub_error(38);
- }
- else
- {
- switch ( selection_method )
- {
- case 4:
- v23 = v19 * v9;
- if ( v18 * v10 >= v19 * v9 )
- goto LABEL_52;
- v24 = (int (__fastcall *)(_DWORD, _DWORD))&_aeabi_uidiv;
- v25 = v18 * v10;
- goto LABEL_23;
- case 1:
- v52 = v18 * v10;
- v23 = v19 * v9;
- if ( v18 * v10 < v19 * v9 )
- {
- v53 = (int (__fastcall *)(_DWORD, _DWORD))&_aeabi_uidiv;
- v54 = v9;
- v55 = v52;
- goto LABEL_34;
- }
- LABEL_52:
- v60 = (int (__fastcall *)(_DWORD, _DWORD))&_aeabi_uidiv;
- HIWORD(v60) = (unsigned int)&_aeabi_uidiv;
- v61 = v60(v23, v10);
- v32 = v61;
- if ( v18 <= v61 )
- goto LABEL_62;
- if ( h_align == 1 )
- {
- v27 = 0;
- v29 = (v18 - v61) >> 1;
- v30 = 0;
- v28 = 0;
- v31 = v19;
- goto LABEL_29;
- }
- if ( h_align < 1 )
- {
- LABEL_62:
- v27 = 0;
- v31 = v19;
- v29 = 0;
- v30 = 0;
- v28 = 0;
- goto LABEL_29;
- }
- if ( h_align == 2 )
- {
- v27 = 0;
- v29 = v18 - v61;
- v30 = 0;
- v28 = 0;
- v31 = v19;
- goto LABEL_29;
- }
- v18 = v61;
- v49 = grub_error(38);
- break;
- case 2:
- v25 = v18 * v10;
- v57 = v19 * v9;
- if ( v18 * v10 >= v19 * v9 )
- goto LABEL_41;
- v24 = (int (__fastcall *)(_DWORD, _DWORD))&_aeabi_uidiv;
- LABEL_23:
- HIWORD(v24) = (unsigned int)&_aeabi_uidiv;
- v26 = v24(v25, *(_DWORD *)(v11 + 4));
- if ( v9 <= v26 )
- goto LABEL_61;
- if ( h_align == 1 )
- {
- v27 = 0;
- v28 = (v9 - v26) >> 1;
- goto LABEL_28;
- }
- if ( h_align < 1 )
- {
- LABEL_61:
- v27 = 0;
- dw = v26;
- goto LABEL_60;
- }
- if ( h_align == 2 )
- {
- v27 = 0;
- v28 = v9 - v26;
- LABEL_28:
- dw = v26;
- v29 = v27;
- v30 = v27;
- v31 = v19;
- v32 = v18;
- goto LABEL_29;
- }
- dw = v26;
- v49 = grub_error(38);
- break;
- case 3:
- v55 = v18 * v10;
- v57 = v19 * v9;
- if ( v18 * v10 < v19 * v9 )
- {
- v53 = (int (__fastcall *)(_DWORD, _DWORD))&_aeabi_uidiv;
- v54 = v9;
- LABEL_34:
- HIWORD(v53) = (unsigned int)&_aeabi_uidiv;
- v56 = v53(v55, v54);
- v31 = v56;
- if ( v19 > v56 )
- {
- if ( v_align == 1 )
- {
- v29 = 0;
- v27 = (v19 - v56) >> 1;
- v30 = 0;
- v28 = 0;
- v32 = v18;
- goto LABEL_29;
- }
- if ( v_align >= 1 )
- {
- if ( v_align == 2 )
- {
- v29 = 0;
- v27 = v19 - v56;
- v30 = 0;
- v28 = 0;
- v32 = v18;
- goto LABEL_29;
- }
- v63 = (int (__fastcall *)(_DWORD))&grub_error;
- HIWORD(v63) = (unsigned int)&grub_error;
- v19 = v56;
- v49 = v63(38);
- break;
- }
- }
- v27 = 0;
- v32 = v18;
- v29 = 0;
- v30 = 0;
- v28 = 0;
- LABEL_29:
- v33 = v18;
- src_height_orig = v19;
- goto LABEL_30;
- }
- LABEL_41:
- v58 = (int (__fastcall *)(_DWORD, _DWORD))&_aeabi_uidiv;
- HIWORD(v58) = (unsigned int)&_aeabi_uidiv;
- v59 = v58(v57, *(_DWORD *)v11);
- if ( v10 <= v59 )
- goto LABEL_59;
- if ( v_align == 1 )
- {
- v27 = 0;
- v30 = (v10 - v59) >> 1;
- goto LABEL_46;
- }
- if ( v_align < 1 )
- {
- LABEL_59:
- v27 = 0;
- dh = v59;
- LABEL_60:
- v29 = v27;
- v30 = v27;
- v28 = v27;
- v31 = v19;
- v32 = v18;
- goto LABEL_29;
- }
- if ( v_align == 2 )
- {
- v27 = 0;
- v30 = v10 - v59;
- LABEL_46:
- dh = v59;
- v29 = v27;
- v28 = v27;
- v31 = v19;
- v32 = v18;
- goto LABEL_29;
- }
- dh = v59;
- v49 = grub_error(38);
- break;
- default:
- goto LABEL_49;
- }
- }
- if ( v49 )
- {
- LABEL_31:
- v51 = (void (__fastcall *)(_DWORD))&grub_video_bitmap_destroy;
- HIWORD(v51) = (unsigned int)&grub_video_bitmap_destroy;
- v51(*v8);
- result = v49;
- *v8 = 0;
- return result;
- }
- v30 = 0;
- v33 = *(_DWORD *)v11;
- v32 = v18;
- v31 = v19;
- v29 = 0;
- src_height_orig = *(_DWORD *)(v11 + 4);
- v27 = 0;
- v28 = 0;
- LABEL_30:
- v34 = *(_DWORD *)(v11 + 16);
- v35 = *(_DWORD *)(v11 + 76);
- v36 = v34 * v29;
- v37 = *(_DWORD *)*v8;
- v38 = v34 * v28;
- v39 = *(_DWORD *)(*v8 + 76);
- v40 = v38;
- v41 = v36 + *(_DWORD *)(v11 + 20) * v27;
- v42 = *(_DWORD *)(*v8 + 4);
- v43 = *(_DWORD *)(*v8 + 20);
- *(_DWORD *)v11 = v32;
- v44 = v42;
- *(_DWORD *)(v11 + 76) = v35 + v41;
- v45 = v40 + v43 * v30;
- v46 = *v8;
- *(_DWORD *)(v11 + 4) = v31;
- v47 = *(_DWORD *)(v46 + 76);
- *(_DWORD *)v46 = dw;
- *(_DWORD *)(v46 + 76) = v47 + v45;
- v48 = *v8;
- *(_DWORD *)(v46 + 4) = dh;
- result = scale_nn(v48, v11);
- *(_DWORD *)(v11 + 76) = v35;
- v49 = result;
- v50 = *v8;
- *(_DWORD *)v11 = v33;
- *(_DWORD *)(v11 + 4) = src_height_orig;
- *(_DWORD *)v50 = v37;
- *(_DWORD *)(v50 + 4) = v44;
- *(_DWORD *)(v50 + 76) = v39;
- if ( !result )
- return result;
- goto LABEL_31;
- }
- return result;
- }
- // 9EC: using guessed type int __fastcall _aeabi_uidiv(_DWORD, _DWORD);
- // 9F0: using guessed type int __fastcall grub_error(_DWORD);
- // 9F4: using guessed type int __fastcall grub_video_bitmap_create(_DWORD, _DWORD, _DWORD, _DWORD);
- // 9F8: using guessed type int __fastcall grub_video_bitmap_destroy(_DWORD);
- // ALL OK, 3 function(s) have been successfully decompiled
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement