// File: /workspace/github_cpp_makefile_star2_O1/Ciaxur[P]yagb-emu/src/../include/imgui_club/imgui_memory_editor/imgui_memory_editor.h
// Function: MemoryEditor::DrawOptionsLine(MemoryEditor::Sizes const&, void*, unsigned long, unsigned long)
void DrawOptionsLine(const Sizes& s, void* mem_data, size_t mem_size, size_t base_display_addr)
    {
        IM_UNUSED(mem_data);
        ImGuiStyle& style = ImGui::GetStyle();
        const char* format_range = OptUpperCaseHex ? "Range %0*" _PRISizeT "X..%0*" _PRISizeT "X" : "Range %0*" _PRISizeT "x..%0*" _PRISizeT "x";

        // Options menu
        if (ImGui::Button("Options"))
            ImGui::OpenPopup("context");
        if (ImGui::BeginPopup("context"))
        {
            ImGui::PushItemWidth(56);
            if (ImGui::DragInt("##cols", &Cols, 0.2f, 4, 32, "%d cols")) { ContentsWidthChanged = true; if (Cols < 1) Cols = 1; }
            ImGui::PopItemWidth();
            ImGui::Checkbox("Show Data Preview", &OptShowDataPreview);
            ImGui::Checkbox("Show HexII", &OptShowHexII);
            if (ImGui::Checkbox("Show Ascii", &OptShowAscii)) { ContentsWidthChanged = true; }
            ImGui::Checkbox("Grey out zeroes", &OptGreyOutZeroes);
            ImGui::Checkbox("Uppercase Hex", &OptUpperCaseHex);

            ImGui::EndPopup();
        }

        ImGui::SameLine();
        ImGui::Text(format_range, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1);
        ImGui::SameLine();
        ImGui::PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0f);
        if (ImGui::InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue))
        {
            size_t goto_addr;
            if (sscanf(AddrInputBuf, "%" _PRISizeT "X", &goto_addr) == 1)
            {
                GotoAddr = goto_addr - base_display_addr;
                HighlightMin = HighlightMax = (size_t)-1;
            }
        }
        ImGui::PopItemWidth();

        if (GotoAddr != (size_t)-1)
        {
            if (GotoAddr < mem_size)
            {
                ImGui::BeginChild("##scrolling");
                ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + (GotoAddr / Cols) * ImGui::GetTextLineHeight());
                ImGui::EndChild();
                DataEditingAddr = DataPreviewAddr = GotoAddr;
                DataEditingTakeFocus = true;
            }
            GotoAddr = (size_t)-1;
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r8, %r15
movq %rcx, %r13
movq %rsi, %r12
movq %rdi, %rbx
callq 0x44587
movq %rax, -0x50(%rbp)
leaq 0x77595(%rip), %rax     # 0xb7460
leaq 0x775a1(%rip), %r14     # 0xb7473
cmpb $0x0, 0xd(%rbx)
cmovneq %rax, %r14
leaq -0x38(%rbp), %rsi
movq $0x0, (%rsi)
leaq 0x7759a(%rip), %rdi     # 0xb7486
callq 0x93128
testb %al, %al
je 0x3ff03
leaq 0x7a38d(%rip), %rdi     # 0xba289
xorl %esi, %esi
callq 0x57da5
leaq 0x7a37f(%rip), %rdi     # 0xba289
xorl %esi, %esi
callq 0x58541
testb %al, %al
je 0x3ffd8
movq %r13, -0x30(%rbp)
movss 0x770d7(%rip), %xmm0    # 0xb6ffc
callq 0x56dd7
leaq 0x4(%rbx), %r13
leaq 0x77559(%rip), %rdi     # 0xb748e
leaq 0x77559(%rip), %r8      # 0xb7495
movss 0x770bc(%rip), %xmm0    # 0xb7000
movq %r13, %rsi
movl $0x4, %edx
movl $0x20, %ecx
xorl %r9d, %r9d
callq 0x9844e
testb %al, %al
je 0x3ff6f
movb $0x1, 0x38(%rbx)
cmpl $0x0, 0x4(%rbx)
jg 0x3ff6f
movl $0x1, (%r13)
leaq 0xd(%rbx), %r13
callq 0x571b8
leaq 0x9(%rbx), %rsi
leaq 0x7751a(%rip), %rdi     # 0xb749d
callq 0x9450c
leaq 0xa(%rbx), %rsi
leaq 0x7751c(%rip), %rdi     # 0xb74af
callq 0x9450c
leaq 0xb(%rbx), %rsi
leaq 0x77517(%rip), %rdi     # 0xb74ba
callq 0x9450c
testb %al, %al
je 0x3ffb0
movb $0x1, 0x38(%rbx)
leaq 0xc(%rbx), %rsi
leaq 0x7750a(%rip), %rdi     # 0xb74c5
callq 0x9450c
leaq 0x7750e(%rip), %rdi     # 0xb74d5
movq %r13, %rsi
callq 0x9450c
callq 0x5847b
movq -0x30(%rbp), %r13
movss 0x76ff0(%rip), %xmm1    # 0xb6fd0
xorps %xmm0, %xmm0
callq 0x569e1
movl (%r12), %ecx
leaq (%r15,%r13), %r8
decq %r8
movq %r14, %rdi
movl %ecx, %esi
movq %r15, %rdx
xorl %eax, %eax
callq 0x92024
xorps %xmm0, %xmm0
movss 0x76fc3(%rip), %xmm1    # 0xb6fd0
callq 0x569e1
movl (%r12), %eax
incl %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
movq -0x50(%rbp), %rax
movss 0x38(%rax), %xmm1
addss %xmm1, %xmm1
mulss 0x8(%r12), %xmm0
addss %xmm1, %xmm0
callq 0x56dd7
leaq 0x71(%rbx), %r14
leaq 0x7749c(%rip), %rdi     # 0xb74e3
movl $0x20, %edx
movq %r14, %rsi
movl $0x22, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x9cdd6
testb %al, %al
je 0x40097
leaq 0x77480(%rip), %rsi     # 0xb74ea
leaq -0x38(%rbp), %rdx
movq %r14, %rdi
xorl %eax, %eax
callq 0xc0c0
cmpl $0x1, %eax
jne 0x40097
movq -0x38(%rbp), %rax
subq %r15, %rax
movq %rax, 0x98(%rbx)
pcmpeqd %xmm0, %xmm0
movdqu %xmm0, 0xa0(%rbx)
callq 0x571b8
movq 0x98(%rbx), %rax
cmpq $-0x1, %rax
je 0x40159
cmpq %r13, %rax
jae 0x4014e
leaq -0x38(%rbp), %rsi
movq $0x0, (%rsi)
leaq 0x77256(%rip), %rdi     # 0xb731e
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x53078
callq 0x56cfe
shufps $0x55, %xmm0, %xmm0     # xmm0 = xmm0[1,1,1,1]
movaps %xmm0, -0x50(%rbp)
movq 0x98(%rbx), %rax
movslq 0x4(%rbx), %rcx
xorl %edx, %edx
divq %rcx
testq %rax, %rax
js 0x400fd
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x40115
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
movss %xmm0, -0x30(%rbp)
callq 0x573d2
mulss -0x30(%rbp), %xmm0
addss -0x50(%rbp), %xmm0
movss 0x76ed3(%rip), %xmm1    # 0xb7004
callq 0x57af6
callq 0x53104
movq 0x98(%rbx), %rax
movq %rax, 0x40(%rbx)
movq %rax, 0x48(%rbx)
movb $0x1, 0x50(%rbx)
movq $-0x1, 0x98(%rbx)
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq