// File: /workspace/github_c_makefile_star2_O0/bobrippling[P]tim/keys.c
// Function: k_inc_dec
void k_inc_dec(const keyarg_u *a, unsigned repeat, const int from_ch)
{
	window *win = windows_cur();
	list_t *line = window_current_line(win, false);

	if(!line)
		return;
	if((unsigned)win->ui_pos->x >= line->len_line)
		return;

	size_t pos = win->ui_pos->x;
	for(; pos < line->len_line; pos++)
		if(isdigit_or_minus(line->line[pos]))
			break;
	if(pos == line->len_line)
		return;

	if(pos == (size_t)win->ui_pos->x){
		/* rewind if possible */
		while(pos > 0 && isdigit_or_minus(line->line[pos - 1]))
			pos--;
	}

	char *end;
	long long num = strtoll(&line->line[pos], &end, 0);
	if(end == &line->line[pos])
		return;

	repeat = DEFAULT_REPEAT(repeat);

	num += (signed)repeat * a->i;

	char numbuf[64];
	snprintf(numbuf, sizeof numbuf, "%lld", num);
	const size_t numbuflen_new = strlen(numbuf);
	const size_t numbuflen_old = end - &line->line[pos];

	const long change = numbuflen_new - numbuflen_old;

	if(change > 0){
		if(line->len_line + change > line->len_malloc)
			line->line = urealloc(line->line, line->len_malloc += change);

		/* make way */
		memmove(
				&line->line[pos] + numbuflen_new,
				&line->line[pos] + numbuflen_old,
				line->len_line - pos - numbuflen_old);
	}

	memcpy(&line->line[pos], numbuf, numbuflen_new);

	if(change < 0){
		/* fill back */
		memmove(
				&line->line[pos] + numbuflen_new,
				&line->line[pos] + numbuflen_old,
				line->len_line - pos - numbuflen_old);
	}

	line->len_line += change;
	win->buf->modified = true;

	win->ui_pos->x = pos + numbuflen_new - 1;

	ui_cur_changed();
	ui_redraw();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
callq 0x13c60
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
xorl %esi, %esi
callq 0x13790
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x79d9
jmp 0x7ca0
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movl (%rax), %eax
movq -0x20(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jb 0x79f2
jmp 0x7ca0
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movslq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x7a3b
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
movsbl (%rax,%rcx), %edi
callq 0x109d0
testb $0x1, %al
jne 0x7a29
jmp 0x7a2b
jmp 0x7a3b
jmp 0x7a2d
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x7a01
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x7a4e
jmp 0x7ca0
movq -0x28(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x30(%rcx), %rcx
movslq (%rcx), %rcx
cmpq %rcx, %rax
jne 0x7aad
jmp 0x7a64
xorl %eax, %eax
cmpq $0x0, -0x28(%rbp)
movb %al, -0x99(%rbp)
jbe 0x7a91
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
subq $0x1, %rcx
movsbl (%rax,%rcx), %edi
callq 0x109d0
movb %al, -0x99(%rbp)
movb -0x99(%rbp), %al
testb $0x1, %al
jne 0x7a9d
jmp 0x7aab
movq -0x28(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x7a64
jmp 0x7aad
movq -0x20(%rbp), %rax
movq (%rax), %rdi
addq -0x28(%rbp), %rdi
leaq -0x30(%rbp), %rsi
xorl %edx, %edx
callq 0x4300
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rax
movq -0x20(%rbp), %rcx
movq (%rcx), %rcx
addq -0x28(%rbp), %rcx
cmpq %rcx, %rax
jne 0x7ae0
jmp 0x7ca0
cmpl $0x0, -0xc(%rbp)
je 0x7af1
movl -0xc(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x7afe
movl $0x1, %eax
movl %eax, -0xa0(%rbp)
jmp 0x7afe
movl -0xa0(%rbp), %eax
movl %eax, -0xc(%rbp)
movl -0xc(%rbp), %eax
movq -0x8(%rbp), %rcx
imull (%rcx), %eax
cltq
addq -0x38(%rbp), %rax
movq %rax, -0x38(%rbp)
leaq -0x80(%rbp), %rdi
movq -0x38(%rbp), %rcx
movl $0x40, %esi
leaq 0xd80d(%rip), %rdx      # 0x1533c
movb $0x0, %al
callq 0x41e0
leaq -0x80(%rbp), %rdi
callq 0x4170
movq %rax, -0x88(%rbp)
movq -0x30(%rbp), %rax
movq -0x20(%rbp), %rcx
movq (%rcx), %rcx
addq -0x28(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x90(%rbp)
movq -0x88(%rbp), %rax
subq -0x90(%rbp), %rax
movq %rax, -0x98(%rbp)
cmpq $0x0, -0x98(%rbp)
jle 0x7bfc
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
addq -0x98(%rbp), %rax
movq -0x20(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jbe 0x7bc0
movq -0x20(%rbp), %rax
movq (%rax), %rdi
movq -0x98(%rbp), %rsi
movq -0x20(%rbp), %rax
addq 0x10(%rax), %rsi
movq %rsi, 0x10(%rax)
callq 0x5f60
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rdi
addq -0x28(%rbp), %rdi
addq -0x88(%rbp), %rdi
movq -0x20(%rbp), %rax
movq (%rax), %rsi
addq -0x28(%rbp), %rsi
addq -0x90(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
subq -0x28(%rbp), %rdx
subq -0x90(%rbp), %rdx
callq 0x4400
movq -0x20(%rbp), %rax
movq (%rax), %rdi
addq -0x28(%rbp), %rdi
leaq -0x80(%rbp), %rsi
movq -0x88(%rbp), %rdx
callq 0x4350
cmpq $0x0, -0x98(%rbp)
jge 0x7c5d
movq -0x20(%rbp), %rax
movq (%rax), %rdi
addq -0x28(%rbp), %rdi
addq -0x88(%rbp), %rdi
movq -0x20(%rbp), %rax
movq (%rax), %rsi
addq -0x28(%rbp), %rsi
addq -0x90(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
subq -0x28(%rbp), %rdx
subq -0x90(%rbp), %rdx
callq 0x4400
movq -0x98(%rbp), %rcx
movq -0x20(%rbp), %rax
addq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movb $0x1, 0x39(%rax)
movq -0x28(%rbp), %rax
addq -0x88(%rbp), %rax
subq $0x1, %rax
movl %eax, %ecx
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movl %ecx, (%rax)
callq 0x5050
callq 0x4fd0
addq $0xa0, %rsp
popq %rbp
retq
nopl (%rax)