// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: read_x_char
static int32_t read_x_char(s7_scheme *sc, int32_t i, s7_pointer pt)
                {
                    /* possible "\xn...;" char (write creates these things, so we have to read them)
                     *   but we could have crazy input like "\x -- with no trailing double quote
                     */
                    while (true)
                    {
                        int32_t d1, d2, c;
                        c = inchar(pt);
                        if (c == '"')
                        {
                            backchar(c, pt);
                            return(i);
                        }
                        if (c == ';') return(i);
                        if (c == EOF)
                        {
                            read_error(sc, "#<eof> in midst of hex-char");
                            return(i);
                        }
                        d1 = digits[c];
                        if (d1 >= 16)
                        {
                            sc->strbuf[i++] = (unsigned char)c; /* just go on -- maybe a special char is not intended */
                            return(i);
                        }
                        c = inchar(pt);
                        if (c == '"')
                        {
                            sc->strbuf[i++] = (unsigned char)d1;
                            backchar((char)c, pt);
                            return(i);
                        }
                        if (c == EOF)
                        {
                            read_error(sc, "#<eof> in midst of hex-char");
                            return(i);
                        }
                        if (c == ';')
                        {
                            sc->strbuf[i++] = (unsigned char)d1;
                            return(i);
                        }
                        d2 = digits[c];
                        if (d2 >= 16)
                        {
                            sc->strbuf[i++] = (unsigned char)c; /* just go on -- maybe a special char is not intended */
                            return(i);
                        }
                        sc->strbuf[i++] = (unsigned char)(16 * d1 + d2);
                    }
                    return(i);
                }

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movl %esi, 0x24(%rsp)
movq %rdx, 0x18(%rsp)
movq 0x18(%rsp), %rdi
callq 0xca3d0
movl %eax, 0xc(%rsp)
cmpl $0x22, 0xc(%rsp)
jne 0x198e15
movl 0xc(%rsp), %eax
movq 0x18(%rsp), %rsi
movsbl %al, %edi
callq 0x15ec0
movl 0x24(%rsp), %eax
movl %eax, 0x34(%rsp)
jmp 0x198fc7
cmpl $0x3b, 0xc(%rsp)
jne 0x198e29
movl 0x24(%rsp), %eax
movl %eax, 0x34(%rsp)
jmp 0x198fc7
cmpl $-0x1, 0xc(%rsp)
jne 0x198e4e
movq 0x28(%rsp), %rdi
leaq 0x5880f(%rip), %rsi     # 0x1f164b
callq 0xdfe00
movl 0x24(%rsp), %eax
movl %eax, 0x34(%rsp)
jmp 0x198fc7
movq 0x84b43(%rip), %rax     # 0x21d998
movslq 0xc(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, 0x14(%rsp)
cmpl $0x10, 0x14(%rsp)
jl 0x198e9a
movl 0xc(%rsp), %eax
movb %al, %dl
movq 0x28(%rsp), %rax
movq 0x4b0(%rax), %rax
movl 0x24(%rsp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, 0x24(%rsp)
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl 0x24(%rsp), %eax
movl %eax, 0x34(%rsp)
jmp 0x198fc7
movq 0x18(%rsp), %rdi
callq 0xca3d0
movl %eax, 0xc(%rsp)
cmpl $0x22, 0xc(%rsp)
jne 0x198ef2
movl 0x14(%rsp), %eax
movb %al, %dl
movq 0x28(%rsp), %rax
movq 0x4b0(%rax), %rax
movl 0x24(%rsp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, 0x24(%rsp)
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl 0xc(%rsp), %eax
movq 0x18(%rsp), %rsi
movsbl %al, %edi
callq 0x15ec0
movl 0x24(%rsp), %eax
movl %eax, 0x34(%rsp)
jmp 0x198fc7
cmpl $-0x1, 0xc(%rsp)
jne 0x198f17
movq 0x28(%rsp), %rdi
leaq 0x58746(%rip), %rsi     # 0x1f164b
callq 0xdfe00
movl 0x24(%rsp), %eax
movl %eax, 0x34(%rsp)
jmp 0x198fc7
cmpl $0x3b, 0xc(%rsp)
jne 0x198f4d
movl 0x14(%rsp), %eax
movb %al, %dl
movq 0x28(%rsp), %rax
movq 0x4b0(%rax), %rax
movl 0x24(%rsp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, 0x24(%rsp)
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl 0x24(%rsp), %eax
movl %eax, 0x34(%rsp)
jmp 0x198fc7
movq 0x84a44(%rip), %rax     # 0x21d998
movslq 0xc(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, 0x10(%rsp)
cmpl $0x10, 0x10(%rsp)
jl 0x198f96
movl 0xc(%rsp), %eax
movb %al, %dl
movq 0x28(%rsp), %rax
movq 0x4b0(%rax), %rax
movl 0x24(%rsp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, 0x24(%rsp)
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
movl 0x24(%rsp), %eax
movl %eax, 0x34(%rsp)
jmp 0x198fc7
movl 0x14(%rsp), %eax
shll $0x4, %eax
addl 0x10(%rsp), %eax
movb %al, %dl
movq 0x28(%rsp), %rax
movq 0x4b0(%rax), %rax
movl 0x24(%rsp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, 0x24(%rsp)
movslq %ecx, %rcx
movb %dl, (%rax,%rcx)
jmp 0x198de2
movl 0x34(%rsp), %eax
addq $0x38, %rsp
retq