summaryrefslogtreecommitdiff
path: root/libs/JSystem/JGadget/binary.cpp
blob: 10f5b6b2cc05729600f1cc19fe4b1e69ad1b9578 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//
// Generated By: dol2asm
// Translation Unit: binary
//

#include "JSystem/JGadget/binary.h"

/* 802DC864-802DC8C8 2D71A4 0064+00 0/0 2/2 0/0 .text
 * parseVariableUInt_16_32_following__Q27JGadget6binaryFPCvPUlPUlPQ37JGadget6binary5TEBit */
const void*
JGadget::binary::parseVariableUInt_16_32_following(void const* buffer, u32* param_1, u32* param_2,
                                                   JGadget::binary::TEBit* param_3) {
    JGadget::binary::TEBit temp;
    if (param_3 == NULL) {
        param_3 = &temp;
    }
    u32 uVar1 = *(u16*)buffer;
    const void* rv;
    if ((uVar1 & 0x8000) == 0) {
        param_3->value = 0x10;
        *param_1 = uVar1;
        *param_2 =  *(u16*)((u8*)buffer + 2);
        rv = (u8*)buffer + 4;
    } else {
        param_3->value = 0x20;
        uVar1 <<= 16;
        uVar1 &= 0x7fff0000;
        uVar1 |= *(u16*)((u8*)buffer + 2);
        *param_1 = uVar1;
        *param_2 = *(u32*)((u8*)buffer + 4);
        rv = (u8*)buffer + 8;
    }
    return rv;
}


/* 802DC8C8-802DC910 2D7208 0048+00 0/0 4/4 0/0 .text
 * __dt__Q37JGadget6binary19TParse_header_blockFv               */
JGadget::binary::TParse_header_block::~TParse_header_block() {
}

/* 802DC910-802DCA1C 2D7250 010C+00 0/0 9/9 0/0 .text
 * parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl    */
bool JGadget::binary::TParse_header_block::parse_next(void const** ptrLocation, u32 idx) {
    u32 headerEnd, blockEnd;
    
    if ((ptrLocation == NULL) || (*ptrLocation == NULL)) {
        return false;
    }
    bool check, checkLastBlock;
    checkLastBlock = check = false;

    check = checkNext(ptrLocation, &headerEnd, idx);
    
    checkLastBlock = check;
    if (!(idx & 1) && (check == false)) {
        return check;
    }
    
    while (headerEnd > 0) {
        check = false;
        if (parseBlock_next(ptrLocation, &blockEnd, idx) && checkLastBlock) {
            check = true;
        }
        checkLastBlock = check;
        if (((idx & 2) == 0) && (check == false)) {
            return check;
        }
        headerEnd--;
    }
    return checkLastBlock;
}