// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/ansiart.c
// Function: do_normal_char
static void do_normal_char(deark *c, lctx *d, i64 pos, u8 ch)
{
	struct de_char_cell *cell;
	i32 u;

	// TODO: A few more characters, such as tabs, should be treated as
	// control characters.
	if(ch==10 || ch==13 ||
		(d->vt100_mode && ch<32))
	{
		do_ctrl_char(c, d, ch);
		return;
	}

	u = ansi_char_to_unicode(c, d, ch);

	cell = get_cell_at(c, d->screen, d->xpos, d->ypos);
	if(cell) {
		cell->codepoint = (i32)ch;
		cell->codepoint_unicode = u;
		cell->fgcol = d->curr_fgcol;
		cell->bgcol = d->curr_bgcol;
		if(d->curr_bold && DE_IS_PAL_COLOR(cell->fgcol)) {
			cell->fgcol |= 0x08;
		}
		cell->underline = d->curr_underline;
		cell->strikethru = d->curr_strikethru;

		cell->size_flags = 0;

		if(d->disable_blink_attr || d->sauce_disable_blink || d->opt_disable_blink) {
			// "blink" in this mode means intense-background, instead of blink.
			if(d->curr_blink && DE_IS_PAL_COLOR(cell->bgcol))
				cell->bgcol |= 0x08;
			cell->blink = 0;
		}
		else {
			cell->blink = d->curr_blink;
		}

		if(d->curr_negative) {
			u32 tmpcolor;
			tmpcolor = cell->fgcol;
			cell->fgcol = cell->bgcol;
			cell->bgcol = tmpcolor;
		}
		if(d->curr_conceal) {
			cell->fgcol = cell->bgcol;
			cell->blink = 0;
		}

		if(d->ypos >= d->screen->height) d->screen->height = d->ypos+1;
	}
	else {
		if(d->num_warnings<ANSIART_MAX_WARNINGS) {
			de_warn(c, "Off-screen write (%d,%d) at %"I64_FMT,
				(int)(d->xpos+1), (int)(d->ypos+1), pos);
			d->num_warnings++;
		}
	}

	d->xpos++;

	// Line wrap
	while(d->xpos >= d->screen->width && !d->vt100_mode) {
		d->xpos -= d->screen->width;
		d->ypos++;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movb %cl, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movb %al, -0x19(%rbp)
movzbl -0x19(%rbp), %eax
cmpl $0xa, %eax
je 0x20581
movzbl -0x19(%rbp), %eax
cmpl $0xd, %eax
je 0x20581
movq -0x10(%rbp), %rax
movzbl 0x72(%rax), %eax
cmpl $0x0, %eax
je 0x20597
movzbl -0x19(%rbp), %eax
cmpl $0x20, %eax
jge 0x20597
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movzbl -0x19(%rbp), %edx
callq 0x20ee0
jmp 0x207ed
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movzbl -0x19(%rbp), %edx
callq 0x20f60
movl %eax, -0x2c(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
callq 0x21010
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x2072f
movzbl -0x19(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, (%rax)
movl -0x2c(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x10(%rbp), %rax
movl 0x48(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x10(%rbp), %rax
movl 0x4c(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x10(%rbp), %rax
movzbl 0x50(%rax), %eax
cmpl $0x0, %eax
je 0x2062f
movq -0x28(%rbp), %rax
cmpl $0xf, 0x8(%rax)
ja 0x2062f
movq -0x28(%rbp), %rax
movl 0x8(%rax), %ecx
orl $0x8, %ecx
movl %ecx, 0x8(%rax)
movq -0x10(%rbp), %rax
movb 0x51(%rax), %cl
movq -0x28(%rbp), %rax
movb %cl, 0x10(%rax)
movq -0x10(%rbp), %rax
movb 0x55(%rax), %cl
movq -0x28(%rbp), %rax
movb %cl, 0x11(%rax)
movq -0x28(%rbp), %rax
movb $0x0, 0x13(%rax)
movq -0x10(%rbp), %rax
movzbl 0x70(%rax), %eax
cmpl $0x0, %eax
jne 0x20677
movq -0x10(%rbp), %rax
movzbl 0x8(%rax), %eax
cmpl $0x0, %eax
jne 0x20677
movq -0x10(%rbp), %rax
cmpl $0x0, 0x4(%rax)
je 0x206a5
movq -0x10(%rbp), %rax
movzbl 0x52(%rax), %eax
cmpl $0x0, %eax
je 0x2069b
movq -0x28(%rbp), %rax
cmpl $0xf, 0xc(%rax)
ja 0x2069b
movq -0x28(%rbp), %rax
movl 0xc(%rax), %ecx
orl $0x8, %ecx
movl %ecx, 0xc(%rax)
movq -0x28(%rbp), %rax
movb $0x0, 0x12(%rax)
jmp 0x206b3
movq -0x10(%rbp), %rax
movb 0x52(%rax), %cl
movq -0x28(%rbp), %rax
movb %cl, 0x12(%rax)
movq -0x10(%rbp), %rax
cmpb $0x0, 0x53(%rax)
je 0x206df
movq -0x28(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movl 0xc(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x8(%rax)
movl -0x30(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x10(%rbp), %rax
cmpb $0x0, 0x54(%rax)
je 0x206ff
movq -0x28(%rbp), %rax
movl 0xc(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x28(%rbp), %rax
movb $0x0, 0x12(%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x10(%rbp), %rcx
movq 0x10(%rcx), %rcx
cmpq 0x8(%rcx), %rax
jl 0x2072d
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
addq $0x1, %rcx
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x8(%rax)
jmp 0x2077e
movq -0x10(%rbp), %rax
cmpq $0xa, 0x68(%rax)
jge 0x2077c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
addq $0x1, %rax
movl %eax, %edx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
addq $0x1, %rax
movl %eax, %ecx
movq -0x18(%rbp), %r8
leaq 0x17d555(%rip), %rsi    # 0x19dcba
movb $0x0, %al
callq 0x15bc10
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x68(%rax)
jmp 0x2077e
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdx
xorl %eax, %eax
cmpq (%rdx), %rcx
movb %al, -0x31(%rbp)
jl 0x207b8
movq -0x10(%rbp), %rax
cmpb $0x0, 0x72(%rax)
setne %al
xorb $-0x1, %al
movb %al, -0x31(%rbp)
movb -0x31(%rbp), %al
testb $0x1, %al
jne 0x207c1
jmp 0x207ed
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq (%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rcx
subq %rdx, %rcx
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x30(%rax)
jmp 0x2078e
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)