// File: /workspace/github_c_makefile_star2_O0/bluecmd[P]fst-example/gtkwave/fstapi.c
// Function: fstUtilityEscToBin
int fstUtilityEscToBin(unsigned char *d, unsigned char *s, int len)
{
unsigned char *src = s;
unsigned char *dst = (!d) ? s : (s = d);
unsigned char val[3];
int i;

for(i=0;i<len;i++)
        {
        if(src[i] != '\\')
                {
                *(dst++) = src[i];
                }
                else
                {
                switch(src[++i])
                        {
                        case 'a':       *(dst++) = '\a'; break;
                        case 'b':       *(dst++) = '\b'; break;
                        case 'f':       *(dst++) = '\f'; break;
                        case 'n':       *(dst++) = '\n'; break;
                        case 'r':       *(dst++) = '\r'; break;
                        case 't':       *(dst++) = '\t'; break;
                        case 'v':       *(dst++) = '\v'; break;
                        case '\'':      *(dst++) = '\''; break;
                        case '\"':      *(dst++) = '\"'; break;
                        case '\\':      *(dst++) = '\\'; break;
                        case '\?':      *(dst++) = '\?'; break;

                        case 'x':       val[0] = toupper(src[++i]);
                                        val[1] = toupper(src[++i]);
                                        val[0] = ((val[0]>='A')&&(val[0]<='F')) ? (val[0] - 'A' + 10) : (val[0] - '0');
                                        val[1] = ((val[1]>='A')&&(val[1]<='F')) ? (val[1] - 'A' + 10) : (val[1] - '0');
                                        *(dst++) = val[0] * 16 + val[1];
                                        break;

                        case '0':
                        case '1':
                        case '2':
                        case '3':
                        case '4':
                        case '5':
                        case '6':
                        case '7':       val[0] = src[  i] - '0';
                                        val[1] = src[++i] - '0';
                                        val[2] = src[++i] - '0';
                                        *(dst++) = val[0] * 64 + val[1] * 8 + val[2];
                                        break;

                        default:        *(dst++) = src[i]; break;
                        }
                }
        }

return(dst - s);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0x1263c
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
jmp 0x12648
movq -0x8(%rbp), %rax
movq %rax, -0x10(%rbp)
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
movl $0x0, -0x30(%rbp)
movl -0x30(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0x1292a
movq -0x20(%rbp), %rax
movslq -0x30(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x5c, %eax
je 0x12695
movq -0x20(%rbp), %rax
movslq -0x30(%rbp), %rcx
movb (%rax,%rcx), %cl
movq -0x28(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movb %cl, (%rax)
jmp 0x1291a
movq -0x20(%rbp), %rcx
movslq -0x30(%rbp), %rax
movl %eax, %edx
incl %edx
movl %edx, -0x30(%rbp)
movzbl 0x1(%rax,%rcx), %eax
addl $-0x22, %eax
movl %eax, %ecx
movq %rcx, -0x40(%rbp)
subl $0x56, %eax
ja 0x128fc
movq -0x40(%rbp), %rax
leaq 0x186fa(%rip), %rcx     # 0x2adc0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x7, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x8, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0xc, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0xa, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0xd, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x9, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0xb, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x27, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x22, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x5c, (%rax)
jmp 0x12918
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb $0x3f, (%rax)
jmp 0x12918
movq -0x20(%rbp), %rax
movl -0x30(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, -0x30(%rbp)
movslq %ecx, %rcx
movzbl (%rax,%rcx), %edi
callq 0x20b0
movb %al, -0x2b(%rbp)
movq -0x20(%rbp), %rax
movl -0x30(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, -0x30(%rbp)
movslq %ecx, %rcx
movzbl (%rax,%rcx), %edi
callq 0x20b0
movb %al, -0x2a(%rbp)
movzbl -0x2b(%rbp), %eax
cmpl $0x41, %eax
jl 0x12825
movzbl -0x2b(%rbp), %eax
cmpl $0x46, %eax
jg 0x12825
movzbl -0x2b(%rbp), %eax
subl $0x41, %eax
addl $0xa, %eax
movl %eax, -0x44(%rbp)
jmp 0x1282f
movzbl -0x2b(%rbp), %eax
subl $0x30, %eax
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %eax
movb %al, -0x2b(%rbp)
movzbl -0x2a(%rbp), %eax
cmpl $0x41, %eax
jl 0x12856
movzbl -0x2a(%rbp), %eax
cmpl $0x46, %eax
jg 0x12856
movzbl -0x2a(%rbp), %eax
subl $0x41, %eax
addl $0xa, %eax
movl %eax, -0x48(%rbp)
jmp 0x12860
movzbl -0x2a(%rbp), %eax
subl $0x30, %eax
movl %eax, -0x48(%rbp)
movl -0x48(%rbp), %eax
movb %al, -0x2a(%rbp)
movzbl -0x2b(%rbp), %eax
shll $0x4, %eax
movzbl -0x2a(%rbp), %ecx
addl %ecx, %eax
movb %al, %cl
movq -0x28(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movb %cl, (%rax)
jmp 0x12918
movq -0x20(%rbp), %rax
movslq -0x30(%rbp), %rcx
movzbl (%rax,%rcx), %eax
subl $0x30, %eax
movb %al, -0x2b(%rbp)
movq -0x20(%rbp), %rax
movl -0x30(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, -0x30(%rbp)
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
subl $0x30, %eax
movb %al, -0x2a(%rbp)
movq -0x20(%rbp), %rax
movl -0x30(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, -0x30(%rbp)
movslq %ecx, %rcx
movzbl (%rax,%rcx), %eax
subl $0x30, %eax
movb %al, -0x29(%rbp)
movzbl -0x2b(%rbp), %eax
shll $0x6, %eax
movzbl -0x2a(%rbp), %ecx
shll $0x3, %ecx
addl %ecx, %eax
movzbl -0x29(%rbp), %ecx
addl %ecx, %eax
movb %al, %cl
movq -0x28(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movb %cl, (%rax)
jmp 0x12918
movq -0x20(%rbp), %rax
movslq -0x30(%rbp), %rcx
movb (%rax,%rcx), %cl
movq -0x28(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movb %cl, (%rax)
jmp 0x1291a
jmp 0x1291c
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x12657
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
subq %rcx, %rax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax,%rax)