Subversion Repositories Kolibri OS

Rev

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