// File: /workspace/github_cpp_makefile_star2_O2/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 0x35cfd
movq %rax, -0x50(%rbp)
leaq 0x69e2d(%rip), %rax     # 0x9c474
leaq 0x69e39(%rip), %r14     # 0x9c487
cmpb $0x0, 0xd(%rbx)
cmovneq %rax, %r14
leaq -0x38(%rbp), %rsi
andq $0x0, (%rsi)
leaq 0x69e35(%rip), %rdi     # 0x9c49a
callq 0x7a64b
testb %al, %al
je 0x3267c
leaq 0x6cc44(%rip), %rdi     # 0x9f2b9
xorl %esi, %esi
callq 0x446ff
leaq 0x6cc36(%rip), %rdi     # 0x9f2b9
xorl %esi, %esi
callq 0x44c84
testb %al, %al
je 0x3274d
movq %r13, -0x30(%rbp)
movss 0x69972(%rip), %xmm0    # 0x9c010
callq 0x43b8c
leaq 0x4(%rbx), %r13
leaq 0x69df4(%rip), %rdi     # 0x9c4a2
leaq 0x69df4(%rip), %r8      # 0x9c4a9
movss 0x69957(%rip), %xmm0    # 0x9c014
pushq $0x4
popq %rdx
pushq $0x20
popq %rcx
movq %r13, %rsi
xorl %r9d, %r9d
callq 0x7f7d3
testb %al, %al
je 0x326e4
movb $0x1, 0x38(%rbx)
cmpl $0x0, 0x4(%rbx)
jg 0x326e4
movl $0x1, (%r13)
leaq 0xd(%rbx), %r13
callq 0x43cbe
leaq 0x9(%rbx), %rsi
leaq 0x69db9(%rip), %rdi     # 0x9c4b1
callq 0x7bae6
leaq 0xa(%rbx), %rsi
leaq 0x69dbb(%rip), %rdi     # 0x9c4c3
callq 0x7bae6
leaq 0xb(%rbx), %rsi
leaq 0x69db6(%rip), %rdi     # 0x9c4ce
callq 0x7bae6
testb %al, %al
je 0x32725
movb $0x1, 0x38(%rbx)
leaq 0xc(%rbx), %rsi
leaq 0x69da9(%rip), %rdi     # 0x9c4d9
callq 0x7bae6
leaq 0x69dad(%rip), %rdi     # 0x9c4e9
movq %r13, %rsi
callq 0x7bae6
callq 0x44bbe
movq -0x30(%rbp), %r13
movss 0x6989b(%rip), %xmm1    # 0x9bff0
xorps %xmm0, %xmm0
callq 0x437ec
movl (%r12), %ecx
leaq (%r15,%r13), %r8
decq %r8
movq %r14, %rdi
movl %ecx, %esi
movq %r15, %rdx
xorl %eax, %eax
callq 0x795ac
xorps %xmm0, %xmm0
movss 0x6986e(%rip), %xmm1    # 0x9bff0
callq 0x437ec
movl (%r12), %eax
incl %eax
cvtsi2ss %eax, %xmm0
movq -0x50(%rbp), %rax
movss 0x38(%rax), %xmm1
addss %xmm1, %xmm1
mulss 0x8(%r12), %xmm0
addss %xmm1, %xmm0
callq 0x43b8c
leaq 0x71(%rbx), %r14
leaq 0x69d3e(%rip), %rdi     # 0x9c4f7
pushq $0x20
popq %rdx
pushq $0x22
popq %rcx
movq %r14, %rsi
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x83c1c
testb %al, %al
je 0x32805
leaq 0x69d26(%rip), %rsi     # 0x9c4fe
leaq -0x38(%rbp), %rdx
movq %r14, %rdi
xorl %eax, %eax
callq 0xc0c0
cmpl $0x1, %eax
jne 0x32805
movq -0x38(%rbp), %rax
subq %r15, %rax
movq %rax, 0x98(%rbx)
pcmpeqd %xmm0, %xmm0
movdqu %xmm0, 0xa0(%rbx)
callq 0x43cbe
movq 0x98(%rbx), %rax
cmpq $-0x1, %rax
je 0x328bb
cmpq %r13, %rax
jae 0x328b3
leaq -0x38(%rbp), %rsi
andq $0x0, (%rsi)
leaq 0x69aff(%rip), %rdi     # 0x9c332
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x40abf
callq 0x43ab3
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 0x32865
cvtsi2ss %rax, %xmm0
jmp 0x3287a
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
movss %xmm0, -0x30(%rbp)
callq 0x43e97
mulss -0x30(%rbp), %xmm0
addss -0x50(%rbp), %xmm0
movss 0x69782(%rip), %xmm1    # 0x9c018
callq 0x44472
callq 0x40b4b
movq 0x98(%rbx), %rax
movq %rax, 0x40(%rbx)
movq %rax, 0x48(%rbx)
movb $0x1, 0x50(%rbx)
orq $-0x1, 0x98(%rbx)
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq