Subversion Repositories Kolibri OS

Rev

Rev 274 | Rev 341 | 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]
  46.     mov  esi,edx
  47.     mov  edi,edx
  48.     int  0x40
  49.  
  50.    mov edx,0x444444
  51.    mov al,13
  52.    mcall ,18 shl 16+90,29 shl 16+27
  53.    push ebx
  54.    mcall ,121 shl 16+90,
  55.    xchg ebx,[esp]
  56.    mcall ,,63 shl 16+27
  57.    pop  ebx
  58.    mcall
  59.  
  60.    xor edx,edx
  61.    mov al,8
  62.    inc edx
  63.    mcall ,15 shl 16+87,26 shl 16+24,,0xbb0055
  64.    inc edx
  65.    mcall ,118 shl 16+87,,,0xaaaa   ;cccc
  66.    inc edx
  67.    mcall ,15 shl 16+87,60 shl 16+24,,0x9900
  68.    inc edx
  69.    mcall ,118 shl 16+87,,,0xaaaaaa ;cccccc
  70.  
  71.     mov  al,4                      ; 0x00000004 = write text
  72.     mov  ebx,75*65536+10
  73.     mov  ecx,[sc.work_text] ; 8b window nro - RR GG BB color
  74.     or   ecx,0x10000000
  75.     mov  edx,label1                ; pointer to text beginning
  76.     mov  esi,label1_len            ; text length
  77.     int  0x40
  78.  
  79.     mov  ecx,0xeeeeee            ; 8b window nro - RR GG BB color
  80.     or   ecx,0x10000000
  81.     mov  ebx,25*65536+30
  82.     mov  edx,label2                ; pointer to text beginning
  83.     mov  esi,label2_len            ; text length
  84.     int  0x40
  85.  
  86.     mov  ebx,20*65536+64
  87.     mov  edx,label3                ; pointer to text beginning
  88.     mov  esi,label3_len            ; text length
  89.     int  0x40
  90.  
  91.     mov  ebx,45*65536+41
  92.     mov  edx,label4                ; pointer to text beginning
  93.     mov  esi,label4_len            ; text length
  94.     int  0x40
  95.  
  96.     mov  ebx,40*65536+75
  97.     mov  edx,label5                ; pointer to text beginning
  98.     mov  esi,label5_len            ; text length
  99.     int  0x40
  100.  
  101.     mov  al,12             ; tell os about redraw end
  102.     mov  ebx,2
  103.     int  0x40
  104.  
  105. still:
  106.  
  107.     mov  eax,10                 ; wait here for event
  108.     int  0x40
  109.  
  110.     dec  eax
  111.     jz   do_draw
  112.     dec  eax
  113.     jnz  button
  114.   key:
  115.     mov  al,2   ; now eax=2 - get key code
  116.     int  40h
  117.     mov  al,ah
  118.      cmp  al,13
  119.      jz   restart
  120.      cmp  al,27
  121.      jz   close_1
  122.      cmp  al,180
  123.      jz   restart_kernel
  124.      cmp  al,181
  125.      jz   power_off
  126.      jmp  still
  127.  
  128.   button:
  129.     mov  al,17  ; now eax=17 - get pressed button id
  130.     int  0x40
  131.     xchg al,ah
  132.     dec  eax
  133.     jz   power_off
  134.     dec  eax
  135.     jz   restart_kernel
  136.     dec  eax
  137.     jz   restart
  138. ; we have only one button left, this is close button
  139. ;    dec  eax
  140. ;    jnz  still
  141. close_1:
  142.     or   eax,-1
  143.     int  40h
  144.  
  145.  power_off:
  146.     push 2
  147.     jmp  mcall_and_close
  148.  
  149.  restart:
  150.     push 3
  151.     jmp  mcall_and_close
  152.  
  153.   restart_kernel:
  154.     push 4
  155. mcall_and_close:
  156.     pop  ecx
  157.     mcall 18,9
  158.     jmp  close_1
  159.  
  160. data
  161.  
  162. if lang eq ru
  163.  
  164.   label1:
  165.       db   '‚€˜ ‚›Ž:'
  166.   label1_len = $ - label1
  167.  
  168.   label2:
  169.       db   '‚›Š‹ž—ˆ’œ         Ÿ„Ž'
  170.   label2_len = $ - label2
  171.  
  172.   label3:
  173.       db   '……‡€“‘Š       Ž’Œ…€'
  174.   label3_len = $ - label3
  175.  
  176. else if lang eq en
  177.  
  178.   label1:
  179.       db   ' SELECT:'
  180.   label1_len = $ - label1
  181.  
  182.   label2:
  183.       db   'POWER OFF        KERNEL'
  184.   label2_len = $ - label2
  185.  
  186.   label3:
  187.       db   '  RESTART         CANCEL'
  188.   label3_len = $ - label3
  189.  
  190. else if lang eq et
  191.  
  192.   label1:
  193.       db   '  VALI:'
  194.   label1_len = $ - label1
  195.  
  196.   label2:
  197.       db   'LÜLITA VÄLJA     KERNEL'
  198.   label2_len = $ - label2
  199.  
  200.   label3:
  201.       db   '  RESTART         TÜHISTA'
  202.   label3_len = $ - label3
  203.  
  204. else
  205.  
  206.   label1:
  207.       db   'WAEHLEN:'
  208.   label1_len = $ - label1
  209.  
  210.   label2:
  211.       db   ' BEENDEN         KERNEL'
  212.   label2_len = $ - label2
  213.  
  214.   label3:
  215.       db   '  NEUSTART     ABBRECHEN'
  216.   label3_len = $ - label3
  217.  
  218. end if
  219.  
  220.   label4:
  221.       db   '(End)           (Home)'
  222.   label4_len = $ - label4
  223.  
  224.   label5:
  225.       db   '(Enter)          (Esc)'
  226.   label5_len = $ - label5  
  227.  
  228.  
  229. udata
  230.   sc  system_colors
  231.  
  232. meos_app_end
  233.