// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/src/deark-char.c
// Function: do_prescan_screen
static void do_prescan_screen(deark *c, struct de_char_context *charctx,
	struct charextractx *ectx, i64 screen_idx)
{
	const struct de_char_cell *cell;
	int i, j;
	struct de_char_screen *screen;
	u32 highest_fgcol_count;
	u32 highest_bgcol_count;

	screen = charctx->screens[screen_idx];

	for(j=0; j<screen->height; j++) {
		for(i=0; i<screen->width; i++) {
			if(!screen->cell_rows || !screen->cell_rows[j]) continue;
			cell = &screen->cell_rows[j][i];
			if(!cell) continue;

			if(DE_IS_PAL_COLOR(cell->fgcol)) {
				ectx->used_fgcol[cell->fgcol] = 1;
				ectx->scrstats[screen_idx].fgcol_count[cell->fgcol]++;
			}
			else {
				ectx->used_24bitcolor = 1;
			}
			if(DE_IS_PAL_COLOR(cell->bgcol)) {
				ectx->used_bgcol[cell->bgcol] = 1;
				ectx->scrstats[screen_idx].bgcol_count[cell->bgcol]++;
			}
			else {
				ectx->used_24bitcolor = 1;
			}
			if(cell->underline) ectx->used_underline = 1;
			if(cell->strikethru) ectx->used_strikethru = 1;
			if(cell->blink) ectx->used_blink = 1;
		}
	}

	// Find the most-used foreground and background (palette) colors
	highest_fgcol_count = ectx->scrstats[screen_idx].fgcol_count[0];
	highest_bgcol_count = ectx->scrstats[screen_idx].bgcol_count[0];
	ectx->scrstats->most_used_fgcol = 0;
	ectx->scrstats->most_used_bgcol = 0;

	for(i=1; i<16; i++) {
		if(ectx->scrstats[screen_idx].fgcol_count[i] > highest_fgcol_count) {
			highest_fgcol_count = ectx->scrstats[screen_idx].fgcol_count[i];
			ectx->scrstats->most_used_fgcol = (u32)i;
		}
		if(ectx->scrstats[screen_idx].bgcol_count[i] > highest_bgcol_count) {
			highest_bgcol_count = ectx->scrstats[screen_idx].bgcol_count[i];
			ectx->scrstats->most_used_bgcol = (u32)i;
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x38(%rbp)
movl $0x0, -0x30(%rbp)
movslq -0x30(%rbp), %rax
movq -0x38(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jge 0x16dd1d
movl $0x0, -0x2c(%rbp)
movslq -0x2c(%rbp), %rax
movq -0x38(%rbp), %rcx
cmpq (%rcx), %rax
jge 0x16dd0d
movq -0x38(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x16dc07
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x30(%rbp), %rcx
cmpq $0x0, (%rax,%rcx,8)
jne 0x16dc0c
jmp 0x16dcff
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x30(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x14, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x16dc37
jmp 0x16dcff
movq -0x28(%rbp), %rax
cmpl $0xf, 0x8(%rax)
ja 0x16dc76
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
movl 0x8(%rcx), %ecx
movb $0x1, 0x6(%rax,%rcx)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x88, -0x20(%rbp), %rcx
addq %rcx, %rax
movq -0x28(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,4), %edx
addl $0x1, %edx
movl %edx, (%rax,%rcx,4)
jmp 0x16dc7e
movq -0x18(%rbp), %rax
movb $0x1, 0x5(%rax)
movq -0x28(%rbp), %rax
cmpl $0xf, 0xc(%rax)
ja 0x16dcbf
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
movl 0xc(%rcx), %ecx
movb $0x1, 0x16(%rax,%rcx)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x88, -0x20(%rbp), %rcx
addq %rcx, %rax
movq -0x28(%rbp), %rcx
movl 0xc(%rcx), %ecx
movl 0x40(%rax,%rcx,4), %edx
addl $0x1, %edx
movl %edx, 0x40(%rax,%rcx,4)
jmp 0x16dcc7
movq -0x18(%rbp), %rax
movb $0x1, 0x5(%rax)
movq -0x28(%rbp), %rax
cmpb $0x0, 0x10(%rax)
je 0x16dcd9
movq -0x18(%rbp), %rax
movb $0x1, 0x2(%rax)
movq -0x28(%rbp), %rax
cmpb $0x0, 0x11(%rax)
je 0x16dceb
movq -0x18(%rbp), %rax
movb $0x1, 0x3(%rax)
movq -0x28(%rbp), %rax
cmpb $0x0, 0x12(%rax)
je 0x16dcfd
movq -0x18(%rbp), %rax
movb $0x1, 0x4(%rax)
jmp 0x16dcff
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x16dbd8
jmp 0x16dd0f
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x16dbbf
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x88, -0x20(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, -0x3c(%rbp)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x88, -0x20(%rbp), %rcx
addq %rcx, %rax
movl 0x40(%rax), %eax
movl %eax, -0x40(%rbp)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movl $0x0, 0x80(%rax)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movl $0x0, 0x84(%rax)
movl $0x1, -0x2c(%rbp)
cmpl $0x10, -0x2c(%rbp)
jge 0x16de2f
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x88, -0x20(%rbp), %rcx
addq %rcx, %rax
movslq -0x2c(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x3c(%rbp), %eax
jbe 0x16ddd0
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x88, -0x20(%rbp), %rcx
addq %rcx, %rax
movslq -0x2c(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x3c(%rbp)
movl -0x2c(%rbp), %ecx
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movl %ecx, 0x80(%rax)
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x88, -0x20(%rbp), %rcx
addq %rcx, %rax
movslq -0x2c(%rbp), %rcx
movl 0x40(%rax,%rcx,4), %eax
cmpl -0x40(%rbp), %eax
jbe 0x16de1f
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x88, -0x20(%rbp), %rcx
addq %rcx, %rax
movslq -0x2c(%rbp), %rcx
movl 0x40(%rax,%rcx,4), %eax
movl %eax, -0x40(%rbp)
movl -0x2c(%rbp), %ecx
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movl %ecx, 0x84(%rax)
jmp 0x16de21
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x16dd79
popq %rbp
retq
nopw %cs:(%rax,%rax)