Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; Formatting Disk Utility ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  4. ; Compile with FASM
  5. ; FORMAT ver. Oct 16, 2018
  6.  
  7. ; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
  8. ; All rights reserved.
  9. ; Redistribution and use in source and binary forms, with or without modification,
  10. ; are permitted provided that the following conditions are met:
  11. ;    * Redistributions of source code must retain the above copyright notice, this
  12. ;    list of conditions and the following disclaimer.
  13. ;    * Redistributions in binary form must reproduce the above copyright  notice,
  14. ;    this list of conditions and the following disclaimer in the documentation and/or
  15. ;    other materials provided with the distribution.
  16. ;    * Neither the name of the <organization> nor the names of its contributors may
  17. ;    be used to endorse or promote products derived from this software without
  18. ;    specific prior written permission.
  19.  
  20. ; THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  21. ; INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  22. ; PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  23. ; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  24. ; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  25. ; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  26. ; --------------------------------------------------------------------------------------
  27. format binary as ""
  28.  
  29. use32
  30. org 0
  31.  
  32. db 'MENUET01'
  33. dd 1
  34. dd START
  35. dd I_END
  36. dd MEM
  37. dd STACKTOP
  38. dd 0, 0
  39.  
  40. include 'lang.inc'
  41. include '../../macros.inc'
  42. include '../../proc32.inc'
  43. include '../../dll.inc'
  44. include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;êîìïîíåíòû checkBox è editBox
  45. include '../../develop/libraries/box_lib/load_lib.mac'      ;ìàêðîñ äëÿ çàãðóçêè áèáëèîòåê
  46. @use_library
  47.  
  48. START:
  49.    mcall 48,3,sc,sizeof.system_colors ;ïîëó÷èòü ñèñòåìíûå öâåòà
  50.  
  51.    stdcall dll.Load, @IMPORT
  52.    or      eax, eax
  53.    jnz     exit
  54.  
  55.    load_libraries l_libs_start,load_lib_end ;çàãðóçêà áèáëèîòåê(è)
  56.    stdcall [OpenDialog_Init],OpenDialog_data ;ïîäãîòîâêà äèàëîãà
  57.  
  58.    mov  eax,40          ;óñòàíîâèòü ìàñêó äëÿ îæèäàåìûõ ñîáûòèé
  59.    mov  ebx,0x27        ;ñèñòåìà áóäåò ðåàãèðîâàòü òîëüêî íà ñîîáùåíèå î ïåðåðèñîâêå,íàæàòà êíîïêà, îïðåäåë¸ííàÿ ðàíåå, ñîáûòèå îò ìûøè (÷òî-òî ñëó÷èëîñü - íàæàòèå íà êíîïêó ìûøè èëè ïåðåìåùåíèå; ñáðàñûâàåòñÿ ïðè ïðî÷òåíèè)
  60.    mcall
  61.  
  62.    mov ecx,[sc.work_text]
  63.    and ecx, 0x9FFFFFFF
  64.    or  ecx,0x90000000
  65.    ;mov ecx, 0x90000000
  66.    mov dword[editLU.text_color], ecx
  67.    mov dword[editLD.text_color], ecx
  68.    mov dword[editRU.text_color], ecx
  69.    mov dword[editRD.text_color], ecx
  70.    mov dword[editMBR.text_color], ecx
  71.  
  72.    invoke init_checkbox, ch1
  73.    invoke init_checkbox, ch2
  74.  
  75.    call    draw_window             ; draw the window
  76.  
  77. event_wait:
  78.         mov     eax, 10                 ; function 10 : wait until event
  79.         mcall                           ; event type is returned in eax
  80.  
  81.         cmp     eax, 1                  ; Event redraw request ?
  82.         je      red                     ; Expl.: there has been activity on screen and
  83.                                         ; parts of the applications has to be redrawn.
  84.  
  85.         cmp     eax, 2                  ; Event key in buffer ?
  86.         je      key                     ; Expl.: User has pressed a key while the
  87.                                         ; app is at the top of the window stack.
  88.  
  89.         cmp     eax, 3                  ; Event button in buffer ?
  90.         je      button                  ; Expl.: User has pressed one of the
  91.                                         ; applications buttons.
  92.  
  93.  
  94.         invoke check_box_mouse, ch1  ;ïðîâåðêà ÷åê áîêñà
  95.         invoke check_box_mouse, ch2
  96.  
  97.         invoke  edit_box_mouse, editLU   ;ïðîâåðêà ñîáûòèé ìûøè äëÿ editBox'îâ
  98.     invoke  edit_box_mouse, editLD
  99.     invoke  edit_box_mouse, editRU
  100.     invoke  edit_box_mouse, editRD
  101.     invoke  edit_box_mouse, editMBR
  102.  
  103.         jmp     event_wait
  104.  
  105.  
  106. red:                                    ; Redraw event handler
  107.         call    draw_window             ; We call the window_draw function and
  108.         jmp     event_wait              ; jump back to event_wait
  109.  
  110. key:
  111.         mcall 2
  112.         invoke  edit_box_key, editLU
  113.         invoke  edit_box_key, editLD
  114.         invoke  edit_box_key, editRU
  115.         invoke  edit_box_key, editRD
  116.         invoke  edit_box_key, editMBR
  117.         jmp     event_wait              ; Just read the key, ignore it and jump to event_wait.
  118.  
  119. button:
  120.         mcall 17
  121.  
  122.         cmp     ah,1                    ; button id=1 ?
  123.         jne     noclose
  124. exit:
  125.         mcall -1  ;close this program
  126.  
  127. noclose:
  128.  
  129.    cmp ah, 2
  130.    jne no_format
  131.    call format_action
  132.    jmp     event_wait
  133. no_format:
  134.     cmp ah, 3
  135.    jne no_browser
  136.    call brouse_action
  137.    jmp     event_wait
  138. no_browser:
  139.         jmp     event_wait              ; This is for ignored events, useful at development
  140.  
  141. brouse_action:
  142.    call but_open_dlg
  143.    ret
  144. format_action:
  145.    ret
  146.  
  147.  
  148. delta = 50
  149. dy = 15
  150.  
  151. draw_window:
  152.    mcall  12, 1
  153.  
  154.    ;óäàëÿåì êíîïêè, åñëè åñòü
  155.    mov edx, 0x80000002
  156.    mcall 8
  157.    mov edx, 0x80000003
  158.    mcall 8
  159.  
  160.         mov     eax, 0                  ; function 0 : define and draw window
  161.         mov     ebx, 100 * 65536 + (290+delta)  ; [x start] *65536 + [x size]
  162.         mov     ecx, 100 * 65536 + (310+dy)  ; [y start] *65536 + [y size]
  163.         mov     edx, 0x14ffffff         ; color of work area RRGGBB
  164.                                         ; 0x02000000 = window type 4 (fixed size, skinned window)
  165.         mov     esi, 0x808899ff         ; color of grab bar  RRGGBB
  166.                                         ; 0x80000000 = color glide
  167.         mov     edi, title
  168.         mcall
  169.  
  170.  
  171.         mov ebx, (290+delta-Otstup-130)*65536+130
  172.         mov ecx, (270+dy)*65536+(20+3)
  173.         mov edx, 0x00000002 ;2
  174.         mov esi, 0xAABBCC ;4466AA
  175.         mcall 8
  176.  
  177.         mov ebx, (290+delta-Otstup-50-2)*65536+(50+2)
  178.         mov ecx, (210+dy)*65536+21 ;14
  179.         mov edx, 0x00000003  ;3
  180.         mov esi, 0xAABBCC ;D7D7D7 ;4466AA
  181.         mcall 8
  182.  
  183.        invoke check_box_draw, ch1  ;ðèñîâàíèå ÷åêáîêñîâ
  184.        invoke check_box_draw, ch2
  185.  
  186.        invoke  edit_box_draw, editMBR     ;ðèñîâàíèå edit box'îâ
  187.        invoke  edit_box_draw, editLU
  188.        invoke  edit_box_draw, editLD
  189.        invoke  edit_box_draw, editRU
  190.        invoke  edit_box_draw, editRD
  191.  
  192.         call draw_super_text
  193.  
  194.         mcall 12, 2
  195.         ret
  196.  
  197.  
  198.  
  199. Otstup = 30
  200.  
  201. ;öâåò 0x224466 çàìåí¸í 0x90000000 è â ôèíàëå íà 0
  202. ch1 check_box2 Otstup shl 16 + 12, (170+dy) shl 16 + 12, 6, 0xFFFFFFFF, 0xAABBCC, 0, ch_text.1, 100b ; 110b = ch_flag_en and ch_flag_middl
  203. ch2 check_box2 Otstup shl 16 + 12, (190+dy) shl 16 + 12, 6, 0xFFFFFFFF, 0xAABBCC, 0, ch_text.2, 100b
  204.  
  205. if lang eq ru  ;åñëè ÿçûê ñáîðêè ðóññêèé
  206.  
  207. title   db  "Formatting Disk Utility", 0
  208.  
  209. ch_text:        ;ñîïðîâîæäàþùèé òåêñò äëÿ ÷åê áîêñîâ
  210. .1 db '®«­®¥ ¨ ¤®«£®¥ ä®à¬ â¨à®¢ ­¨¥',0
  211. .2 db '‘®§¤ âì § £à㧮ç­ë© ¤¨áª, § ¯¨áì MBR:',0
  212.  
  213. text:
  214.   .volume db 'Œ¥âª  ⮬ :', 0
  215.   .fs     db '” ©«®¢ ï á¨á⥬ :', 0
  216.   .disk   db '…¬ª®áâì:', 0
  217.   .unit   db ' §¬¥à ª« áâ¥à :', 0
  218.   .option db ' à ¬¥âàë:', 0
  219.   .format db '”®à¬ â¨à®¢ âì', 0
  220.   .browse db 'Ž¡§®à', 0
  221.  
  222. head_f_i:
  223.         head_f_l  db '‘¨á⥬­ ï ®è¨¡ª ',0
  224.         err_message_found_lib0 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'proc_lib.obj',39,0
  225.         err_message_import0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0
  226.         err_message_found_lib1 db '¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'kmenu.obj',39,0
  227.         err_message_import1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'kmenu',39,0
  228.  
  229. else  ;èíà÷å àíãëèéñêèé òåêñò
  230.  
  231. title   db  "Formatting Disk Utility", 0
  232.  
  233. ch_text:        ;ñîïðîâîæäàþùèé òåêñò äëÿ ÷åê áîêñîâ
  234. .1 db 'Full and long disk formatting',0
  235. .2 db 'Create startup disk, write MBR:',0
  236.  
  237. text:
  238.   .volume db 'Volume Label:', 0
  239.   .fs     db 'File System:', 0
  240.   .disk   db 'Capacity:', 0
  241.   .unit   db 'Allocation unit size:', 0
  242.   .option db 'Options:', 0
  243.   .format db 'Format', 0
  244.   .browse db 'Browse', 0
  245.  
  246. head_f_i:
  247.   head_f_l  db 'System error',0
  248.   err_message_found_lib0 db 'Could not find library ',39,'proc_lib.obj',39,0
  249.   err_message_import0 db 'Error importing library ',39,'proc_lib.obj',39,0
  250.   err_message_found_lib1 db 'Could not find library ',39,'kmenu.obj',39,0
  251.   err_message_import1 db 'Error importing library ',39,'kmenu',39,0
  252.  
  253. end if
  254.  
  255.  
  256. draw_super_text:
  257.    push eax ebx ecx edx edi esi
  258.    mov     ebx, Otstup * 65536 + 49-6    ; draw info text with function 4 (x, y)
  259.    mov     ecx, 0x90000000 ;0x90224466 ;0x224466
  260.    mov eax, text.volume
  261.    mov     edx, eax
  262.    mov     esi, 13
  263.    mcall 4
  264.  
  265.    mov     ebx, Otstup * 65536 + 99-6
  266.    mov     edx, text.fs
  267.    mov     esi, 12
  268.    mcall 4
  269.  
  270.    mov     ebx, (Otstup+80+30+delta) * 65536 + 99-6
  271.    mov     edx, text.unit
  272.    mov     esi, 21
  273.    mcall 4
  274.  
  275.    mov     ebx, (Otstup+80+30+delta) * 65536 + 49-6
  276.    mov     edx, text.disk
  277.    mov     esi, 9
  278.    mcall 4
  279.  
  280.    mov     ebx, Otstup * 65536 + (151-6+dy)
  281.    mov     edx, text.option
  282.    mov     esi, 8
  283.    mcall 4
  284.  
  285.    ;buttons text
  286.    mov     ebx, (290+delta-Otstup-130+10+2) * 65536 + (277-3+dy)
  287.    mov     ecx, 0x90FFFFFF;0xFFFFFF
  288.    mov eax, text.format
  289.    mov     edx, eax
  290.    mov     esi, 6
  291.    mcall 4
  292.  
  293.    mov     ebx, (290+delta-Otstup-52+6) * 65536 + (213+dy)  ;-3
  294.    ;mov     ecx, 0xFFFFFF
  295.    mov eax, text.browse
  296.    mov     edx, eax
  297.    mov     esi, 6
  298.    mcall 4
  299.  
  300.    pop esi edi edx ecx ebx eax
  301.    ret
  302.  
  303. Buf:
  304.   .1 db 'NONAME18',0,0
  305.   .2 db 'FAT',0,0 ;100 dup(0)
  306.   .3 db 'hd0 [FAT32: 4Gb]',0,0 ;100 dup(0)
  307.   .4 db '4096',0,0 ;100 dup(0)
  308.   .5 db '/rd/1/format/fat32mbr.bin', 0, 0
  309.      rb 256
  310.  
  311.  
  312.  
  313. align 16
  314. @IMPORT:
  315.  
  316. library box_lib, 'box_lib.obj'
  317.  
  318. import  box_lib,\
  319.         edit_box_draw,          'edit_box',\
  320.         edit_box_key,           'edit_box_key',\
  321.         edit_box_mouse,         'edit_box_mouse',\
  322.         init_checkbox,          'init_checkbox2',\
  323.         check_box_draw,         'check_box_draw2',\
  324.         check_box_mouse,        'check_box_mouse2',\
  325.         option_box_draw,        'option_box_draw',\
  326.         option_box_mouse,       'option_box_mouse'
  327.  
  328. copyPath:
  329.    push eax ebx ecx edx ;copy file name path
  330.         mov eax, openfile_path ;dword[OpenDialog_data.openfile_path]
  331.         mov ebx, Buf.5
  332.         mov ecx, 0
  333.       @@:
  334.         mov dl, byte[eax]
  335.         cmp dl, 0
  336.         je @f
  337.         mov byte[ebx], dl
  338.         inc eax
  339.         inc ebx
  340.         inc ecx
  341.         jmp @b
  342.       @@:
  343.         mov byte[ebx], 0
  344.         ;mov dword[Buf.size5], ecx
  345.         mov dword[editMBR.size], ecx
  346.         mov dword[editMBR.pos], ecx
  347.    pop edx ecx ebx eax
  348.    ret
  349.  
  350. align 4
  351. but_open_dlg:
  352.         pushad
  353.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  354.         mov [OpenDialog_data.type],0
  355.         stdcall[OpenDialog_Start], OpenDialog_data
  356.         cmp [OpenDialog_data.status],2
  357.         je @f
  358.         cmp [OpenDialog_data.status],0 ;ïîëüçîâàòåëü íàæàë Cancel?
  359.         je .end_open
  360.                 ;êîä ïðè óäà÷íîì îòêðûòèè äèàëîãà
  361.                 ;...
  362.                 call copyPath
  363.                 jmp .end_open
  364.         @@:
  365.                 ;êîä ïðè íå óäà÷íîì îòêðûòèè äèàëîãà
  366.                 ;...
  367.         .end_open:
  368.         popad
  369.         ret
  370.  
  371. ;äàííûå äëÿ äèàëîãà îòêðûòèÿ ôàéëîâ
  372. align 4
  373. OpenDialog_data:
  374. .type                   dd 0 ;0 - îòêðûòü, 1 - ñîõðàíèòü, 2 - âûáðàòü äèðåêòîðèþ
  375. .procinfo               dd procinfo
  376. .com_area_name          dd communication_area_name ;+8
  377. .com_area               dd 0           ;+12
  378. .opendir_path           dd plugin_path ;+16
  379. .dir_default_path       dd default_dir ;+20
  380. .start_path             dd file_name   ;+24 ïóòü ê äèàëîãó îòêðûòèÿ ôàéëîâ
  381. .draw_window            dd draw_window ;+28
  382. .status                 dd 0           ;+32
  383. .openfile_path          dd openfile_path ;+36 ïóòü ê îòêðûâàåìîìó ôàéëó
  384. .filename_area          dd filename_area ;+40
  385. .filter_area            dd Filter
  386. .x:
  387. .x_size                 dw 420 ;+48 ; Window X size
  388. .x_start                dw 10  ;+50 ; Window X position
  389. .y:
  390. .y_size                 dw 320 ;+52 ; Window y size
  391. .y_start                dw 10  ;+54 ; Window Y position
  392.  
  393. default_dir db '/rd/1',0 ;äèðåêòîðèÿ ïî óìîë÷àíèþ
  394. communication_area_name: db 'FFFFFFFF_open_dialog',0
  395. open_dialog_name:  db 'opendial',0
  396. communication_area_default_path: db '/rd/1/File managers/',0
  397.  
  398. Filter:
  399. dd Filter.end - Filter.1
  400. .1:
  401. ;db 'BIN',0
  402. .end:
  403. db 0
  404.  
  405.  
  406. ;îïèñàíèå ýêñïîðòèðóåìûõ ôóíêöèé
  407. align 4
  408. import_libkmenu:
  409.         kmenu_init      dd akmenu_init
  410.         kmainmenu_draw  dd akmainmenu_draw
  411.         kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent
  412.         ksubmenu_new    dd aksubmenu_new
  413.         ksubmenu_delete dd aksubmenu_delete
  414.         ksubmenu_draw   dd aksubmenu_draw
  415.         ksubmenu_add    dd aksubmenu_add
  416.         kmenuitem_new   dd akmenuitem_new
  417.         kmenuitem_delete dd akmenuitem_delete
  418.         kmenuitem_draw  dd akmenuitem_draw
  419. dd 0,0
  420.         akmenu_init     db 'kmenu_init',0
  421.         akmainmenu_draw db 'kmainmenu_draw',0
  422.         akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0
  423.         aksubmenu_new   db 'ksubmenu_new',0
  424.         aksubmenu_delete db 'ksubmenu_delete',0
  425.         aksubmenu_draw  db 'ksubmenu_draw',0
  426.         aksubmenu_add   db 'ksubmenu_add',0
  427.         akmenuitem_new  db 'kmenuitem_new',0
  428.         akmenuitem_delete db 'kmenuitem_delete',0
  429.         akmenuitem_draw  db 'kmenuitem_draw',0
  430.  
  431. align 4
  432. proclib_import:
  433.         OpenDialog_Init dd aOpenDialog_Init
  434.         OpenDialog_Start dd aOpenDialog_Start
  435. dd 0,0
  436.         aOpenDialog_Init db 'OpenDialog_init',0
  437.         aOpenDialog_Start db 'OpenDialog_start',0
  438.  
  439. system_dir0 db '/sys/lib/'
  440. lib0_name db 'proc_lib.obj',0
  441. lib1_name db 'kmenu.obj',0
  442.  
  443. ;symbolDownArrow db 25,0
  444.  
  445. l_libs_start:
  446.     lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, proclib_import,err_message_import0, head_f_i
  447.     lib1 l_libs lib1_name, sys_path, file_name, system_dir0, err_message_found_lib1, head_f_l, import_libkmenu,err_message_import1,head_f_i
  448. load_lib_end:
  449.  
  450. ;ðàçìåðû: 80 è 120
  451. editLU edit_box 120,Otstup,60,0xffffff,0x6a9480,0,0xAABBCC,0,8,Buf.1, mouse_dd, 0,8,8
  452. editLD edit_box 120,Otstup,110,0xffffff,0x6a9480,0,0xAABBCC,0,3,Buf.2, mouse_dd, 0,3,3
  453. editRU edit_box 120,Otstup+80+30+delta,60,0xffffff,0x6a9480,0,0xAABBCC,0,16,Buf.3, mouse_dd, 0,16,16
  454. editRD edit_box 120,Otstup+80+30+delta,110,0xffffff,0x6a9480,0,0xAABBCC,0,4,Buf.4, mouse_dd, 0,4,4
  455. editMBR edit_box 290+delta-Otstup-52-Otstup-20,Otstup+20,210+dy,0xffffff,0x6a9480,0,0xAABBCC,0,255,Buf.5, mouse_dd, 0,25,25
  456.  
  457. data_of_code dd 0
  458.  
  459. sc  system_colors
  460. mouse_dd  rd 1
  461.  
  462. sys_path:      rb 4096
  463. file_name:     rb 4096
  464. plugin_path:   rb 4096
  465. openfile_path: rb 4096
  466. filename_area: rb 256
  467. rb 1024
  468. procinfo process_information
  469.  
  470. I_END:
  471.         rb 256 ;4096
  472. STACKTOP:
  473. MEM:
  474.