;;===First_menu_mode===========================================================================================================

First_menu:
      mcall     40,111b                         ; set events: standart
    mov  [is_new_record],   0
      call      Show_cursor

    mov  [score],   0
      call      Set_first_level_of_play_mode

  .redraw:
      mcall     12,1
    mov  ebx, [wp_x]
    shl  ebx, 16
    add  ebx, dword[window_width]
    mov  ecx, [wp_y]
    shl  ecx, 16
    add  ecx, dword[window_height]
      mcall     0, , ,[window_style], ,window_title

      call      Draw_decorations
      call      Draw_first_menu_picture
      call      Draw_menu_strings
      call      Draw_buttons

      mcall     12,2

  .still:
      mcall     10                              ; wait for event
                                                ; ok, what an event?
    dec  al                                     ; has the window been moved or resized?
     jz  .redraw                                ; 
    dec  al                                     ; was a key pressed?
     jz  .key                                   ; 


  .button:                                      ; a button was pressed
      mcall     17                              ; get button number
    shr  eax, 8                                 ; we should do it to get the real button code

    cmp  eax, 1                                 ; is it close button?
     je  Save_do_smth_else_and_exit             ; if so, jump to quit...
    cmp  eax, 0xD0                              ; 'play' button?
     je  Level_begin
    cmp  eax, 0xD1                              ; 'exit' button?
     je  Save_do_smth_else_and_exit
    cmp  eax, 0xD2                              ; change play mode button?
     jne @f
      call      Change_play_mode
      call      Delete_buttons
      call      Draw_buttons
     jmp .still                                 ; jump to wait for another event
  @@:
    cmp  eax, 0xD3                              ; '+INC+' button?
     jne @f
      call      Increase_geometry
     jmp .redraw                                ; jump to wait for another event
  @@:
    cmp  eax, 0xD4                              ; '-dec-' button?
     jne @f
      call      Decrease_geometry
     jmp .redraw                                ; jump to wait for another event
  @@:

     jmp .still                                 ; jump to wait for another event


  .key:                                         ; a key was pressed
      mcall     2                               ; get keycode

    cmp  ah, 0x1B                               ; Escape
     je  Save_do_smth_else_and_exit
    cmp  ah, 0x0D                               ; Enter
     je  Level_begin
    cmp  ah, 0x20                               ; Space
     jne @f
      call      Change_play_mode
      call      Delete_buttons
      call      Draw_buttons
     jmp .still                                 ; jump to wait for another event
  @@:
     jmp .still                                 ; jump to wait for another event

;;---First_menu_mode-----------------------------------------------------------------------------------------------------------


;;===Some_functions============================================================================================================

Draw_first_menu_picture:
    ;;===Draw_first_menu_picture================================================================================================

    mov  ax,  2*0x100+24
    mov  cx,  1*0x100+5
    mov  edx, [snake_picture_color]
    mov  esi, picture_first_menu_snake
      call      Draw_picture

    mov  ax,  3*0x100+11
    mov  cx,  8*0x100+5
    mov  edx, [version_picture_color]
    mov  esi, picture_first_menu_version
      call      Draw_picture

    ret
            
    ;;---Draw_first_menu_picture------------------------------------------------------------------------------------------------


Draw_menu_strings:
    ;;===Make_menu_strings======================================================================================================

    mov  ebx, [window_width]
    shr  ebx, 1
    sub  ebx, press_to_start.size*3+6
    shl  ebx, 16
    add  ebx, dword[bottom_middle_strings]
      mcall     4, ,[navigation_strings_color],press_to_start
    mov  ebx, [window_width]
    shr  ebx, 1
    sub  ebx, press_esc_to_exit.size*3+6
    shl  ebx, 16
    add  ebx, [top_strings]
      mcall     , ,[navigation_strings_color],press_esc_to_exit
;      mcall     ,406*65536+TOP_STRINGS,[navigation_strings_color],press_F2_to_options

    ret

    ;;---Make_menu_strings------------------------------------------------------------------------------------------------------


Draw_buttons:
    ;;===Draw_buttons===========================================================================================================

    mov  ebx, [button_x_left]
    shl  ebx, 16
    mov  bx,  word[button_width_short]
    mov  ecx, [button_y_top]
    shl  ecx, 16
    add  cx,  word[button_height]
      mcall     8, , ,0x000000D0,[button_color]                             ; top left button
    shr  ecx, 16
    mov  bx,  cx
    mov  edx, [button_height]
    shr  edx, 1
    sub  edx, 3                                                             ; ~half of font height
    add  bx,  dx
    ror  ebx, 16
    mov  edx, [button_width_short]
    shr  edx, 1
    sub  edx, string_button_play.size*3
    add  bx,  dx
    ror  ebx, 16
      mcall     4, ,[button_text_color],string_button_play

    mov  ebx, [button_x_right]
    shl  ebx, 16
    mov  bx,  word[button_width_short]
    mov  ecx, [button_y_top]
    shl  ecx, 16
    add  cx,  word[button_height]
      mcall     8, , ,0x000000D1,                                           ; top right button
    shr  ecx, 16
    mov  bx,  cx
    mov  edx, [button_height]
    shr  edx, 1
    sub  edx, 3                                                             ; ~half of font height
    add  bx,  dx
    ror  ebx, 16
    mov  edx, [button_width_short]
    shr  edx, 1
    sub  edx, string_button_exit.size*3
    add  bx,  dx
    ror  ebx, 16
      mcall     4, ,[button_text_color],string_button_exit

    mov  ebx, [button_x_left]
    shl  ebx, 16
    mov  bx,  word[button_width_long]
    mov  ecx, [button_y_middle]
    shl  ecx, 16
    add  cx,  word[button_height]
      mcall     8, , ,0x000000D2,                                           ; middle button
    shr  ecx, 16
    mov  bx,  cx
    mov  edi, [button_height]
    shr  edi, 1
    sub  edi, 3                                                             ; ~half of font height
    add  bx,  di
    ror  ebx, 16
    mov  edi, [button_width_long]
    shr  edi, 1
    cmp  [play_mode],   0
     jne @f
    sub  edi, string_button_pm_classic.size*3
    mov  edx, string_button_pm_classic
     jmp .skip
  @@:
    sub  edi, string_button_pm_levels.size*3
    mov  edx, string_button_pm_levels
  .skip:
    add  bx,  di
    ror  ebx, 16
      mcall     4, ,[button_text_color],

    mov  ebx, [button_x_left]
    shl  ebx, 16
    mov  bx,  word[button_width_short]
    mov  ecx, [button_y_bottom]
    shl  ecx, 16
    add  cx,  word[button_height]
      mcall     8, , ,0x000000D3,                                           ; bottom left button
    shr  ecx, 16
    mov  bx,  cx
    mov  edx, [button_height]
    shr  edx, 1
    sub  edx, 3                                                             ; ~half of font height
    add  bx,  dx
    ror  ebx, 16
    mov  edx, [button_width_short]
    shr  edx, 1
    sub  edx, string_button_inc.size*3
    add  bx,  dx
    ror  ebx, 16
      mcall     4, ,[button_text_color],string_button_inc

    mov  ebx, [button_x_right]
    shl  ebx, 16
    mov  bx,  word[button_width_short]
    mov  ecx, [button_y_bottom]
    shl  ecx, 16
    add  cx,  word[button_height]
      mcall     8, , ,0x000000D4,
    shr  ecx, 16
    mov  bx,  cx
    mov  edx, [button_height]
    shr  edx, 1
    sub  edx, 3                                                             ; ~half of font height
    add  bx,  dx
    ror  ebx, 16
    mov  edx, [button_width_short]
    shr  edx, 1
    sub  edx, string_button_dec.size*3
    add  bx,  dx
    ror  ebx, 16
      mcall     4, ,[button_text_color],string_button_dec

    ret

    ;;---Draw_buttons----------------------------------------------------------------------------------------------------------


Delete_buttons:
    ;;===Delete_buttons========================================================================================================

      mcall     8,,,0x800000D0
      mcall      ,,,0x800000D1
      mcall      ,,,0x800000D2
      mcall      ,,,0x800000D3
      mcall      ,,,0x800000D4

    ret

    ;;---Delete_buttons--------------------------------------------------------------------------------------------------------


Change_play_mode:
    ;;===Change_play_mode======================================================================================================

    cmp  [play_mode],   LEVELS_MODE
     jne @f
    mov  [play_mode],   CLASSIC_MODE
    mov  [cur_level_number],   0
    ret
  @@:
    inc  [play_mode]

      call      Set_first_level_of_play_mode

    ret

    ;;---Change_play_mode------------------------------------------------------------------------------------------------------


Set_first_level_of_play_mode:
    ;;===Set_first_level_of_play_mode==========================================================================================

    cmp  [play_mode],   CLASSIC_MODE
     jne @f
    mov  [cur_level_number],   CLASSIC_MODE_FIRST_LEVEL
  @@:
    cmp  [play_mode],   LEVELS_MODE
     jne @f
    mov  [cur_level_number],   LEVELS_MODE_FIRST_LEVEL
  @@:

    ret

    ;;---Set_first_level_of_play_mode-------------------------------------------------------------------------------------------

;;---Some_functions-------------------------------------------------------------------------------------------------------------