Subversion Repositories Kolibri OS

Rev

Rev 9472 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; END
  2. ; KolibriOS Team 2005-2021
  3.  
  4. use32         ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à 
  5. org 0x0       ;  ¤à¥á æ¨ï á ­ã«ï
  6.  
  7. db 'MENUET01' ; 8-¡ ©â­ë© ¨¤¥­â¨ä¨ª â®à MenuetOS
  8. dd 0x01       ; ¢¥àá¨ï § £®«®¢ª  (¢á¥£¤  1)
  9. dd START      ;  ¤à¥á ¯¥à¢®© ª®¬ ­¤ë
  10. dd IM_END     ; à §¬¥à ¯à®£à ¬¬ë
  11. dd I_END      ; ª®«¨ç¥á⢮ ¯ ¬ïâ¨
  12. dd stacktop   ;  ¤à¥á ¢¥à設ë á⥪ 
  13. dd 0x0        ;  ¤à¥á ¡ãä¥à  ¤«ï ¯ à ¬¥â஢
  14. dd 0x0
  15.  
  16. include 'lang.inc'
  17. include '../../../macros.inc'
  18. include '../../../proc32.inc'
  19. include '../../../dll.inc'
  20. include '../../../KOSfuncs.inc'
  21. include '../../../gui_patterns.inc'
  22. include '../../../string.inc'
  23.  
  24. START:
  25.     mcall SF_SYS_MISC, SSF_HEAP_INIT
  26.     mcall SF_SYS_MISC, SSF_MEM_OPEN, checkbox_sharedname
  27.     mov [checkbox_img], eax
  28.  
  29.     stdcall dll.Load,importLib
  30.     or      eax, eax
  31.     jnz     redraw
  32.  
  33.     invoke ini_get_int,ini_file,asettings,aautosave,0
  34.     mov   [autosave],eax
  35. redraw:
  36.     call  draw_window
  37. still:
  38.     mcall SF_WAIT_EVENT        ;wait here for event
  39.     dec   eax
  40.     jz    redraw
  41.     dec   eax
  42.     jz    key
  43.     dec   eax
  44.     jz    button
  45.     jmp   still
  46.  
  47. key:
  48.     mcall SF_GET_KEY        ;get key code
  49.     mov   al,ah
  50.      cmp  al,13
  51.      je   restart
  52.      cmp  al,19
  53.      je   checkbox
  54.      cmp  al,180
  55.      je   restart_kernel
  56.      cmp  al,181
  57.      je   power_off
  58.      cmp  al,27
  59.      jne  still
  60.  
  61. close:
  62.     mcall SF_TERMINATE_PROCESS
  63.  
  64. button:
  65.     mcall SF_GET_BUTTON                     ;get pressed button id
  66.     xchg  al,ah
  67.     dec   eax
  68.     jz    close
  69.     dec   eax
  70.     jz    restart_kernel
  71.     dec   eax
  72.     jz    restart
  73.     dec   eax
  74.     jnz   checkbox
  75.  
  76. power_off:
  77.     push  2
  78.     jmp   mcall_and_close
  79.  
  80. restart:
  81.     push  3
  82.     jmp   mcall_and_close
  83.  
  84. restart_kernel:
  85.     push  4
  86.  
  87. mcall_and_close:
  88.     invoke ini_set_int,ini_file,asettings,aautosave,[autosave]
  89.     cmp   [autosave],1
  90.     jne   no_save
  91.  
  92.     mcall SF_DRAW_TEXT,<55,108>,0x90FF990A,TEXT_SAVING
  93.  
  94.     mcall SF_FILE,rdsave
  95.     test  eax,eax
  96.     js    no_save
  97.     mov   ecx,eax
  98.     mcall SF_SYSTEM,SSF_GET_THREAD_SLOT
  99.     mov   ecx,eax
  100. @@:
  101.     push ecx
  102.     mcall SF_WAIT_EVENT_TIMEOUT,100
  103.     dec   eax
  104.     jnz   no_red
  105.     call  draw_window
  106. no_red:
  107.     pop   ecx
  108.     mcall SF_THREAD_INFO,proc_info
  109.     cmp   [proc_info+50],9
  110.     je    no_save
  111.     jmp   @b
  112. no_save:
  113.     pop   ecx
  114.     mcall SF_SYSTEM,SSF_SHUTDOWN
  115.     mcall SF_TERMINATE_PROCESS
  116. ret
  117.  
  118. checkbox:
  119.     cmp   [autosave],1
  120.     je    .1
  121.     mov   [autosave],1
  122.     jmp   .draw
  123. .1:
  124.     mov   [autosave],0
  125. .draw:
  126.     call  draw_checkbox_flag
  127.     jmp   still
  128.  
  129. draw_window:
  130.     mcall SF_REDRAW,SSF_BEGIN_DRAW
  131.    
  132.     mcall SF_GET_SCREEN_SIZE
  133.     movzx ecx,ax
  134.     shr   eax,17
  135.     shl   eax,16
  136.     lea   ebx,[eax-(WIN_W/2) shl 16+WIN_W-1]
  137.     shr   ecx,1
  138.     shl   ecx,16
  139.     lea   ecx,[ecx-(WIN_H/2) shl 16+WIN_H-1]
  140.  
  141.     xor   eax,eax
  142.     mov   edx, 0x41000000
  143.     mcall ;define and draw window
  144.    
  145.     DrawWideRectangle 0, 0, WIN_W, WIN_H, 2, 0xA3A7AA
  146.     mcall SF_DRAW_RECT, <2,WIN_W-4>, <2,WIN_H-BOT_PANEL_H-2>, 0x202020
  147.     mcall SF_DRAW_RECT, <2,WIN_W-4>, <WIN_H-BOT_PANEL_H-2,BOT_PANEL_H>, 0x4B4B4B
  148.    
  149.     mcall SF_DRAW_TEXT, <30,21>, 0x91FFFfff, TEXT_WTITLE
  150.     mcall SF_DRAW_TEXT, <55,70>, 0x90FFFfff, TEXT_RDSAVE1
  151.     mcall SF_DRAW_TEXT, <55,86>, 0x90FFFfff, TEXT_RDSAVE2
  152.     mcall SF_DRAW_TEXT, <WIN_W-23,5>, 0x81FFFfff, TEXT_CANCEL
  153.    
  154.     mcall SF_DEFINE_BUTTON, <WIN_W-35,32>, <2,22>, CANCEL_BUTTON_ID
  155.     mcall SF_DEFINE_BUTTON, <32,14>, <70,14>, CHECKBOX_BUTTON_ID
  156.     mcall SF_DEFINE_BUTTON, <47,WIN_W-47>, <68,34>, CHECKBOX_BUTTON_ID+BT_NOFRAME
  157.     DrawRectangle3D 32, 70, 14, 14, 0x606060, 0xAFAFAF
  158.     call draw_checkbox_flag
  159.  
  160.     stdcall EndButton,  20, 0x4E91C5, HOME_BUTTON_ID,     TEXT_KERNEL, TEXT_HOME
  161.     stdcall EndButton, 160, 0x41C166, REBOOT_BUTTON_ID,   TEXT_REBOOT, TEXT_ENTER
  162.     stdcall EndButton, 300, 0xC75C54, POWEROFF_BUTTON_ID, TEXT_OFF,    TEXT_END
  163.  
  164.     mcall SF_REDRAW,SSF_END_DRAW
  165.     ret
  166.  
  167. proc EndButton x, bgcol, id, but_text, hotkey_text
  168.     BUTY = WIN_H-60
  169.     BUTW = 116
  170.     mov ebx,[x]
  171.     sub ebx,3
  172.     mcall SF_DRAW_RECT, <ebx,BUTW+7>, <BUTY-3,43+6>, 0x202020
  173.     mcall SF_DEFINE_BUTTON, <[x],BUTW>, <BUTY,43-1>, [id], [bgcol]
  174.     ; -strlen(but_text)*8 + BUTW / 2 + x, BUTY+8
  175.     stdcall string.length, [but_text]
  176.     neg  eax
  177.     lea  ebx,[eax*4+BUTW/2]
  178.     add  ebx,[x]
  179.     mcall SF_DRAW_TEXT, <ebx,BUTY+8>, 0x90FFFfff, [but_text]
  180.     add  ebx,1 shl 16
  181.     mcall
  182.     stdcall string.length, [hotkey_text]
  183.     neg  eax
  184.     lea  ebx,[eax*3+BUTW/2]
  185.     add  ebx,[x]
  186.     shl  ebx,16
  187.     add  ebx,BUTY+26
  188.     mcall SF_DRAW_TEXT, , 0x80FFFfff, [hotkey_text]
  189.     ret
  190. endp
  191.  
  192. draw_checkbox_flag:
  193.     cmp [autosave],0
  194.     je  .flag_unset
  195.     cmp [checkbox_img],0
  196.     je  .flag_set_but_no_checkbox_img
  197. .flag_set:
  198.     mcall SF_PUT_IMAGE, [checkbox_img], <13,13>, <33,71>
  199.     ret
  200. .flag_set_but_no_checkbox_img:
  201.     mcall SF_DRAW_RECT, <33,13>, <71,13>, 0xffffff
  202.     mcall SF_DRAW_RECT, <34,11>, <72,11>, 0x58C33C
  203.     ret
  204. .flag_unset:
  205.     mcall SF_DRAW_RECT, <33,13>, <71,13>, 0xFFFfff
  206.     ret
  207. ;---------------------------------------------------------------------
  208. include 'data.inc'
  209. ;---------------------------------------------------------------------
  210. IM_END:
  211. ;---------------------------------------------------------------------
  212. align 4
  213. proc_info  rb 1024
  214. autosave rd 1
  215. ;---------------------------------------------------------------------
  216. library_path rb 4096
  217. ;---------------------------------------------------------------------
  218. align 32
  219.     rb 4096
  220. stacktop:
  221. I_END:    ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë