// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/os2pack.c
// Function: do_run_os2pack12
static void do_run_os2pack12(deark *c, de_module_params *mparams, UI ver)
{
	de_arch_lctx *d = NULL;
	struct de_arch_member_data *md = NULL;
	i64 pos;
	const char *pname = "PACK";

	d = de_arch_create_lctx(c);
	d->is_le = 1;

	if(ver==2) {
		d->fmtcode = 0xfffd;
	}
	else {
		d->fmtcode = (UI)de_getu16le(2);
		if(d->fmtcode!=0x1400 && d->fmtcode!=0x0a14 && d->fmtcode!=0xffff &&
			d->fmtcode!=0xfffe)
		{
			d->need_errmsg = 1;
			goto done;
		}
	}

	if(d->fmtcode==0xfffd) {
		pname = "PACK2";
		de_declare_fmt(c, "OS/2 PACK2 archive");
	}
	else {
		de_declare_fmtf(c, "OS/2 PACK archive (type 0x%04x)", d->fmtcode);
	}

	// TODO: What encoding to use?
	d->input_encoding = de_get_input_encoding(c, NULL, DE_ENCODING_WINDOWS1252);

	pos = 0;

	while(1) {
		if(pos+OS2PACK_MINHEADERLEN > c->infile->len) {
			d->need_errmsg = 1;
			goto done;
		}

		if(!os2pack12_is_member_at(d, pos)) {
			d->need_errmsg = 1;
			goto done;
		}

		if(md) {
			de_arch_destroy_md(c, md);
			md = NULL;
		}
		md = de_arch_create_md(c, d);
		md->member_hdr_pos = pos;

		do_os2pack12_member(c, d, md);

		if(d->fatalerrflag) goto done;
		if(!md->next_member_exists) goto done;
		if(md->next_member_pos <= pos) {
			d->need_errmsg = 1;
			goto done;
		}
		pos = md->next_member_pos;
	}

done:
	if(md) {
		de_arch_destroy_md(c, md);
		md = NULL;
	}
	if(d) {
		if(d->need_errmsg) {
			de_err(c, "Bad or unsupported OS/2 %s archive", pname);
		}
		de_arch_destroy_lctx(c, d);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq $0x0, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
leaq 0xee77a(%rip), %rax     # 0x1d7aa4
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
callq 0x17c220
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movl $0x1, 0x10(%rax)
cmpl $0x2, -0x14(%rbp)
jne 0xe9359
movq -0x20(%rbp), %rax
movl $0xfffd, 0x54(%rax)     # imm = 0xFFFD
jmp 0xe93b7
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movl $0x2, %esi
callq 0x165280
movl %eax, %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x54(%rax)
movq -0x20(%rbp), %rax
cmpl $0x1400, 0x54(%rax)     # imm = 0x1400
je 0xe93b5
movq -0x20(%rbp), %rax
cmpl $0xa14, 0x54(%rax)      # imm = 0xA14
je 0xe93b5
movq -0x20(%rbp), %rax
cmpl $0xffff, 0x54(%rax)     # imm = 0xFFFF
je 0xe93b5
movq -0x20(%rbp), %rax
cmpl $0xfffe, 0x54(%rax)     # imm = 0xFFFE
je 0xe93b5
movq -0x20(%rbp), %rax
movb $0x1, 0x14(%rax)
jmp 0xe94f3
jmp 0xe93b7
movq -0x20(%rbp), %rax
cmpl $0xfffd, 0x54(%rax)     # imm = 0xFFFD
jne 0xe93e1
leaq 0xd4423(%rip), %rax     # 0x1bd7ee
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
leaq 0xd4401(%rip), %rsi     # 0x1bd7db
callq 0x15e380
jmp 0xe93fa
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x54(%rax), %edx
leaq 0xd4401(%rip), %rsi     # 0x1bd7f4
movb $0x0, %al
callq 0x15e3d0
movq -0x8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x9, %edx
callq 0x15e4a0
movl %eax, %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x18(%rax)
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
addq $0xa, %rax
movq -0x8(%rbp), %rcx
movq 0x18(%rcx), %rcx
cmpq 0x18(%rcx), %rax
jle 0xe9440
movq -0x20(%rbp), %rax
movb $0x1, 0x14(%rax)
jmp 0xe94f3
movq -0x20(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0xe9550
cmpl $0x0, %eax
jne 0xe945f
movq -0x20(%rbp), %rax
movb $0x1, 0x14(%rax)
jmp 0xe94f3
cmpq $0x0, -0x28(%rbp)
je 0xe947b
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x17c1a0
movq $0x0, -0x28(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x17c120
movq %rax, -0x28(%rbp)
movq -0x30(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0xe95a0
movq -0x20(%rbp), %rax
cmpl $0x0, 0x38(%rax)
je 0xe94b5
jmp 0xe94f3
movq -0x28(%rbp), %rax
cmpb $0x0, 0xa0(%rax)
jne 0xe94c4
jmp 0xe94f3
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
cmpq -0x30(%rbp), %rax
jg 0xe94df
movq -0x20(%rbp), %rax
movb $0x1, 0x14(%rax)
jmp 0xe94f3
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xe941d
cmpq $0x0, -0x28(%rbp)
je 0xe950f
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x17c1a0
movq $0x0, -0x28(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0xe9543
movq -0x20(%rbp), %rax
cmpb $0x0, 0x14(%rax)
je 0xe9536
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rdx
leaq 0xd42e5(%rip), %rsi     # 0x1bd814
movb $0x0, %al
callq 0x15bfb0
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x17c270
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)