;
; END
;
; <diamond> note that 'mov al,xx' is shorter than 'mov eax,xx'
;           and if we know that high 24 bits of eax are zero, we can use 1st form
;           the same about ebx,ecx,edx

include "lang.inc"
include "macros.inc"

meos_app_start
code

do_draw:

    mov  eax,48
    mov  ebx,3
    mov  ecx,sc
    mov  edx,sizeof.system_colors
    int  0x40

    mov  al,12 		   ; eax=12 - tell os about redraw start
    mov  bl,1
    int  0x40

    mov  al,14 		   ; eax=14 - get screen max x & max y
    int  0x40

    movzx ecx,ax

    shr  eax,17
;    sub  eax,110
    shl  eax,16
;    mov  ebx,eax
;    add  ebx,220
    lea  ebx,[eax-110*10000h+220]

    shr  ecx,1
;    sub  ecx,50
    shl  ecx,16
;    add  ecx,100
    sub  ecx,50*10000h - 100

    mov  eax,0			   ; define and draw window
    mov  edx,[sc.work_button]
    mov  esi,edx ;[sc.work_button]
    xor edi,edi
    int  0x40

   xor edx,edx
   mov al,13
   mcall ,14 shl 16+90,25 shl 16+27
   push ebx
   mcall ,117 shl 16+90,
   xchg ebx,[esp]
   mcall ,,59 shl 16+27
   pop  ebx
   mcall

   mov al,8
   inc edx
   mcall ,15 shl 16+87,26 shl 16+24,,0xdd7700
   inc edx
   mcall ,118 shl 16+87,,,0xbbbb   ;cccc
   inc edx
   mcall ,15 shl 16+87,60 shl 16+24,,0xbb00
   inc edx
   mcall ,118 shl 16+87,,,0xbbbbbb ;cccccc

    mov  al,4			   ; 0x00000004 = write text
    mov  ebx,75*65536+10
    mov  ecx,[sc.work_button_text] ; 8b window nro - RR GG BB color
    or	 ecx,0x10000000
    mov  edx,label1		   ; pointer to text beginning
    mov  esi,label1_len 	   ; text length
    int  0x40

    mov  ecx,0x10ffffff
    mov  ebx,25*65536+30
    mov  edx,label2		   ; pointer to text beginning
    mov  esi,label2_len 	   ; text length
    int  0x40

    mov  ebx,20*65536+64
    mov  edx,label3		   ; pointer to text beginning
    mov  esi,label3_len 	   ; text length
    int  0x40

    mov  ecx,0xffffff
    mov  ebx,45*65536+41
    mov  edx,label4		   ; pointer to text beginning
    mov  esi,label4_len 	   ; text length
    int  0x40

    mov  ebx,40*65536+75
    mov  edx,label5		   ; pointer to text beginning
    mov  esi,label5_len 	   ; text length
    int  0x40

    mov  al,12 		   ; tell os about redraw end
    mov  ebx,2
    int  0x40

still:

    mov  eax,10 		; wait here for event
    int  0x40

    dec  eax
    jz   do_draw
    dec  eax
    jnz  button
  key:
    mov  al,2	; now eax=2 - get key code
    int  40h
    mov  al,ah
     cmp  al,13
     jz   restart
     cmp  al,27
     jz   close_1
     cmp  al,180
     jz   restart_kernel
     cmp  al,181
     jz   power_off
     jmp  still

  button:
    mov  al,17	; now eax=17 - get pressed button id
    int  0x40
    xchg al,ah
    dec  eax
    jz   power_off
    dec  eax
    jz   restart_kernel
    dec  eax
    jz   restart
; we have only one button left, this is close button
;    dec  eax
;    jnz  still
close_1:
    or   eax,-1
    int  40h

 power_off:
    push 2
    jmp  mcall_and_close

 restart:
    push 3
    jmp  mcall_and_close

  restart_kernel:
    push 4
mcall_and_close:
    pop  ecx
    mcall 18,9
    jmp  close_1

data

if lang eq ru

  label1:
      db   '��� �����:'
  label1_len = $ - label1

  label2:
      db   '���������         ����'
  label2_len = $ - label2

  label3:
      db   '����������       ������'
  label3_len = $ - label3

  label4:
      db   '(End)            (Home)'
  label4_len = $ - label4

  label5:
      db   '(Enter)           (Esc)'
  label5_len = $ - label5

else

  label1:
      db   ' SELECT:'
  label1_len = $ - label1

  label2:
      db   'POWER OFF        KERNEL'
  label2_len = $ - label2

  label3:
      db   '  RESTART         CANCEL'
  label3_len = $ - label3

  label4:
      db   '(End)            (Home)'
  label4_len = $ - label4

  label5:
      db   '(Enter)           (Esc)'
  label5_len = $ - label5  

end if


udata
  sc  system_colors

meos_app_end