  context_menu_start:

    mov        eax, 40
    mov        ebx, 00100111b
    int        0x40

    ;call       draw_ctx_menu

    mov        ebp, 2		; 2 часто используется.
; // Alver 26.08.2007 // {
;    xor        ecx, ecx
;    mov        edx, [ctx_menu_PID]
;  find_slot:
;    inc        ecx
;    mov        eax, 9
;    mov        ebx, process_info_buffer
;    int        0x40
;    cmp        dword [process_info_buffer + 30], edx
;    jne        find_slot
    mov        ecx, [ctx_menu_PID]
    mcall      18,21
    mov        ecx, eax
; } \\ Alver \\
    mov        eax, 18
    mov        ebx, 3
    ;mov       ecx, ecx         ; :)
    int        0x40

    call       draw_ctx_menu

  ctx_menu_still:
    mov        eax, 10
    int        0x40

    cmp        eax, ebp 	; cmp     eax, 2
    jz	       ctx_menu_key
    cmp        eax, 3
    jz	       ctx_menu_button
    cmp        eax, 6
    jz	       ctx_menu_mouse

    call       draw_ctx_menu

    jmp        ctx_menu_still

  ctx_menu_key:
    mov        eax, ebp 	; mov     eax, 2
    int        0x40

  ctx_menu_button:
    mov        eax, 17
    int        0x40
    cmp        ah, 1
; // Alver 26.08.2007 // {
;    jne        ctx_menu_still
    jne        @f
; } \\ Alver \\
    mov        eax, 18
    mov        ebx, ebp 	; mov     eax, 2
    mov        ecx, [n_slot]
; // Alver 26.08.2007 // {
    jmp        .lllxxx
@@:
    cmp        ah, 2
    jne        ctx_menu_still
    mov        eax, 18
    mov        ebx, 22
    mov        edx, [n_slot]
    xor        ecx, ecx
; \begin{diamond}[20.09.2007]
    test       byte [procinfo_for_detect+70], 2
    setnz      cl
    add        cl, cl
; \end{diamond}[20.09.2007]
  .lllxxx:
; } \\ Alver \\
    int        0x40
    jmp        ctx_menu_exit

  ctx_menu_mouse:
    mov        eax, 37
    mov        ebx, ebp 	; mov     ebx, 2
    int        0x40

    xchg       eax, ecx 	; cmp     eax, 0  Если не одна из кнопок не нажата возвращаемся
				;                 в главный цикл потока
    jecxz      ctx_menu_still

    mov        eax, 37
    xor        ebx, ebx 	; mov     ebx, 1
    inc        ebx
    int        0x40

    cmp        ax, 0		; Тут проверяем произошёл-ли клик за пределами окна контекстного
    jb	       ctx_menu_exit	; меню, если за пределами то закрываем контекстное меню
    cmp        ax, 60           ; 41
    ja	       ctx_menu_exit
    shr        eax, 16
    cmp        ax, 0
    jb	       ctx_menu_exit
    cmp        ax, 133
    ja	       ctx_menu_exit

    jmp        ctx_menu_still

  ctx_menu_exit:
    xor        eax, eax
    dec        eax		; mov        eax, -1
    int        0x40

func  draw_ctx_menu

    mov        eax, 12
    xor        ebx, ebx 	; mov        ebx, 1
    inc        ebx
    int        0x40

    xor        eax, eax 	; mov        eax, 0
    movzx      ebx, [x_coord]
    shl        ebx, 16
    add        ebx, 133
    movzx      ecx, [y_coord]
    sub        ecx, 60         ; 41
    shl        ecx, 16
    add        ecx, 60         ; 41
    mov        edx, [system_colours + 20]    ; sc.work
    mov        esi, [system_colours + 4]     ; sc.grab
    or	       esi, 0x81000000
    mov        edi, [system_colours]	     ; sc.frame
    int        0x40

    mov        eax, 8
    mov        ebx, 0 * 65536 + 133
    mov        ecx, 22 * 65536 + 16
    mov        edx, 0x40000001
    int        0x40

    mov        eax, 8
    mov        ebx, 0 * 65536 + 133
    mov        ecx, 40 * 65536 + 18
    mov        edx, 0x40000002
    int        0x40

    shr        eax, 1	; mov   eax, 4
    mov        ebx, 36 * 65536 + 7
    mov        ecx, [system_colours + 16]    ; sc.grab_text
    or	       ecx, 0x10000000

    mov        edx, ctx_menu_title

    mov        esi, ctx_menu_title_end - ctx_menu_title
    int        0x40

    add        ebx, 1 * 65536
    int        0x40

    mov        ebx, 4 * 65536 + 28
    mov        ecx, 0x80000000
    mov        edx, ctx_menu_text
; // Alver 26.08.2007 // {
    int        0x40
    add        bx, 18
    mov        edx, ctx_menu_text2
; \begin{diamond}[20.09.2007]
    test       byte [procinfo_for_detect+70], 2
    jz         @f
    mov        edx, ctx_menu_text3
@@:
; \end{diamond}[20.09.2007]
    int        0x40
; } \\ Alver \\
    mov        eax, 12
    mov        ebx, ebp 	; mov     ebx, 2
    int        0x40

    ret

endf

x_coord rw	1
y_coord rw	1
n_slot	rd	1
lsz ctx_menu_text,\
  ru, <"X Закрыть    Alt + F4",0>,\
  en, <"X Close      Alt + F4",0>,\
  et, <"X Sulge      Alt + F4",0>      ; Now correct
; // Alver 26.08.2007 // {
lsz ctx_menu_text2,\
  ru, <25," Свернуть           ",0>,\
  en, <25," Minimize           ",0>,\
; } \\ Alver \\
; \begin{diamond}[20.09.2007]
lsz ctx_menu_text3,\
  ru, <24," Восстановить       ",0>,\
  en, <24," Restore            ",0>
; \end{diamond}[20.09.2007]
ctx_menu_PID	rd	1

ctx_menu_title:
	db	'KolibriOS'
ctx_menu_title_end: