// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/psd.c
// Function: do_descriptor_item_ostype_and_data
static int do_descriptor_item_ostype_and_data(deark *c, lctx *d,
	const struct flexible_id *key_flid, zztype *zz, i64 itempos)
{
	int ret;
	int retval = 0;
	struct de_fourcc type4cc;
	zztype czz;

	psd_read_fourcc_zz(c, d, zz, &type4cc);
	de_dbg(c, "item OSType: '%s'", type4cc.id_dbgstr);

	zz_init(&czz, zz);

	switch(type4cc.id) {
	case CODE_bool:
		do_item_type_bool(c, d, &czz);
		zz->pos += zz_used(&czz);
		break;
	case CODE_long:
		do_item_type_long(c, d, &czz);
		zz->pos += zz_used(&czz);
		break;
	case CODE_doub:
		do_item_type_doub(c, d, &czz);
		zz->pos += zz_used(&czz);
		break;
	case CODE_comp:
		// TODO
		zz->pos += 8;
		break;
	case CODE_UntF:
		do_item_type_UntF(c, d, &czz);
		zz->pos += zz_used(&czz);
		break;
	case CODE_UnFl:
		do_item_type_UnFl(c, d, &czz);
		zz->pos += zz_used(&czz);
		break;
	case CODE_TEXT:
		do_item_type_TEXT(c, d, &czz);
		zz->pos += zz_used(&czz);
		break;
	case CODE_enum:
		do_item_type_enum(c, d, &czz);
		zz->pos += zz_used(&czz);
		break;
	case CODE_VlLs:
		ret = do_item_type_VlLs(c, d, key_flid, &czz, itempos);
		zz->pos += zz_used(&czz);
		if(!ret) goto done;
		break;
	case CODE_Objc:
	case CODE_GlbO:
		ret = do_item_type_descriptor(c, d, &czz, 0);
		zz->pos += zz_used(&czz);
		if(!ret) goto done;
		break;
	case CODE_ObAr:
		// Undocumented type. Appears to contain a versioned descriptor.
		ret = do_item_type_descriptor(c, d, zz, 1);
		zz->pos += zz_used(&czz);
		if(!ret) goto done;
		break;
	case CODE_obj:
		ret = do_item_type_obj(c, d, &czz);
		zz->pos += zz_used(&czz);
		if(!ret) goto done;
		break;
	case CODE_tdta:
		ret = do_item_type_tdta(c, d, key_flid, &czz);
		zz->pos += zz_used(&czz);
		if(!ret) goto done;
		break;
	case CODE_type:
	case CODE_GlbC:
		ret = do_item_type_class(c, d, &czz);
		zz->pos += zz_used(&czz);
		if(!ret) goto done;
		break;
	case CODE_alis:
		ret = do_item_type_alis(c, d, &czz);
		zz->pos += zz_used(&czz);
		if(!ret) goto done;
		break;
		// TODO: 'Pth ' (undocumented type)
	default:
		goto done;
	}

	retval = 1;
done:
	return retval;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movl $0x0, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
leaq -0x60(%rbp), %rcx
callq 0xf3d80
movq -0x8(%rbp), %rdi
leaq -0x50(%rbp), %rdx
leaq 0xc91ec(%rip), %rsi     # 0x1bf526
xorl %eax, %eax
callq 0x15b0d0
movq -0x20(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0xf3580
movl -0x5c(%rbp), %eax
movl %eax, -0x7c(%rbp)
subl $0x476c6243, %eax       # imm = 0x476C6243
je 0xf66d2
jmp 0xf6361
movl -0x7c(%rbp), %eax
subl $0x476c624f, %eax       # imm = 0x476C624F
je 0xf65e5
jmp 0xf6371
movl -0x7c(%rbp), %eax
subl $0x4f624172, %eax       # imm = 0x4F624172
je 0xf6621
jmp 0xf6381
movl -0x7c(%rbp), %eax
subl $0x4f626a63, %eax       # imm = 0x4F626A63
je 0xf65e5
jmp 0xf6391
movl -0x7c(%rbp), %eax
subl $0x54455854, %eax       # imm = 0x54455854
je 0xf654b
jmp 0xf63a1
movl -0x7c(%rbp), %eax
subl $0x556e466c, %eax       # imm = 0x556E466C
je 0xf651f
jmp 0xf63b1
movl -0x7c(%rbp), %eax
subl $0x556e7446, %eax       # imm = 0x556E7446
je 0xf64f3
jmp 0xf63c1
movl -0x7c(%rbp), %eax
subl $0x566c4c73, %eax       # imm = 0x566C4C73
je 0xf65a3
jmp 0xf63d1
movl -0x7c(%rbp), %eax
subl $0x616c6973, %eax       # imm = 0x616C6973
je 0xf6706
jmp 0xf63e1
movl -0x7c(%rbp), %eax
subl $0x626f6f6c, %eax       # imm = 0x626F6F6C
je 0xf645c
jmp 0xf63ed
movl -0x7c(%rbp), %eax
subl $0x636f6d70, %eax       # imm = 0x636F6D70
je 0xf64e0
jmp 0xf63fd
movl -0x7c(%rbp), %eax
subl $0x646f7562, %eax       # imm = 0x646F7562
je 0xf64b4
jmp 0xf640d
movl -0x7c(%rbp), %eax
subl $0x656e756d, %eax       # imm = 0x656E756D
je 0xf6577
jmp 0xf641d
movl -0x7c(%rbp), %eax
subl $0x6c6f6e67, %eax       # imm = 0x6C6F6E67
je 0xf6488
jmp 0xf6429
movl -0x7c(%rbp), %eax
subl $0x6f626a20, %eax       # imm = 0x6F626A20
je 0xf6660
jmp 0xf6439
movl -0x7c(%rbp), %eax
subl $0x74647461, %eax       # imm = 0x74647461
je 0xf669a
jmp 0xf6449
movl -0x7c(%rbp), %eax
subl $0x74797065, %eax       # imm = 0x74797065
je 0xf66d2
jmp 0xf673a
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf6750
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf67a0
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf67f0
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
jmp 0xf673c
movq -0x20(%rbp), %rax
movq (%rax), %rcx
addq $0x8, %rcx
movq %rcx, (%rax)
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf6850
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf68e0
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf6970
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf69f0
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x28(%rbp), %r8
leaq -0x78(%rbp), %rcx
callq 0xf6a80
movl %eax, -0x2c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
cmpl $0x0, -0x2c(%rbp)
jne 0xf65e0
jmp 0xf6743
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
xorl %ecx, %ecx
callq 0xf6c00
movl %eax, -0x2c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
cmpl $0x0, -0x2c(%rbp)
jne 0xf661c
jmp 0xf6743
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movl $0x1, %ecx
callq 0xf6c00
movl %eax, -0x2c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
cmpl $0x0, -0x2c(%rbp)
jne 0xf665b
jmp 0xf6743
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf6c70
movl %eax, -0x2c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
cmpl $0x0, -0x2c(%rbp)
jne 0xf6695
jmp 0xf6743
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
leaq -0x78(%rbp), %rcx
callq 0xf6f40
movl %eax, -0x2c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
cmpl $0x0, -0x2c(%rbp)
jne 0xf66d0
jmp 0xf6743
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf7010
movl %eax, -0x2c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
cmpl $0x0, -0x2c(%rbp)
jne 0xf6704
jmp 0xf6743
jmp 0xf673c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0xf70d0
movl %eax, -0x2c(%rbp)
leaq -0x78(%rbp), %rdi
callq 0xf3820
movq %rax, %rcx
movq -0x20(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
cmpl $0x0, -0x2c(%rbp)
jne 0xf6738
jmp 0xf6743
jmp 0xf673c
jmp 0xf6743
movl $0x1, -0x30(%rbp)
movl -0x30(%rbp), %eax
addq $0x80, %rsp
popq %rbp
retq
nop