// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/ansiart.c
// Function: do_code_m
static void do_code_m(deark *c, lctx *d)
{
	i64 i;
	i64 sgr_code;

	parse_params(c, d, 0, 0);

	if(d->parse_results.num_params>=1) {
		// SGR 38 and 48 apparently have a special format
		if(d->parse_results.params[0]==38 || d->parse_results.params[0]==48) {
			do_ext_color(c, d);
			return;
		}
	}

	for(i=0; i<d->parse_results.num_params; i++) {
		sgr_code = d->parse_results.params[i];

		if(sgr_code==0) {
			// Reset
			d->curr_bold = 0;
			d->curr_underline = 0;
			d->curr_blink = 0;
			d->curr_negative = 0;
			d->curr_conceal = 0;
			d->curr_strikethru = 0;
			d->curr_bgcol = DEFAULT_BGCOL;
			d->curr_fgcol = DEFAULT_FGCOL;
			// TODO: Do character sets get reset by this?
		}
		else if(sgr_code==1) {
			d->curr_bold = 1;
		}
		else if(sgr_code==4) {
			d->curr_underline = 1;
		}
		else if(sgr_code==5 || sgr_code==6) {
			d->curr_blink = 1;
		}
		else if(sgr_code==7) {
			d->curr_negative = 1;
		}
		else if(sgr_code==8) {
			d->curr_conceal = 1;
		}
		else if(sgr_code==9) {
			d->curr_strikethru = 1;
		}
		else if(sgr_code==22) {
			d->curr_bold = 0;
		}
		else if(sgr_code==24) {
			d->curr_underline = 0;
		}
		else if(sgr_code==25) {
			d->curr_blink = 0;
		}
		else if(sgr_code==27) { // positive image
			d->curr_negative = 0;
		}
		else if(sgr_code==28) {
			d->curr_conceal = 0;
		}
		else if(sgr_code==29) {
			d->curr_strikethru = 0;
		}
		else if(sgr_code>=30 && sgr_code<=37) {
			// Set foreground color
			d->curr_fgcol = (u32)(sgr_code-30);
		}
		else if(sgr_code==39) {
			d->curr_fgcol = DEFAULT_FGCOL;
		}
		else if(sgr_code>=40 && sgr_code<=47) {
			// Set background color
			d->curr_bgcol = (u32)(sgr_code-40);
		}
		else if(sgr_code==49) {
			d->curr_bgcol = DEFAULT_BGCOL;
		}
		else if(sgr_code>=90 && sgr_code<=97) {
			d->curr_fgcol = (u32)(8+(sgr_code-90));
		}
		else if(sgr_code>=100 && sgr_code<=107) {
			d->curr_bgcol = (u32)(8+(sgr_code-100));
		}
		else {
			if(d->num_warnings<ANSIART_MAX_WARNINGS) {
				de_warn(c, "Unsupported SGR code %"I64_FMT, sgr_code);
				d->num_warnings++;
			}
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
xorl %eax, %eax
movl %eax, %ecx
movq %rcx, %rdx
callq 0x21db0
movq -0x10(%rbp), %rax
cmpl $0x1, 0x120(%rax)
jl 0x21911
movq -0x10(%rbp), %rax
cmpq $0x26, 0x128(%rax)
je 0x218fd
movq -0x10(%rbp), %rax
cmpq $0x30, 0x128(%rax)
jne 0x2190f
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x21f30
jmp 0x21bb8
jmp 0x21911
movq $0x0, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movslq 0x120(%rcx), %rcx
cmpq %rcx, %rax
jge 0x21bb8
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x128(%rax,%rcx,8), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x21997
movq -0x10(%rbp), %rax
movb $0x0, 0x50(%rax)
movq -0x10(%rbp), %rax
movb $0x0, 0x51(%rax)
movq -0x10(%rbp), %rax
movb $0x0, 0x52(%rax)
movq -0x10(%rbp), %rax
movb $0x0, 0x53(%rax)
movq -0x10(%rbp), %rax
movb $0x0, 0x54(%rax)
movq -0x10(%rbp), %rax
movb $0x0, 0x55(%rax)
movq -0x10(%rbp), %rax
movl $0x0, 0x4c(%rax)
movq -0x10(%rbp), %rax
movl $0x7, 0x48(%rax)
jmp 0x21ba5
cmpq $0x1, -0x20(%rbp)
jne 0x219ab
movq -0x10(%rbp), %rax
movb $0x1, 0x50(%rax)
jmp 0x21ba3
cmpq $0x4, -0x20(%rbp)
jne 0x219bf
movq -0x10(%rbp), %rax
movb $0x1, 0x51(%rax)
jmp 0x21ba1
cmpq $0x5, -0x20(%rbp)
je 0x219cd
cmpq $0x6, -0x20(%rbp)
jne 0x219da
movq -0x10(%rbp), %rax
movb $0x1, 0x52(%rax)
jmp 0x21b9f
cmpq $0x7, -0x20(%rbp)
jne 0x219ee
movq -0x10(%rbp), %rax
movb $0x1, 0x53(%rax)
jmp 0x21b9d
cmpq $0x8, -0x20(%rbp)
jne 0x21a02
movq -0x10(%rbp), %rax
movb $0x1, 0x54(%rax)
jmp 0x21b9b
cmpq $0x9, -0x20(%rbp)
jne 0x21a16
movq -0x10(%rbp), %rax
movb $0x1, 0x55(%rax)
jmp 0x21b99
cmpq $0x16, -0x20(%rbp)
jne 0x21a2a
movq -0x10(%rbp), %rax
movb $0x0, 0x50(%rax)
jmp 0x21b97
cmpq $0x18, -0x20(%rbp)
jne 0x21a3e
movq -0x10(%rbp), %rax
movb $0x0, 0x51(%rax)
jmp 0x21b95
cmpq $0x19, -0x20(%rbp)
jne 0x21a52
movq -0x10(%rbp), %rax
movb $0x0, 0x52(%rax)
jmp 0x21b93
cmpq $0x1b, -0x20(%rbp)
jne 0x21a66
movq -0x10(%rbp), %rax
movb $0x0, 0x53(%rax)
jmp 0x21b91
cmpq $0x1c, -0x20(%rbp)
jne 0x21a7a
movq -0x10(%rbp), %rax
movb $0x0, 0x54(%rax)
jmp 0x21b8f
cmpq $0x1d, -0x20(%rbp)
jne 0x21a8e
movq -0x10(%rbp), %rax
movb $0x0, 0x55(%rax)
jmp 0x21b8d
cmpq $0x1e, -0x20(%rbp)
jl 0x21ab2
cmpq $0x25, -0x20(%rbp)
jg 0x21ab2
movq -0x20(%rbp), %rax
subq $0x1e, %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x48(%rax)
jmp 0x21b8b
cmpq $0x27, -0x20(%rbp)
jne 0x21ac9
movq -0x10(%rbp), %rax
movl $0x7, 0x48(%rax)
jmp 0x21b89
cmpq $0x28, -0x20(%rbp)
jl 0x21aed
cmpq $0x2f, -0x20(%rbp)
jg 0x21aed
movq -0x20(%rbp), %rax
subq $0x28, %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x4c(%rax)
jmp 0x21b87
cmpq $0x31, -0x20(%rbp)
jne 0x21b04
movq -0x10(%rbp), %rax
movl $0x0, 0x4c(%rax)
jmp 0x21b85
cmpq $0x5a, -0x20(%rbp)
jl 0x21b29
cmpq $0x61, -0x20(%rbp)
jg 0x21b29
movq -0x20(%rbp), %rax
subq $0x5a, %rax
addq $0x8, %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x48(%rax)
jmp 0x21b83
cmpq $0x64, -0x20(%rbp)
jl 0x21b4e
cmpq $0x6b, -0x20(%rbp)
jg 0x21b4e
movq -0x20(%rbp), %rax
subq $0x64, %rax
addq $0x8, %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x4c(%rax)
jmp 0x21b81
movq -0x10(%rbp), %rax
cmpq $0xa, 0x68(%rax)
jge 0x21b7f
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rdx
leaq 0x17c2df(%rip), %rsi    # 0x19de47
movb $0x0, %al
callq 0x15bc10
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x68(%rax)
jmp 0x21b81
jmp 0x21b83
jmp 0x21b85
jmp 0x21b87
jmp 0x21b89
jmp 0x21b8b
jmp 0x21b8d
jmp 0x21b8f
jmp 0x21b91
jmp 0x21b93
jmp 0x21b95
jmp 0x21b97
jmp 0x21b99
jmp 0x21b9b
jmp 0x21b9d
jmp 0x21b9f
jmp 0x21ba1
jmp 0x21ba3
jmp 0x21ba5
jmp 0x21ba7
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x21919
addq $0x20, %rsp
popq %rbp
retq
nop