// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/misc.c
// Function: de_run_pcrfont
static void de_run_pcrfont(deark *c, de_module_params *mparams)
{
	u8 hdr[11];
	struct vgafont_ctx *d = NULL;

	d = de_malloc(c, sizeof(struct vgafont_ctx));

	de_read(hdr, 0, 11);
	// I assume either hdr[7] or hdr[10] is the high byte of the font data size,
	// but I don't know which.
	if(hdr[6]!=0x1 || hdr[7]!=hdr[10] || hdr[8]!=0 || hdr[9]!=0) {
		d->need_errmsg = 1;
		goto done;
	}
	d->height = (i64)hdr[7];
	de_dbg(c, "char size: 8"DE_CHAR_TIMES"%d", (int)d->height);

	d->font_data_pos = 11;
	d->font_data_size = d->height*256;
	if(d->height<VGAFONT_MINH || d->height>VGAFONT_MAXH ||
		(d->font_data_pos + d->font_data_size > c->infile->len))
	{
		d->need_errmsg = 1;
		goto done;
	}

	d->fontdata = de_malloc(c, d->font_data_size);
	dbuf_read(c->infile, d->fontdata, d->font_data_pos, d->font_data_size);

	vgafont_common_config1(c, d);
	vgafont_common_config2(c, d);
	vgafont_main(c, d, NULL, 0);

done:
	if(d) {
		if(d->need_errmsg) {
			de_err(c, "Unsupported type of PCR font");
		}
		destroy_vgafont_ctx(c, d);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x8(%rbp), %rdi
movl $0x38, %esi
callq 0x15b780
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
leaq -0x1b(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
movl $0xb, %ecx
callq 0x164d10
movzbl -0x15(%rbp), %eax
cmpl $0x1, %eax
jne 0x92afb
movzbl -0x14(%rbp), %eax
movzbl -0x11(%rbp), %ecx
cmpl %ecx, %eax
jne 0x92afb
movzbl -0x13(%rbp), %eax
cmpl $0x0, %eax
jne 0x92afb
movzbl -0x12(%rbp), %eax
cmpl $0x0, %eax
je 0x92b08
movq -0x28(%rbp), %rax
movb $0x1, 0x30(%rax)
jmp 0x92bfe
movzbl -0x14(%rbp), %eax
movl %eax, %ecx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movl %eax, %edx
leaq 0x11d68e(%rip), %rsi    # 0x1b01b9
movb $0x0, %al
callq 0x15b0d0
movq -0x28(%rbp), %rax
movq $0xb, 0x18(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rcx
shlq $0x8, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
cmpq $0x3, 0x10(%rax)
jl 0x92b86
movq -0x28(%rbp), %rax
cmpq $0x14, 0x10(%rax)
jg 0x92b86
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x28(%rbp), %rcx
addq 0x20(%rcx), %rax
movq -0x8(%rbp), %rcx
movq 0x18(%rcx), %rcx
cmpq 0x18(%rcx), %rax
jle 0x92b90
movq -0x28(%rbp), %rax
movb $0x1, 0x30(%rax)
jmp 0x92bfe
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0x15b780
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rsi
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdx
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
callq 0x164d10
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x948b0
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x949b0
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
xorl %ecx, %ecx
callq 0x94af0
cmpq $0x0, -0x28(%rbp)
je 0x92c2e
movq -0x28(%rbp), %rax
cmpb $0x0, 0x30(%rax)
je 0x92c21
movq -0x8(%rbp), %rdi
leaq 0x11d5e1(%rip), %rsi    # 0x1b01fb
movb $0x0, %al
callq 0x15bfb0
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x94b30
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)