Subversion Repositories Kolibri OS

Rev

Rev 109 | Rev 195 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;
  2. ; END
  3. ;
  4. ; <diamond> note that 'mov al,xx' is shorter than 'mov eax,xx'
  5. ;           and if we know that high 24 bits of eax are zero, we can use 1st form
  6. ;           the same about ebx,ecx,edx
  7.  
  8. include "lang.inc"
  9. include "macros.inc"
  10.  
  11. meos_app_start
  12. code
  13.  
  14. do_draw:
  15.  
  16.     mov  eax,48
  17.     mov  ebx,3
  18.     mov  ecx,sc
  19.     mov  edx,sizeof.system_colors
  20.     int  0x40
  21.  
  22.     mov  al,12             ; eax=12 - tell os about redraw start
  23.     mov  bl,1
  24.     int  0x40
  25.  
  26.     mov  al,14             ; eax=14 - get screen max x & max y
  27.     int  0x40
  28.  
  29.     movzx ecx,ax
  30.  
  31.     shr  eax,17
  32. ;    sub  eax,110
  33.     shl  eax,16
  34. ;    mov  ebx,eax
  35. ;    add  ebx,220
  36.     lea  ebx,[eax-110*10000h+220]
  37.  
  38.     shr  ecx,1
  39. ;    sub  ecx,50
  40.     shl  ecx,16
  41. ;    add  ecx,100
  42.     sub  ecx,50*10000h - 100
  43.  
  44.     mov  eax,0                     ; define and draw window
  45.     mov  edx,[sc.work_button]
  46.     mov  esi,edx ;[sc.work_button]
  47.     xor edi,edi
  48.     int  0x40
  49.  
  50.    xor edx,edx
  51.    mov al,13
  52.    mcall ,14 shl 16+90,25 shl 16+27
  53.    push ebx
  54.    mcall ,117 shl 16+90,
  55.    xchg ebx,[esp]
  56.    mcall ,,59 shl 16+27
  57.    pop  ebx
  58.    mcall
  59.  
  60.    mov al,8
  61.    inc edx
  62.    mcall ,15 shl 16+87,26 shl 16+24,,0xdd7700
  63.    inc edx
  64.    mcall ,118 shl 16+87,,,0xbbbb   ;cccc
  65.    inc edx
  66.    mcall ,15 shl 16+87,60 shl 16+24,,0xbb00
  67.    inc edx
  68.    mcall ,118 shl 16+87,,,0xbbbbbb ;cccccc
  69.  
  70.     mov  al,4                      ; 0x00000004 = write text
  71.     mov  ebx,75*65536+10
  72.     mov  ecx,[sc.work_button_text] ; 8b window nro - RR GG BB color
  73.     or   ecx,0x10000000
  74.     mov  edx,label1                ; pointer to text beginning
  75.     mov  esi,label1_len            ; text length
  76.     int  0x40
  77.  
  78.     mov  ecx,0x10ffffff
  79.     mov  ebx,25*65536+30
  80.     mov  edx,label2                ; pointer to text beginning
  81.     mov  esi,label2_len            ; text length
  82.     int  0x40
  83.  
  84.     mov  ebx,20*65536+64
  85.     mov  edx,label3                ; pointer to text beginning
  86.     mov  esi,label3_len            ; text length
  87.     int  0x40
  88.  
  89.     mov  ecx,0xffffff
  90.     mov  ebx,45*65536+41
  91.     mov  edx,label4                ; pointer to text beginning
  92.     mov  esi,label4_len            ; text length
  93.     int  0x40
  94.  
  95.     mov  ebx,40*65536+75
  96.     mov  edx,label5                ; pointer to text beginning
  97.     mov  esi,label5_len            ; text length
  98.     int  0x40
  99.  
  100.     mov  al,12             ; tell os about redraw end
  101.     mov  ebx,2
  102.     int  0x40
  103.  
  104. still:
  105.  
  106.     mov  eax,10                 ; wait here for event
  107.     int  0x40
  108.  
  109.     dec  eax
  110.     jz   do_draw
  111.     dec  eax
  112.     jnz  button
  113.   key:
  114.     mov  al,2   ; now eax=2 - get key code
  115.     int  40h
  116.     mov  al,ah
  117.      cmp  al,13
  118.      jz   restart
  119.      cmp  al,27
  120.      jz   close_1
  121.      cmp  al,180
  122.      jz   restart_kernel
  123.      cmp  al,181
  124.      jz   power_off
  125.      jmp  still
  126.  
  127.   button:
  128.     mov  al,17  ; now eax=17 - get pressed button id
  129.     int  0x40
  130.     xchg al,ah
  131.     dec  eax
  132.     jz   power_off
  133.     dec  eax
  134.     jz   restart_kernel
  135.     dec  eax
  136.     jz   restart
  137. ; we have only one button left, this is close button
  138. ;    dec  eax
  139. ;    jnz  still
  140. close_1:
  141.     or   eax,-1
  142.     int  40h
  143.  
  144.  power_off:
  145.     push 2
  146.     jmp  mcall_and_close
  147.  
  148.  restart:
  149.     push 3
  150.     jmp  mcall_and_close
  151.  
  152.   restart_kernel:
  153.     push 4
  154. mcall_and_close:
  155.     pop  ecx
  156.     mcall 18,9
  157.     jmp  close_1
  158.  
  159. data
  160.  
  161. if lang eq ru
  162.  
  163.   label1:
  164.       db   '‚€˜ ‚›Ž:'
  165.   label1_len = $ - label1
  166.  
  167.   label2:
  168.       db   '‚›Š‹ž—ˆ’œ         Ÿ„Ž'
  169.   label2_len = $ - label2
  170.  
  171.   label3:
  172.       db   '……‡€“‘Š       Ž’Œ…€'
  173.   label3_len = $ - label3
  174.  
  175. else if lang eq en
  176.  
  177.   label1:
  178.       db   ' SELECT:'
  179.   label1_len = $ - label1
  180.  
  181.   label2:
  182.       db   'POWER OFF        KERNEL'
  183.   label2_len = $ - label2
  184.  
  185.   label3:
  186.       db   '  RESTART         CANCEL'
  187.   label3_len = $ - label3
  188.  
  189. else
  190.  
  191.   label1:
  192.       db   'WAEHLEN:'
  193.   label1_len = $ - label1
  194.  
  195.   label2:
  196.       db   ' BEENDEN      KERNEL'
  197.   label2_len = $ - label2
  198.  
  199.   label3:
  200.       db   '  NEUSTART     ABBRECHEN'
  201.   label3_len = $ - label3
  202.  
  203. end if
  204.  
  205.   label4:
  206.       db   '(End)            (Home)'
  207.   label4_len = $ - label4
  208.  
  209.   label5:
  210.       db   '(Enter)           (Esc)'
  211.   label5_len = $ - label5  
  212.  
  213.  
  214. udata
  215.   sc  system_colors
  216.  
  217. meos_app_end
  218.