// File: /workspace/github_c_makefile_star2_O0/BernardTatin[P]s7sh/s7.c
// Function: read_error_1
static s7_pointer read_error_1(s7_scheme *sc, const char *errmsg, bool string_error)
                {
                    /* reader errors happen before the evaluator gets involved, so forms such as:
                     *   (catch #t (lambda () (car '( . ))) (lambda arg 'error))
                     * do not catch the error if we simply signal an error when we encounter it.
                     */
                    char *msg;
                    s7_int len;
                    s7_pointer pt;

                    pt = sc->input_port;
                    if (!string_error)
                    {
                        /* make an heroic effort to find where we slid off the tracks */

                        if (is_string_port(sc->input_port))
                        {
#define QUOTE_SIZE 40
                            s7_int i, j, start = 0, end, slen, size;
                            char *recent_input = NULL;
                            s7_pointer p;

                            /* we can run off the end in cases like (eval-string "(. . ,.)") or (eval-string " (@ . ,.)") */
                            if (port_position(pt) >= port_data_size(pt))
                                port_position(pt) = port_data_size(pt) - 1;

                            /* start at current position and look back a few chars */
                            for (i = port_position(pt), j = 0; (i > 0) && (j < QUOTE_SIZE); i--, j++)
                                if ((port_data(pt)[i] == '\0') ||
                                        (port_data(pt)[i] == '\n') ||
                                        (port_data(pt)[i] == '\r'))
                                    break;
                            start = i;

                            /* start at current position and look ahead a few chars */
                            size = port_data_size(pt);
                            for (i = port_position(pt), j = 0; (i < size) && (j < QUOTE_SIZE); i++, j++)
                                if ((port_data(pt)[i] == '\0') ||
                                        (port_data(pt)[i] == '\n') ||
                                        (port_data(pt)[i] == '\r'))
                                    break;

                            end = i;
                            slen = end - start;
                            /* hopefully this is more or less the current line where the read error happened */

                            if (slen > 0)
                            {
                                recent_input = (char *)calloc(slen + 9, 1);
                                for (i = 0; i < (slen + 8); i++) recent_input[i] = '.';
                                recent_input[3] = ' ';
                                recent_input[slen + 4] = ' ';
                                for (i = 0; i < slen; i++) recent_input[i + 4] = port_data(pt)[start + i];
                            }

                            if ((port_line_number(pt) > 0) &&
                                    (port_filename(pt)))
                            {
                                len = safe_strlen(recent_input) + safe_strlen(errmsg) + port_filename_length(pt) + safe_strlen(sc->current_file) + 64;
                                p = make_empty_string(sc, len, '\0');
                                msg = string_value(p);
                                len = snprintf(msg, len, "%s: %s %s[%u], last top-level form at: %s[%" print_s7_int "]",
                                        errmsg, (recent_input) ? recent_input : "", port_filename(pt), port_line_number(pt),
                                        sc->current_file, sc->current_line);
                            }
                            else
                            {
                                len = safe_strlen(recent_input) + safe_strlen(errmsg) + safe_strlen(sc->current_file) + 64;
                                p = make_empty_string(sc, len, '\0');
                                msg = string_value(p);
                                if ((sc->current_file) &&
                                        (sc->current_line >= 0))
                                    len = snprintf(msg, len, "%s: %s, last top-level form at %s[%" print_s7_int "]",
                                            errmsg, (recent_input) ? recent_input : "",
                                            sc->current_file, sc->current_line);
                                else len = snprintf(msg, len, "%s: %s", errmsg, (recent_input) ? recent_input : "");
                            }

                            string_length(p) = len;
                            if (recent_input) free(recent_input);
                            return(s7_error(sc, sc->read_error_symbol, set_elist_1(sc, p)));
                        }
                    }

                    if ((port_line_number(pt) > 0) &&
                            (port_filename(pt)))
                    {
                        s7_pointer p;
                        len = safe_strlen(errmsg) + port_filename_length(pt) + safe_strlen(sc->current_file) + 128;
                        p = make_empty_string(sc, len, '\0');
                        msg = string_value(p);
                        if (string_error)
                            len = snprintf(msg, len, "%s %s[%u],\n;  possible culprit: \"%s...\"\n;  last top-level form at %s[%" print_s7_int "]",
                                    errmsg, port_filename(pt), port_line_number(pt),
                                    sc->strbuf, sc->current_file, sc->current_line);
                        else len = snprintf(msg, len, "%s %s[%u], last top-level form at %s[%" print_s7_int "]",
                                errmsg, port_filename(pt), port_line_number(pt),
                                sc->current_file, sc->current_line);
                        string_length(p) = len;
                        return(s7_error(sc, sc->read_error_symbol, set_elist_1(sc, p)));
                    }
                    return(s7_error(sc, (string_error) ? sc->string_read_error_symbol : sc->read_error_symbol, set_elist_1(sc, s7_make_string_wrapper(sc, (char *)errmsg))));
                }

// Assembly:
subq $0x168, %rsp            # imm = 0x168
movb %dl, %al
movq %rdi, 0x158(%rsp)
movq %rsi, 0x150(%rsp)
andb $0x1, %al
movb %al, 0x14f(%rsp)
movq 0x158(%rsp), %rax
movq 0x170(%rax), %rax
movq %rax, 0x130(%rsp)
testb $0x1, 0x14f(%rsp)
jne 0xe08f5
movq 0x158(%rsp), %rax
movq 0x170(%rax), %rax
movq 0x8(%rax), %rax
cmpl $0x1, 0x4(%rax)
jne 0xe08f3
movq $0x0, 0x118(%rsp)
movq $0x0, 0xf8(%rsp)
movq 0x130(%rsp), %rax
movq 0x20(%rax), %rax
movq 0x130(%rsp), %rcx
cmpq 0x18(%rcx), %rax
jl 0xe01a2
movq 0x130(%rsp), %rax
movq 0x18(%rax), %rcx
subq $0x1, %rcx
movq 0x130(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x130(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, 0x128(%rsp)
movq $0x0, 0x120(%rsp)
xorl %eax, %eax
cmpq $0x0, 0x128(%rsp)
movb %al, 0xe7(%rsp)
jle 0xe01e9
cmpq $0x28, 0x120(%rsp)
setl %al
movb %al, 0xe7(%rsp)
movb 0xe7(%rsp), %al
testb $0x1, %al
jne 0xe01f9
jmp 0xe0281
movq 0x130(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x128(%rsp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0xe0250
movq 0x130(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x128(%rsp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0xa, %eax
je 0xe0250
movq 0x130(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x128(%rsp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0xd, %eax
jne 0xe0252
jmp 0xe0281
jmp 0xe0254
movq 0x128(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x128(%rsp)
movq 0x120(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x120(%rsp)
jmp 0xe01c2
movq 0x128(%rsp), %rax
movq %rax, 0x118(%rsp)
movq 0x130(%rsp), %rax
movq 0x18(%rax), %rax
movq %rax, 0x100(%rsp)
movq 0x130(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, 0x128(%rsp)
movq $0x0, 0x120(%rsp)
movq 0x128(%rsp), %rcx
xorl %eax, %eax
cmpq 0x100(%rsp), %rcx
movb %al, 0xe6(%rsp)
jge 0xe02f3
cmpq $0x28, 0x120(%rsp)
setl %al
movb %al, 0xe6(%rsp)
movb 0xe6(%rsp), %al
testb $0x1, %al
jne 0xe0303
jmp 0xe038b
movq 0x130(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x128(%rsp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0xe035a
movq 0x130(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x128(%rsp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0xa, %eax
je 0xe035a
movq 0x130(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x128(%rsp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0xd, %eax
jne 0xe035c
jmp 0xe038b
jmp 0xe035e
movq 0x128(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x128(%rsp)
movq 0x120(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x120(%rsp)
jmp 0xe02c5
movq 0x128(%rsp), %rax
movq %rax, 0x110(%rsp)
movq 0x110(%rsp), %rax
subq 0x118(%rsp), %rax
movq %rax, 0x108(%rsp)
cmpq $0x0, 0x108(%rsp)
jle 0xe04b9
movq 0x108(%rsp), %rdi
addq $0x9, %rdi
movl $0x1, %esi
callq 0x9360
movq %rax, 0xf8(%rsp)
movq $0x0, 0x128(%rsp)
movq 0x128(%rsp), %rax
movq 0x108(%rsp), %rcx
addq $0x8, %rcx
cmpq %rcx, %rax
jge 0xe042f
movq 0xf8(%rsp), %rax
movq 0x128(%rsp), %rcx
movb $0x2e, (%rax,%rcx)
movq 0x128(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x128(%rsp)
jmp 0xe03ec
movq 0xf8(%rsp), %rax
movb $0x20, 0x3(%rax)
movq 0xf8(%rsp), %rax
movq 0x108(%rsp), %rcx
movb $0x20, 0x4(%rax,%rcx)
movq $0x0, 0x128(%rsp)
movq 0x128(%rsp), %rax
cmpq 0x108(%rsp), %rax
jge 0xe04b7
movq 0x130(%rsp), %rax
movq 0x10(%rax), %rax
movq 0x118(%rsp), %rcx
addq 0x128(%rsp), %rcx
movb (%rax,%rcx), %dl
movq 0xf8(%rsp), %rax
movq 0x128(%rsp), %rcx
movb %dl, 0x4(%rax,%rcx)
movq 0x128(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x128(%rsp)
jmp 0xe045c
jmp 0xe04b9
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
cmpl $0x0, 0x20(%rax)
jbe 0xe0676
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
cmpq $0x0, 0x10(%rax)
je 0xe0676
movq 0xf8(%rsp), %rdi
callq 0xa430
movq %rax, 0xb8(%rsp)
movq 0x150(%rsp), %rdi
callq 0xa430
movq %rax, %rcx
movq 0xb8(%rsp), %rax
addq %rcx, %rax
movq 0x130(%rsp), %rcx
movq 0x8(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, 0xc0(%rsp)
movq 0x158(%rsp), %rax
movq 0x6a8(%rax), %rdi
callq 0xa430
movq %rax, %rcx
movq 0xc0(%rsp), %rax
addq %rcx, %rax
addq $0x40, %rax
movq %rax, 0x138(%rsp)
movq 0x158(%rsp), %rdi
movq 0x138(%rsp), %rsi
xorl %edx, %edx
callq 0x146a0
movq %rax, 0xf0(%rsp)
movq 0xf0(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x140(%rsp)
movq 0x140(%rsp), %rax
movq %rax, 0xc8(%rsp)
movq 0x138(%rsp), %rax
movq %rax, 0xd0(%rsp)
movq 0x150(%rsp), %rax
movq %rax, 0xd8(%rsp)
cmpq $0x0, 0xf8(%rsp)
je 0xe05dc
movq 0xf8(%rsp), %rax
movq %rax, 0xb0(%rsp)
jmp 0xe05ed
leaq 0x113ed6(%rip), %rax    # 0x1f44b9
movq %rax, 0xb0(%rsp)
jmp 0xe05ed
movq 0xd8(%rsp), %rcx
movq 0xd0(%rsp), %rsi
movq 0xc8(%rsp), %rdi
movq 0xb0(%rsp), %r8
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %r9
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
movl 0x20(%rax), %r11d
movq 0x158(%rsp), %rax
movq 0x6a8(%rax), %r10
movq 0x158(%rsp), %rax
movq 0x690(%rax), %rax
leaq 0x10eaad(%rip), %rdx    # 0x1ef0ff
movl %r11d, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0x9210
cltq
movq %rax, 0x138(%rsp)
jmp 0xe0872
movq 0xf8(%rsp), %rdi
callq 0xa430
movq %rax, 0xa0(%rsp)
movq 0x150(%rsp), %rdi
callq 0xa430
movq %rax, %rcx
movq 0xa0(%rsp), %rax
addq %rcx, %rax
movq %rax, 0xa8(%rsp)
movq 0x158(%rsp), %rax
movq 0x6a8(%rax), %rdi
callq 0xa430
movq %rax, %rcx
movq 0xa8(%rsp), %rax
addq %rcx, %rax
addq $0x40, %rax
movq %rax, 0x138(%rsp)
movq 0x158(%rsp), %rdi
movq 0x138(%rsp), %rsi
xorl %edx, %edx
callq 0x146a0
movq %rax, 0xf0(%rsp)
movq 0xf0(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x140(%rsp)
movq 0x158(%rsp), %rax
cmpq $0x0, 0x6a8(%rax)
je 0xe07f5
movq 0x158(%rsp), %rax
cmpq $0x0, 0x690(%rax)
jl 0xe07f5
movq 0x140(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x138(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x150(%rsp), %rax
movq %rax, 0x98(%rsp)
cmpq $0x0, 0xf8(%rsp)
je 0xe0788
movq 0xf8(%rsp), %rax
movq %rax, 0x80(%rsp)
jmp 0xe0799
leaq 0x113d2a(%rip), %rax    # 0x1f44b9
movq %rax, 0x80(%rsp)
jmp 0xe0799
movq 0x98(%rsp), %rcx
movq 0x90(%rsp), %rsi
movq 0x88(%rsp), %rdi
movq 0x80(%rsp), %r8
movq 0x158(%rsp), %rax
movq 0x6a8(%rax), %r9
movq 0x158(%rsp), %rax
movq 0x690(%rax), %rax
leaq 0x10e950(%rip), %rdx    # 0x1ef12e
movq %rax, (%rsp)
movb $0x0, %al
callq 0x9210
cltq
movq %rax, 0x138(%rsp)
jmp 0xe0870
movq 0x140(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x138(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x150(%rsp), %rax
movq %rax, 0x78(%rsp)
cmpq $0x0, 0xf8(%rsp)
je 0xe0836
movq 0xf8(%rsp), %rax
movq %rax, 0x60(%rsp)
jmp 0xe0844
leaq 0x113c7c(%rip), %rax    # 0x1f44b9
movq %rax, 0x60(%rsp)
jmp 0xe0844
movq 0x78(%rsp), %rcx
movq 0x70(%rsp), %rsi
movq 0x68(%rsp), %rdi
movq 0x60(%rsp), %r8
leaq 0x10e8f6(%rip), %rdx    # 0x1ef155
movb $0x0, %al
callq 0x9210
cltq
movq %rax, 0x138(%rsp)
jmp 0xe0872
movq 0x138(%rsp), %rcx
movq 0xf0(%rsp), %rax
movq %rcx, 0x8(%rax)
cmpq $0x0, 0xf8(%rsp)
je 0xe089e
movq 0xf8(%rsp), %rdi
callq 0x9050
movq 0x158(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x158(%rsp), %rax
movq 0x1908(%rax), %rax
movq %rax, 0x58(%rsp)
movq 0x158(%rsp), %rdi
movq 0xf0(%rsp), %rsi
callq 0xc3820
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
movq %rax, %rdx
callq 0x2f940
movq %rax, 0x160(%rsp)
jmp 0xe0bb3
jmp 0xe08f5
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
cmpl $0x0, 0x20(%rax)
jbe 0xe0b1f
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
cmpq $0x0, 0x10(%rax)
je 0xe0b1f
movq 0x150(%rsp), %rdi
callq 0xa430
movq 0x130(%rsp), %rcx
movq 0x8(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, 0x48(%rsp)
movq 0x158(%rsp), %rax
movq 0x6a8(%rax), %rdi
callq 0xa430
movq %rax, %rcx
movq 0x48(%rsp), %rax
addq %rcx, %rax
addq $0x80, %rax
movq %rax, 0x138(%rsp)
movq 0x158(%rsp), %rdi
movq 0x138(%rsp), %rsi
xorl %edx, %edx
callq 0x146a0
movq %rax, 0xe8(%rsp)
movq 0xe8(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x140(%rsp)
testb $0x1, 0x14f(%rsp)
je 0xe0a3f
movq 0x140(%rsp), %rdi
movq 0x138(%rsp), %rsi
movq 0x150(%rsp), %rcx
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %r8
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
movl 0x20(%rax), %r9d
movq 0x158(%rsp), %rax
movq 0x4b0(%rax), %r11
movq 0x158(%rsp), %rax
movq 0x6a8(%rax), %r10
movq 0x158(%rsp), %rax
movq 0x690(%rax), %rax
leaq 0x10e73e(%rip), %rdx    # 0x1ef15c
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
movb $0x0, %al
callq 0x9210
cltq
movq %rax, 0x138(%rsp)
jmp 0xe0ab6
movq 0x140(%rsp), %rdi
movq 0x138(%rsp), %rsi
movq 0x150(%rsp), %rcx
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x10(%rax), %r8
movq 0x130(%rsp), %rax
movq 0x8(%rax), %rax
movl 0x20(%rax), %r9d
movq 0x158(%rsp), %rax
movq 0x6a8(%rax), %r10
movq 0x158(%rsp), %rax
movq 0x690(%rax), %rax
leaq 0x10e70a(%rip), %rdx    # 0x1ef1a6
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
movb $0x0, %al
callq 0x9210
cltq
movq %rax, 0x138(%rsp)
movq 0x138(%rsp), %rcx
movq 0xe8(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x158(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x158(%rsp), %rax
movq 0x1908(%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x158(%rsp), %rdi
movq 0xe8(%rsp), %rsi
callq 0xc3820
movq 0x38(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq %rax, %rdx
callq 0x2f940
movq %rax, 0x160(%rsp)
jmp 0xe0bb3
movq 0x158(%rsp), %rax
movq %rax, 0x30(%rsp)
testb $0x1, 0x14f(%rsp)
je 0xe0b4c
movq 0x158(%rsp), %rax
movq 0x1910(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0xe0b60
movq 0x158(%rsp), %rax
movq 0x1908(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x158(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x158(%rsp), %rdi
movq 0x150(%rsp), %rsi
callq 0x145e0
movq 0x18(%rsp), %rdi
movq %rax, %rsi
callq 0xc3820
movq 0x30(%rsp), %rdi
movq 0x20(%rsp), %rsi
movq %rax, %rdx
callq 0x2f940
movq %rax, 0x160(%rsp)
movq 0x160(%rsp), %rax
addq $0x168, %rsp            # imm = 0x168
retq
nopw %cs:(%rax,%rax)