// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/psf.c
// Function: de_run_psf
static void de_run_psf(deark *c, de_module_params *mparams)
{
	lctx *d = NULL;
	u8 b;
	const char *s;

	d = de_malloc(c, sizeof(lctx));

	s = de_get_ext_option(c, "font:noaliases");
	if(s)
		d->read_extra_codepoints = 0;
	else
		d->read_extra_codepoints = 1;

	b = de_getbyte(0);
	if(b==0x36) {
		d->version=1;
	}
	else if(b==0x72) {
		d->version=2;
	}
	else {
		de_err(c, "Not a PSF file");
		goto done;
	}

	de_dbg(c, "PSF version: %d", (int)d->version);

	if(d->version==2)
		do_psf2_header(c, d);
	else
		do_psf1_header(c, d);

	d->font_data_size = d->bytes_per_glyph * d->num_glyphs;
	if(d->has_unicode_table) {
		d->unicode_table_pos = d->headersize + d->font_data_size;
		if(d->unicode_table_pos >= c->infile->len) {
			d->has_unicode_table = 0;
		}
	}

	if((d->headersize+d->font_data_size > c->infile->len) ||
		d->bytes_per_glyph<1 ||
		d->glyph_width<1 || d->glyph_width>256 ||
		d->glyph_height<1 || d->glyph_height>256 ||
		d->num_glyphs<1 || d->num_glyphs>2000000)
	{
		de_err(c, "Invalid or unsupported PSF file");
		goto done;
	}

	do_glyphs(c, d);

done:
	de_free(c, d);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
movq -0x8(%rbp), %rdi
movl $0x70, %esi
callq 0x15b780
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rdi
leaq 0xababe(%rip), %rsi     # 0x1c4ec3
callq 0x15cb30
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x119422
movq -0x18(%rbp), %rax
movl $0x0, 0x50(%rax)
jmp 0x11942d
movq -0x18(%rbp), %rax
movl $0x1, 0x50(%rax)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x165060
movb %al, -0x19(%rbp)
movzbl -0x19(%rbp), %eax
cmpl $0x36, %eax
jne 0x119456
movq -0x18(%rbp), %rax
movl $0x1, (%rax)
jmp 0x119484
movzbl -0x19(%rbp), %eax
cmpl $0x72, %eax
jne 0x11946b
movq -0x18(%rbp), %rax
movl $0x2, (%rax)
jmp 0x119482
movq -0x8(%rbp), %rdi
leaq 0xaba5c(%rip), %rsi     # 0x1c4ed2
movb $0x0, %al
callq 0x15bfb0
jmp 0x1195b4
jmp 0x119484
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movl (%rax), %edx
leaq 0xaba4c(%rip), %rsi     # 0x1c4ee1
movb $0x0, %al
callq 0x15b0d0
movq -0x18(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x1194b4
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x119680
jmp 0x1194c1
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x1198f0
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x18(%rbp), %rax
imulq 0x18(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x18(%rbp), %rax
cmpl $0x0, 0x40(%rax)
je 0x11951f
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x18(%rbp), %rax
addq 0x38(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x18(%rcx), %rcx
cmpq 0x18(%rcx), %rax
jl 0x11951d
movq -0x18(%rbp), %rax
movl $0x0, 0x40(%rax)
jmp 0x11951f
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rcx
addq 0x38(%rcx), %rax
movq -0x8(%rbp), %rcx
movq 0x18(%rcx), %rcx
cmpq 0x18(%rcx), %rax
jg 0x119593
movq -0x18(%rbp), %rax
cmpq $0x1, 0x30(%rax)
jl 0x119593
movq -0x18(%rbp), %rax
cmpq $0x1, 0x20(%rax)
jl 0x119593
movq -0x18(%rbp), %rax
cmpq $0x100, 0x20(%rax)      # imm = 0x100
jg 0x119593
movq -0x18(%rbp), %rax
cmpq $0x1, 0x28(%rax)
jl 0x119593
movq -0x18(%rbp), %rax
cmpq $0x100, 0x28(%rax)      # imm = 0x100
jg 0x119593
movq -0x18(%rbp), %rax
cmpq $0x1, 0x18(%rax)
jl 0x119593
movq -0x18(%rbp), %rax
cmpq $0x1e8480, 0x18(%rax)   # imm = 0x1E8480
jle 0x1195a7
movq -0x8(%rbp), %rdi
leaq 0xab953(%rip), %rsi     # 0x1c4ef1
movb $0x0, %al
callq 0x15bfb0
jmp 0x1195b4
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x119a90
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x15b820
addq $0x30, %rsp
popq %rbp
retq
nopw (%rax,%rax)