// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/pif.c
// Function: do_pif_section
static int do_pif_section(deark *c, struct pif_ctx *d, i64 pos1)
{
	int saved_indent_level;
	int retval = 0;
	i64 pos = pos1;
	i64 dpos;
	i64 dlen;
	struct de_stringreaderdata *secname = NULL;

	de_dbg_indent_save(c, &saved_indent_level);
	de_dbg(c, "section at %"I64_FMT, pos1);
	de_dbg_indent(c, 1);

	secname = dbuf_read_string(c->infile, pos,
		16, 16, DE_CONVFLAG_STOP_AT_NUL, d->input_encoding_ansi);
	de_dbg(c, "name: \"%s\"", ucstring_getpsz_d(secname->str));
	pos += 16;

	d->next_section_heading_pos = de_getu16le_p(&pos);
	de_dbg(c, "next section pos: %"I64_FMT, d->next_section_heading_pos);
	dpos = de_getu16le_p(&pos);
	de_dbg(c, "data pos: %"I64_FMT, dpos);
	dlen = de_getu16le_p(&pos);
	de_dbg(c, "data len: %"I64_FMT, dlen);
	if(d->next_section_heading_pos != PIF_INVALID_HEADING_POS) {
		retval = 1;
	}

	if(dlen != 0) {
		if(!pif_validate_pos(c, d, dpos)) goto done;
	}

	de_dbg(c, "section data at %"I64_FMT", len=%"I64_FMT, dpos, dlen);
	de_dbg_indent(c, 1);
	if(!de_strcmp(secname->sz, "MICROSOFT PIFEX")) {
		do_pif_section_basic(c, d, dpos, dlen);
	}
	else if(!de_strcmp(secname->sz, "WINDOWS 286 3.0")) {
		do_pif_section_win286(c, d, dpos, dlen);
	}
	else if(!de_strcmp(secname->sz, "WINDOWS 386 3.0")) {
		do_pif_section_win386(c, d, dpos, dlen);
	}
	else if(!de_strcmp(secname->sz, "WINDOWS VMM 4.0")) {
		do_pif_section_winvmm(c, d, dpos, dlen);
	}
	else if(!de_strcmp(secname->sz, "WINDOWS NT  3.1")) {
		do_pif_section_winnt31(c, d, pos, dlen);
	}
	else if(!de_strcmp(secname->sz, "AUTOEXECBAT 4.0")) {
		do_pif_section_extract(c, d, dpos, dlen, "autoexec.bat");
	}
	else if(!de_strcmp(secname->sz, "CONFIG  SYS 4.0")) {
		do_pif_section_extract(c, d, dpos, dlen, "config.sys");
	}
	else {
		do_pif_section_default(c, d, dpos, dlen);
	}
	// TODO:
	//  WINDOWS NT  4.0
	//  WINDOWS PIF.402
	//  WINDOWS PIF.403
	//  WINDOWS ICO.001

done:
	de_destroy_stringreaderdata(c, secname);
	de_dbg_indent_restore(c, saved_indent_level);
	return retval;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl $0x0, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x28(%rbp)
movq $0x0, -0x40(%rbp)
movq -0x8(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
callq 0x15b580
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rdx
leaq 0x8fdc7(%rip), %rsi     # 0x1a7e2e
movb $0x0, %al
callq 0x15b0d0
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0x15b560
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x28(%rbp), %rsi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %r9d
movl $0x10, %ecx
movl $0x1, %r8d
movq %rcx, %rdx
callq 0x1664c0
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x172650
movq -0x48(%rbp), %rdi
movq %rax, %rdx
leaq 0x96106(%rip), %rsi     # 0x1ae1d0
movb $0x0, %al
callq 0x15b0d0
movq -0x28(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
leaq -0x28(%rbp), %rsi
callq 0x1652c0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdx
leaq 0xaca26(%rip), %rsi     # 0x1c4b32
movb $0x0, %al
callq 0x15b0d0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
leaq -0x28(%rbp), %rsi
callq 0x1652c0
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rdx
leaq 0x9973b(%rip), %rsi     # 0x1b1872
movb $0x0, %al
callq 0x15b0d0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
leaq -0x28(%rbp), %rsi
callq 0x1652c0
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rdx
leaq 0xa64ad(%rip), %rsi     # 0x1be60f
movb $0x0, %al
callq 0x15b0d0
movq -0x10(%rbp), %rax
cmpq $0xffff, 0x10(%rax)     # imm = 0xFFFF
je 0x11817e
movl $0x1, -0x20(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x1181a2
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x117fc0
cmpl $0x0, %eax
jne 0x1181a0
jmp 0x11835a
jmp 0x1181a2
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
leaq 0xac993(%rip), %rsi     # 0x1c4b48
movb $0x0, %al
callq 0x15b0d0
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0x15b560
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xac98c(%rip), %rsi     # 0x1c4b65
callq 0x191a0
cmpl $0x0, %eax
jne 0x1181fd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
callq 0x117b60
jmp 0x118358
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xac969(%rip), %rsi     # 0x1c4b75
callq 0x191a0
cmpl $0x0, %eax
jne 0x118230
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
callq 0x118380
jmp 0x118356
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xac946(%rip), %rsi     # 0x1c4b85
callq 0x191a0
cmpl $0x0, %eax
jne 0x118263
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
callq 0x118430
jmp 0x118354
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xac923(%rip), %rsi     # 0x1c4b95
callq 0x191a0
cmpl $0x0, %eax
jne 0x118296
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
callq 0x118650
jmp 0x118352
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xac900(%rip), %rsi     # 0x1c4ba5
callq 0x191a0
cmpl $0x0, %eax
jne 0x1182c9
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x38(%rbp), %rcx
callq 0x118880
jmp 0x118350
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xac8dd(%rip), %rsi     # 0x1c4bb5
callq 0x191a0
cmpl $0x0, %eax
jne 0x118300
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
leaq 0xac8cc(%rip), %r8      # 0x1c4bc5
callq 0x1189a0
jmp 0x11834e
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xac8c3(%rip), %rsi     # 0x1c4bd2
callq 0x191a0
cmpl $0x0, %eax
jne 0x118337
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
leaq 0xac8b2(%rip), %r8      # 0x1c4be2
callq 0x1189a0
jmp 0x11834c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
callq 0x1189f0
jmp 0x11834e
jmp 0x118350
jmp 0x118352
jmp 0x118354
jmp 0x118356
jmp 0x118358
jmp 0x11835a
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x166830
movq -0x8(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0x15b5a0
movl -0x20(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax)