// File: bluesky466[P]ResourcesArscDemo/main.cpp
// Function: printValue(Res_value const*, ResStringPool_header, unsigned char*)
void printValue(const Res_value* value, struct ResStringPool_header globalStringPoolHeader, unsigned char* pGlobalStrings) {
    if (value->dataType == Res_value::TYPE_NULL) {
        printf("(null)\n");
    } else if (value->dataType == Res_value::TYPE_REFERENCE) {
		printf("(reference) 0x%08x\n",value->data);
    } else if (value->dataType == Res_value::TYPE_ATTRIBUTE) {
		printf("(attribute) 0x%08x\n",value->data);
    } else if (value->dataType == Res_value::TYPE_STRING) {
		printf("(string) ");
		printStringFromStringsPool(
				(uint32_t*)pGlobalStrings,
				(char*)pGlobalStrings + globalStringPoolHeader.stringsStart - sizeof(struct ResStringPool_header),
				value->data,
				globalStringPoolHeader.flags & ResStringPool_header::UTF8_FLAG
		);
    } else if (value->dataType == Res_value::TYPE_FLOAT) {
        printf("(float) %f\n",*(const float*)&value->data);
    } else if (value->dataType == Res_value::TYPE_DIMENSION) {
        printf("(dimension) ");
		printStringOfComplex(value->data, false);
    } else if (value->dataType == Res_value::TYPE_FRACTION) {
        printf("(fraction) ");
		printStringOfComplex(value->data, true);
    } else if (value->dataType >= Res_value::TYPE_FIRST_COLOR_INT
            && value->dataType <= Res_value::TYPE_LAST_COLOR_INT) {
		printf("(color) #%08x\n", value->data);
    } else if (value->dataType == Res_value::TYPE_INT_BOOLEAN) {
        printf("(boolean) %s\n",value->data ? "true" : "false");
    } else if (value->dataType >= Res_value::TYPE_FIRST_INT
            && value->dataType <= Res_value::TYPE_LAST_INT) {
        printf("(int) %d or %u\n", value->data, value->data);
    } else {
		printf("(unknown type)\n");
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
leaq 0x10(%rbp), %rax
movq %rax, -0x18(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x0, %eax
jne 0x2d58
leaq 0x655f(%rip), %rdi      # 0x92ab
movb $0x0, %al
callq 0x2030
jmp 0x2f42
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x1, %eax
jne 0x2d7f
movq -0x8(%rbp), %rax
movl 0x4(%rax), %esi
leaq 0x6540(%rip), %rdi      # 0x92b3
movb $0x0, %al
callq 0x2030
jmp 0x2f40
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x2, %eax
jne 0x2da6
movq -0x8(%rbp), %rax
movl 0x4(%rax), %esi
leaq 0x652d(%rip), %rdi      # 0x92c7
movb $0x0, %al
callq 0x2030
jmp 0x2f3e
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x3, %eax
jne 0x2df1
leaq 0x6521(%rip), %rdi      # 0x92db
movb $0x0, %al
callq 0x2030
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl 0x14(%rax), %ecx
addq %rcx, %rsi
addq $-0x1c, %rsi
movq -0x8(%rbp), %rcx
movl 0x4(%rcx), %edx
movl 0x10(%rax), %ecx
andl $0x100, %ecx            # imm = 0x100
callq 0x2c50
jmp 0x2f3c
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x4, %eax
jne 0x2e1e
movq -0x8(%rbp), %rax
movss 0x4(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x64d3(%rip), %rdi      # 0x92e5
movb $0x1, %al
callq 0x2030
jmp 0x2f3a
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x5, %eax
jne 0x2e4c
leaq 0x64bf(%rip), %rdi      # 0x92f1
movb $0x0, %al
callq 0x2030
movq -0x8(%rbp), %rax
movl 0x4(%rax), %edi
xorl %esi, %esi
callq 0x3050
jmp 0x2f38
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x6, %eax
jne 0x2e7d
leaq 0x649e(%rip), %rdi      # 0x92fe
movb $0x0, %al
callq 0x2030
movq -0x8(%rbp), %rax
movl 0x4(%rax), %edi
movl $0x1, %esi
callq 0x3050
jmp 0x2f36
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x1c, %eax
jl 0x2eb1
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x1f, %eax
jg 0x2eb1
movq -0x8(%rbp), %rax
movl 0x4(%rax), %esi
leaq 0x6465(%rip), %rdi      # 0x930a
movb $0x0, %al
callq 0x2030
jmp 0x2f34
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x12, %eax
jne 0x2eea
movq -0x8(%rbp), %rax
movl 0x4(%rax), %ecx
leaq 0x6460(%rip), %rsi      # 0x932c
leaq 0x6454(%rip), %rax      # 0x9327
cmpl $0x0, %ecx
cmovneq %rax, %rsi
leaq 0x6438(%rip), %rdi      # 0x9319
movb $0x0, %al
callq 0x2030
jmp 0x2f32
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x10, %eax
jl 0x2f22
movq -0x8(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x1f, %eax
jg 0x2f22
movq -0x8(%rbp), %rax
movl 0x4(%rax), %esi
movq -0x8(%rbp), %rax
movl 0x4(%rax), %edx
leaq 0x6419(%rip), %rdi      # 0x9332
movb $0x0, %al
callq 0x2030
jmp 0x2f30
leaq 0x6419(%rip), %rdi      # 0x9342
movb $0x0, %al
callq 0x2030
jmp 0x2f32
jmp 0x2f34
jmp 0x2f36
jmp 0x2f38
jmp 0x2f3a
jmp 0x2f3c
jmp 0x2f3e
jmp 0x2f40
jmp 0x2f42
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax,%rax)