// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/src/fmtutil.c
// Function: fmtutil_char_simple_run
void fmtutil_char_simple_run(deark *c, struct fmtutil_char_simplectx *csctx,
	struct de_char_context *charctx)
{
	i64 i, j;
	i64 inf_endpos;
	i64 fg_stride;
	i64 attr_offset;
	u8 ccode, acode;
	u8 fgcol, bgcol;
	struct de_char_screen *screen;
	de_encoding encoding;
	struct de_encconv_state es;

	inf_endpos = csctx->inf_pos + csctx->inf_len;
	if(csctx->use_default_pal) {
		de_copy_std_palette(DE_PALID_PC16, 0, 0, charctx->pal, 16, 0);
	}
	charctx->nscreens = 1;
	charctx->screens = de_mallocarray(c, charctx->nscreens, sizeof(struct de_char_screen*));
	charctx->screens[0] = de_malloc(c, sizeof(struct de_char_screen));
	screen = charctx->screens[0];
	screen->width = csctx->width_in_chars;
	screen->height = csctx->height_in_chars;
	screen->cell_rows = de_mallocarray(c, csctx->height_in_chars, sizeof(struct de_char_cell*));

	if(csctx->input_encoding==DE_ENCODING_UNKNOWN) {
		encoding = DE_ENCODING_CP437;
	}
	else {
		encoding = csctx->input_encoding;
	}
	de_encconv_init(&es, DE_EXTENC_MAKE(encoding, DE_ENCSUBTYPE_PRINTABLE));

	if(csctx->fg_stride) {
		fg_stride = csctx->fg_stride;
		attr_offset = csctx->attr_offset;
	}
	else {
		fg_stride = 2;
		attr_offset = 1;
	}

	for(j=0; j<csctx->height_in_chars; j++) {
		screen->cell_rows[j] = de_mallocarray(c, csctx->width_in_chars, sizeof(struct de_char_cell));

		for(i=0; i<csctx->width_in_chars; i++) {
			i64 pos;

			pos = csctx->inf_pos + j*csctx->width_in_chars*fg_stride + i*fg_stride;
			if(pos < inf_endpos)
				ccode = dbuf_getbyte(csctx->inf, pos);
			else
				ccode = 0;
			if(pos < inf_endpos)
				acode = dbuf_getbyte(csctx->inf, pos+attr_offset);
			else
				acode = 0;

			if((acode&0x80) && !csctx->nonblink) {
				screen->cell_rows[j][i].blink = 1;
				acode -= 0x80;
			}

			fgcol = (acode & 0x0f);
			bgcol = (acode & 0xf0) >> 4;

			screen->cell_rows[j][i].fgcol = (u32)fgcol;
			screen->cell_rows[j][i].bgcol = (u32)bgcol;
			screen->cell_rows[j][i].codepoint = (i32)ccode;
			screen->cell_rows[j][i].codepoint_unicode = de_char_to_unicode_ex((i32)ccode, &es);
		}
	}

	de_char_output_to_file(c, charctx);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x10(%rbp), %rcx
addq 0x10(%rcx), %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
cmpb $0x0, 0x1c(%rax)
je 0x176667
movq -0x18(%rbp), %rcx
addq $0x20, %rcx
movl $0x14, %edi
xorl %r9d, %r9d
xorl %eax, %eax
movl %eax, %edx
movl $0x10, %r8d
movl %r9d, %esi
callq 0x161320
movq -0x18(%rbp), %rax
movq $0x1, 0x10(%rax)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
movl $0x8, %edx
callq 0x15c450
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x8(%rbp), %rdi
movl $0x18, %esi
callq 0x15b780
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x50(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x50(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rsi
movl $0x8, %edx
callq 0x15c450
movq %rax, %rcx
movq -0x50(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x18(%rax)
jne 0x176712
movl $0xd, -0x54(%rbp)
jmp 0x17671c
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %esi
andl $0xff, %esi
orl $0x400, %esi            # imm = 0x400
leaq -0x78(%rbp), %rdi
callq 0x160150
movq -0x10(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x176759
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0x176769
movq $0x2, -0x38(%rbp)
movq $0x1, -0x40(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jge 0x176940
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rsi
movl $0x14, %edx
callq 0x15c450
movq %rax, %rdx
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jge 0x17692d
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rdx
imulq 0x20(%rdx), %rcx
imulq -0x38(%rbp), %rcx
addq %rcx, %rax
movq -0x20(%rbp), %rcx
imulq -0x38(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
cmpq -0x30(%rbp), %rax
jge 0x176812
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x80(%rbp), %rsi
callq 0x165060
movb %al, -0x41(%rbp)
jmp 0x176816
movb $0x0, -0x41(%rbp)
movq -0x80(%rbp), %rax
cmpq -0x30(%rbp), %rax
jge 0x176839
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x80(%rbp), %rsi
addq -0x40(%rbp), %rsi
callq 0x165060
movb %al, -0x42(%rbp)
jmp 0x17683d
movb $0x0, -0x42(%rbp)
movzbl -0x42(%rbp), %eax
andl $0x80, %eax
cmpl $0x0, %eax
je 0x17687d
movq -0x10(%rbp), %rax
cmpb $0x0, 0x1d(%rax)
jne 0x17687d
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rax
imulq $0x14, -0x20(%rbp), %rcx
addq %rcx, %rax
movb $0x1, 0x12(%rax)
movzbl -0x42(%rbp), %eax
subl $0x80, %eax
movb %al, -0x42(%rbp)
movzbl -0x42(%rbp), %eax
andl $0xf, %eax
movb %al, -0x43(%rbp)
movzbl -0x42(%rbp), %eax
andl $0xf0, %eax
sarl $0x4, %eax
movb %al, -0x44(%rbp)
movzbl -0x43(%rbp), %ecx
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rdx
movq (%rax,%rdx,8), %rax
imulq $0x14, -0x20(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0x8(%rax)
movzbl -0x44(%rbp), %ecx
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rdx
movq (%rax,%rdx,8), %rax
imulq $0x14, -0x20(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0xc(%rax)
movzbl -0x41(%rbp), %ecx
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rdx
movq (%rax,%rdx,8), %rax
imulq $0x14, -0x20(%rbp), %rdx
addq %rdx, %rax
movl %ecx, (%rax)
movzbl -0x41(%rbp), %edi
leaq -0x78(%rbp), %rsi
callq 0x160a30
movl %eax, %ecx
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rdx
movq (%rax,%rdx,8), %rax
imulq $0x14, -0x20(%rbp), %rdx
addq %rdx, %rax
movl %ecx, 0x4(%rax)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x1767b4
jmp 0x17692f
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x176771
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x16da40
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)