Subversion Repositories Kolibri OS

Rev

Rev 9568 | 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 19, 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. KMENUITEM_NORMAL equ 0
  41. KMENUITEM_SUBMENU equ 1
  42. KMENUITEM_SEPARATOR equ 2
  43.  
  44. include 'lang.inc'
  45. include '../../macros.inc'
  46. include '../../proc32.inc'
  47. include '../../KOSfuncs.inc'
  48. include '../../dll.inc'
  49. include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;for uses checkBox and editBox
  50. include '../../load_lib.mac'
  51. @use_library
  52.  
  53. START:
  54.    mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors ;get system colors
  55.  
  56.    stdcall dll.Load, @IMPORT
  57.    or      eax, eax
  58.    jnz     exit
  59.  
  60.    load_libraries l_libs_start,load_lib_end
  61.    stdcall [OpenDialog_Init],OpenDialog_data
  62.  
  63.    ;set mask for events:
  64.    ;ñîîáùåíèå î ïåðåðèñîâêå,íàæàòà êíîïêà, îïðåäåë¸ííàÿ ðàíåå, ñîáûòèå îò ìûøè (÷òî-òî ñëó÷èëîñü - íàæàòèå íà êíîïêó ìûøè èëè ïåðåìåùåíèå; ñáðàñûâàåòñÿ ïðè ïðî÷òåíèè)
  65.    mcall SF_SET_EVENTS_MASK, 0x27
  66.  
  67.    mov ecx,[sc.work_text]
  68.    and ecx,0x9FFFFFFF
  69.    or  ecx,0x90000000
  70.  
  71.    call initBuf
  72.  
  73.    mov dword[editLabel.text_color], ecx
  74.    mov dword[editMBR.text_color], ecx
  75.  
  76.    invoke init_checkbox, ch1
  77.    invoke init_checkbox, ch2
  78.  
  79.    stdcall [kmenu_init], sc
  80.    stdcall [ksubmenu_new]
  81.    mov [kmFS], eax
  82.  
  83.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmNone, 110
  84.    stdcall [ksubmenu_add], [kmFS], eax
  85.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmFat16, 111
  86.    stdcall [ksubmenu_add], [kmFS], eax
  87.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmFat32, 112
  88.    stdcall [ksubmenu_add], [kmFS], eax
  89.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmNTFS, 113
  90.    stdcall [ksubmenu_add], [kmFS], eax
  91.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmExt2, 114
  92.    stdcall [ksubmenu_add], [kmFS], eax
  93.    mov byte[kmID], 0
  94.  
  95.    stdcall [kmenuitem_new], KMENUITEM_SUBMENU, kmFat16, [kmFS]
  96.  
  97.  
  98.    stdcall [ksubmenu_new]
  99.    mov [kmUnit], eax
  100.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.0, 120
  101.    stdcall [ksubmenu_add], [kmUnit], eax
  102.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.1, 121
  103.    stdcall [ksubmenu_add], [kmUnit], eax
  104.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.2, 122
  105.    stdcall [ksubmenu_add], [kmUnit], eax
  106.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.3, 123
  107.    stdcall [ksubmenu_add], [kmUnit], eax
  108.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.4, 124
  109.    stdcall [ksubmenu_add], [kmUnit], eax
  110.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.5, 125
  111.    stdcall [ksubmenu_add], [kmUnit], eax
  112.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.6, 126
  113.    stdcall [ksubmenu_add], [kmUnit], eax
  114.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, unittext.7, 127
  115.    stdcall [ksubmenu_add], [kmUnit], eax
  116.    mov byte[kmUnitID], 0
  117.    stdcall [kmenuitem_new], KMENUITEM_SUBMENU, unittext.0, [kmUnit]
  118.  
  119.    call getDeviceList
  120.  
  121.    call  draw_window
  122.  
  123. event_wait:
  124.    mcall SF_WAIT_EVENT
  125.  
  126.    cmp     eax, 1       ; Event redraw
  127.    je      redraw
  128.  
  129.    cmp     eax, 2       ; Event key in buffer ?
  130.    je      key
  131.  
  132.    cmp     eax, 3       ; Event button in buffer ?
  133.    je      button
  134.  
  135.    cmp     eax, 6       ; Event mouse in buffer ?
  136.    je      mouse
  137.  
  138.    jmp  event_wait
  139.  
  140.  
  141. redraw:
  142.    call    draw_window
  143.    jmp     event_wait
  144.  
  145. key:
  146.    mcall SF_GET_KEY
  147.    invoke  edit_box_key, editLabel
  148.    invoke  edit_box_key, editMBR
  149.    jmp     event_wait
  150.  
  151. button:
  152.     mcall SF_GET_BUTTON
  153.  
  154.     cmp ah, 1         ;Close button
  155.     jne @f
  156. exit:
  157.     mcall SF_TERMINATE_PROCESS
  158. @@:
  159.    cmp ah, 2          ;Format button
  160.    jne @f
  161.    call butFormat
  162.    jmp event_wait
  163. @@:
  164.    cmp ah, 3          ;Brouse button
  165.    jne @f
  166.    call butBrouse
  167.    jmp event_wait
  168. @@:
  169.    cmp ah, 4          ;Select FS button
  170.    jne @f
  171.    call butSelectFS
  172.    jmp event_wait
  173. @@:
  174.    cmp ah, 5          ;Select unit size button
  175.    jne @f
  176.    call butUnit
  177.    jmp event_wait
  178. @@:
  179.    cmp ah, 6          ;Select Device button
  180.    jne @f
  181.    call butDevice
  182.    jmp event_wait
  183. @@:
  184.    cmp ah, 110        ;kmenu list FS
  185.    jb @f
  186.    cmp ah, 114
  187.    ja @f
  188.    sub ah, 110
  189.    mov byte[kmID], ah
  190.    jmp redraw
  191. @@:
  192.    cmp ah, 120        ;kmenu Unit Size
  193.    jb @f
  194.    cmp ah, 127
  195.    ja @f
  196.    sub ah, 120
  197.    mov byte[kmUnitID], ah
  198.    jmp redraw
  199. @@:
  200.    cmp ah, 130        ;kmenu Device
  201.    jb @f
  202.    cmp ah, 250
  203.    ja @f
  204.    sub ah, 130
  205.    mov byte[kmDeviceID], ah
  206.    jmp redraw
  207. @@:
  208.    jmp event_wait
  209.  
  210. mouse:
  211.    invoke check_box_mouse, ch1  ;ïðîâåðêà ÷åê áîêñà
  212.    invoke check_box_mouse, ch2
  213.  
  214.    invoke  edit_box_mouse, editLabel   ;ïðîâåðêà ñîáûòèé ìûøè äëÿ editBox'îâ
  215.    invoke  edit_box_mouse, editMBR
  216.  
  217.    stdcall [kmainmenu_dispatch_cursorevent], [kmFS]
  218.    jmp event_wait
  219.  
  220. butBrouse:
  221.    call but_open_dlg
  222.    ret
  223.  
  224. butFormat:
  225.    ret
  226.  
  227. butSelectFS:
  228.    push eax ebx ecx
  229.    mcall SF_THREAD_INFO, pi, -1 ;get window coord
  230.  
  231.    mov eax, dword[pi+34]
  232.    add eax, Otstup
  233.    mov word[coord.x], ax
  234.  
  235.    mov eax, dword[pi+38]
  236.    add eax, 129
  237.    mov word[coord.y], ax
  238.  
  239.    stdcall [ksubmenu_draw], [kmFS], coord
  240.    pop ecx ebx eax
  241.    ret
  242.  
  243. butUnit:
  244.    push eax ebx ecx
  245.    mcall SF_THREAD_INFO, pi, -1
  246.  
  247.    mov eax, dword[pi+34]
  248.    add eax, Otstup+80+30+delta
  249.    mov word[coordUnit.x], ax
  250.  
  251.    mov eax, dword[pi+38]
  252.    add eax, 129
  253.    mov word[coordUnit.y], ax
  254.  
  255.    stdcall [ksubmenu_draw], [kmUnit], coordUnit
  256.    pop ecx ebx eax
  257.    ret
  258.  
  259. butDevice:
  260.    push eax ebx ecx
  261.    mcall SF_THREAD_INFO, pi, -1
  262.  
  263.    mov eax, dword[pi+34]
  264.    add eax, Otstup+80+30+delta
  265.    mov word[coordDevice.x], ax
  266.  
  267.    mov eax, dword[pi+38]
  268.    add eax, 79
  269.    mov word[coordDevice.y], ax
  270.  
  271.    stdcall [ksubmenu_draw], [kmDevice], coordDevice
  272.    pop ecx ebx eax
  273.    ret
  274.  
  275.  
  276. delta = 50
  277. dy = 15 + 40
  278. warning_title: db 'Warning!',0
  279. draw_warningWindow:
  280.    ret
  281.  
  282. draw_window:
  283.    mcall  SF_REDRAW, SSF_BEGIN_DRAW
  284.  
  285.         mov     eax, SF_CREATE_WINDOW           ; define and draw window
  286.         mov     ebx, 100 * 65536 + (290+delta)  ; [x start] *65536 + [x size]
  287.         mov     ecx, 100 * 65536 + (310+dy)  ; [y start] *65536 + [y size]
  288.         mov     edx,[sc.work]    ;0x14FFFFFF
  289.         add     edx, 0x14000000         ; color of work area RRGGBB
  290.                                         ; 0x02000000 = window type 4 (fixed size, skinned window)
  291.         mov     esi, 0x808899ff         ; color of grab bar  RRGGBB
  292.                                         ; 0x80000000 = color glide
  293.         mov     edi, title
  294.         mcall
  295.  
  296.  
  297.         mov esi, 0xAABBCC
  298.         mcall SF_DEFINE_BUTTON, (290+delta-Otstup-130+10)*65536+130, (270+dy)*65536+(20+3), 2
  299.  
  300.         inc edx
  301.         mcall , (290+delta-Otstup-50-2)*65536+(50+2), (210+dy)*65536+21 ;14
  302.  
  303.         ;button select FS
  304.         inc edx
  305.         mov esi, 0xFFFFFF
  306.         mcall , Otstup*65536+120, (110)*65536+(21)
  307.  
  308.         ;button select unit size
  309.         inc edx
  310.         mcall , (Otstup+80+30+delta)*65536+120, (110)*65536+(21)
  311.  
  312.         ;button select device
  313.         inc edx
  314.         mcall , (Otstup+80+30+delta)*65536+120, (60)*65536+(21)
  315.  
  316.        invoke check_box_draw, ch1  ;ðèñîâàíèå ÷åêáîêñîâ
  317.        invoke check_box_draw, ch2
  318.  
  319.        invoke  edit_box_draw, editMBR     ;ðèñîâàíèå edit box'îâ
  320.        invoke  edit_box_draw, editLabel
  321.  
  322.        call draw_super_text
  323.  
  324.  
  325.         mov     ecx,[sc.work]
  326.         mov     dword [frame_data.font_backgr_color],ecx
  327.         push    dword frame_data
  328.         invoke  frame_draw
  329.  
  330.         mov     ecx,[sc.work]
  331.         mov     dword [frame_data2.font_backgr_color],ecx
  332.         push    dword frame_data2
  333.         invoke  frame_draw
  334.  
  335.         mcall SF_REDRAW, SSF_END_DRAW
  336.         ret
  337.  
  338.  
  339.  
  340. Otstup = 30
  341.  
  342. ;öâåò 0x224466 çàìåí¸í 0x90000000 è â ôèíàëå íà 0
  343. 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
  344. ch2 check_box2 Otstup shl 16 + 12, (190+dy) shl 16 + 12, 6, 0xFFFFFFFF, 0xAABBCC, 0, ch_text.2, 100b
  345.  
  346.  
  347. browse db '...', 0
  348.  
  349. if lang eq ru  ;RU language
  350.  
  351. title   db  "Formatting Disk Utility", 0
  352.  
  353. ch_text:       ;text for CheckBoxs
  354. .1 db '®«­®¥ ¨ ¤®«£®¥ ä®à¬ â¨à®¢ ­¨¥',0
  355. .2 db '‘®§¤ âì § £à㧮ç­ë© ¤¨áª, § ¯¨áì MBR:',0
  356.  
  357. text:
  358.   .volume db 'Œ¥âª  ⮬ :', 0
  359.   .fs     db '” ©«®¢ ï á¨á⥬ :', 0
  360.   .disk   db ' ª®¯¨â¥«ì:', 0 ;'…¬ª®áâì:', 0
  361.   .unit   db ' §¬¥à ª« áâ¥à :', 0
  362.   .option db ' à ¬¥âàë:', 0
  363.   .format db '”®à¬ â¨à®¢ âì', 0
  364.  
  365. unittext:
  366.   .0 db '512 ¡ ©â', 0
  367.   .1 db '1024 ¡ ©â', 0
  368.   .2 db '2048 ¡ ©â', 0
  369.   .3 db '4096 ¡ ©â', 0
  370.   .4 db '8192 ¡ ©â', 0
  371.   .5 db '16 Š¡', 0
  372.   .6 db '32 Š¡', 0
  373.   .7 db '64 Š¡', 0
  374.  
  375. else           ;EN language
  376.  
  377. title   db  "Formatting Disk Utility", 0
  378.  
  379. ch_text:
  380. .1 db 'Full and long disk formatting',0
  381. .2 db 'Create startup disk, write MBR:',0
  382.  
  383. text:
  384.   .volume db 'Volume Label:', 0
  385.   .fs     db 'File System:', 0
  386.   .disk   db 'Storage device:', 0 ;'Capacity:', 0
  387.   .unit   db 'Allocation unit size:', 0
  388.   .option db 'Options:', 0
  389.   .format db 'Format', 0
  390.  
  391. unittext:
  392.   .0 db '512 bytes', 0
  393.   .1 db '1024 bytes', 0
  394.   .2 db '2048 bytes', 0
  395.   .3 db '4096 bytes', 0
  396.   .4 db '8192 bytes', 0
  397.   .5 db '16 Kb', 0
  398.   .6 db '32 Kb', 0
  399.   .7 db '64 Kb', 0
  400.  
  401. end if
  402.  
  403.  
  404.  
  405. root_path: db "/", 0
  406.  
  407. align 4
  408. maxDeviceCount = 250-130
  409. read_folder_struct:
  410.    .subfunction dd  1
  411.    .start       dd  0 ;start block
  412.    .encoding    dd  3 ;1-cp866, 2-UTF-16LE, 3-utf8
  413.    .count       dd  maxDeviceCount ;count blocks
  414.    .return      dd  0 ;àäðåñ ïàìÿòè äëÿ ïîëó÷àåìîãî áëîêà ÁÄÂÊ ñ çàãîëîâêîì
  415.    .name        db  0
  416.    .path_adr    dd  root_path
  417. noneDevice: db '-', 0
  418. ;adrDevice: dd 0
  419.  
  420. getDeviceList:
  421.    push eax ebx ecx esi
  422.    stdcall [ksubmenu_new]
  423.    mov [kmDevice], eax
  424.    sizeBDVK = 560   ;304 ;
  425.  
  426.    mcall SF_SYS_MISC, SSF_HEAP_INIT
  427.  
  428.    mcall SF_SYS_MISC, SSF_MEM_ALLOC, sizeBDVK*maxDeviceCount+32
  429.    mov dword[read_folder_struct.return], eax
  430.    mcall SF_FILE, read_folder_struct
  431.    cmp eax, 0
  432.    je .next
  433.    cmp eax, 6
  434.    je .next
  435.    jmp .none
  436. .next:
  437.    mov eax, dword[read_folder_struct.return]
  438.    mov esi, deviceAdrStr
  439.    add eax, 32
  440.    mov ecx, 130
  441. @@:
  442.    cmp ebx, 0
  443.    je @f
  444.    push eax ebx ecx
  445.    add eax, 40
  446.    ;mov [adrDevice], eax
  447.    mov dword[esi], eax
  448.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, [esi], ecx ; [adrDevice], ecx
  449.    stdcall [ksubmenu_add], [kmDevice], eax
  450.    pop ecx ebx eax
  451.    add esi, 4
  452.    inc ecx
  453.    dec ebx
  454.    add eax, sizeBDVK
  455.    cmp ecx, 250
  456.    ja @f
  457.    jmp @b
  458. .none:
  459.    stdcall [kmenuitem_new], KMENUITEM_NORMAL, noneDevice, 130
  460.    mov dword[esi], noneDevice
  461.    stdcall [ksubmenu_add], [kmDevice], eax
  462. @@:
  463.    mov byte[kmDeviceID], 0
  464.    stdcall [kmenuitem_new], KMENUITEM_SUBMENU, unittext.0, [kmDevice]
  465.    pop esi ecx ebx eax
  466.    ret
  467.  
  468.  
  469. draw_super_text:
  470.    push eax ebx ecx edx edi esi
  471.    mov     ebx, Otstup * 65536 + 49-6    ; draw info text with function 4 (x, y)
  472.    mov     ecx, 0x90000000 ;0x90224466 ;0x224466
  473.    mov eax, text.volume
  474.    mov     edx, eax
  475.    mov     esi, 13
  476.    mcall SF_DRAW_TEXT
  477.  
  478.    mov     ebx, Otstup * 65536 + 99-6
  479.    mov     edx, text.fs
  480.    mov     esi, 12
  481.    mcall SF_DRAW_TEXT
  482.  
  483.    mov     ebx, (Otstup+80+30+delta) * 65536 + 99-6
  484.    mov     edx, text.unit
  485.    mov     esi, 21
  486.    mcall SF_DRAW_TEXT
  487.  
  488.    mov     ebx, (Otstup+80+30+delta) * 65536 + 49-6
  489.    mov     edx, text.disk
  490.    mov     esi, 9
  491.    mcall SF_DRAW_TEXT
  492.  
  493. ;   mov     ebx, Otstup * 65536 + (151-6+dy)
  494. ;   mov     edx, text.option
  495. ;   mov     esi, 8
  496. ;   mcall SF_DRAW_TEXT
  497.  
  498.    mov     ebx, (Otstup+80+30+delta +5) * 65536 + (110+3)
  499.    mov dl, byte[kmUnitID]
  500.    cmp dl, 0
  501.    jne @f
  502.    mov     edx, unittext.0
  503.    jmp .printUnit
  504. @@:
  505.    cmp dl, 1
  506.    jne @f
  507.    mov     edx, unittext.1
  508.    jmp .printUnit
  509. @@:
  510.    cmp dl, 2
  511.    jne @f
  512.    mov     edx, unittext.2
  513.    jmp .printUnit
  514. @@:
  515.    cmp dl, 3
  516.    jne @f
  517.    mov     edx, unittext.3
  518.    jmp .printUnit
  519. @@:
  520.    cmp dl, 4
  521.    jne @f
  522.    mov     edx, unittext.4
  523.    jmp .printUnit
  524. @@:
  525.    cmp dl, 5
  526.    jne @f
  527.    mov     edx, unittext.5
  528.    jmp .printUnit
  529. @@:
  530.    cmp dl, 6
  531.    jne @f
  532.    mov     edx, unittext.6
  533.    jmp .printUnit
  534. @@:
  535.    cmp dl, 7
  536.    jne @f
  537.    mov     edx, unittext.7
  538.    jmp .printUnit
  539. @@:
  540.    mov byte[kmUnitID], 0
  541.    mov     edx, unittext.0
  542. .printUnit:
  543.    mcall SF_DRAW_TEXT
  544.  
  545.    mov     ebx, (Otstup+5) * 65536 + (110+3)
  546.    mov dl, byte[kmID]
  547.    cmp dl, 0
  548.    jne @f
  549.    mov     edx, kmNone
  550.    jmp .printFS
  551. @@:
  552.    cmp dl, 1
  553.    jne @f
  554.    mov     edx, kmFat16
  555.    jmp .printFS
  556. @@:
  557.    cmp dl, 2
  558.    jne @f
  559.    mov     edx, kmFat32
  560.    jmp .printFS
  561. @@:
  562.    cmp dl, 3
  563.    jne @f
  564.    mov     edx, kmNTFS
  565.    jmp .printFS
  566. @@:
  567.    cmp dl, 4
  568.    jne @f
  569.    mov     edx, kmExt2
  570.    jmp .printFS
  571. @@:
  572.    mov byte[kmID], 0
  573.    mov     edx, kmNone
  574. .printFS:
  575.    ;mov     esi, 8
  576.    mcall SF_DRAW_TEXT
  577.  
  578.    ;button device
  579.    mov     ebx, (Otstup+80+30+delta +5) * 65536 + (60+3)
  580.    mov edx, dword[kmDeviceID]
  581.    shl edx, 2
  582.    add edx, deviceAdrStr
  583.    mov edx, dword[edx]
  584.    ;call setCurrentDeviceInEDX
  585.    mcall SF_DRAW_TEXT
  586.  
  587.    ;buttons text
  588.    mov     ebx, (290+delta-Otstup-130+10+2+10) * 65536 + (277-3+dy)
  589.    mov     ecx, 0x90FFFFFF
  590.    mov eax, text.format
  591.    mov     edx, eax
  592.    mov     esi, 6
  593.    mcall SF_DRAW_TEXT
  594.  
  595.    mov     ebx, (290+delta-Otstup-52+6+8) * 65536 + (213+dy)
  596.    ;mov     ecx, 0xFFFFFF
  597.    mov eax, browse ;text.browse
  598.    mov     edx, eax
  599.    mov     esi, 6
  600.    mcall SF_DRAW_TEXT
  601.  
  602.    pop esi edi edx ecx ebx eax
  603.    ret
  604.  
  605.  
  606.  
  607. Buf:
  608.   .1 db 'NONAME18',0,0
  609.   ;.3 db 'hd0 [4Gb]',0,0 ;100 dup(0)
  610.   .5 rb 512 ;db '/sys/format/fat32mbr.bin', 0, 0
  611.  
  612. initBuf:
  613.    push eax ecx
  614.    ;buf.1 - label
  615.    mov dword[Buf.1], 'NONA'
  616.    mov dword[Buf.1+4], 'ME18'
  617.    mov word[Buf.1+8], 0
  618.  
  619.    ;buf.5 - full name for file mbr
  620.    mov eax, Buf.5
  621.    mov ecx, 512/4
  622. @@:
  623.    mov dword[eax], 4
  624.    add eax, 4
  625.    dec ecx
  626.    cmp ecx, 0
  627.    je @f
  628.    jmp @b
  629. @@:
  630.  
  631.    pop ecx eax
  632.    ret
  633.  
  634.  
  635.  
  636. copyPath:
  637.    push eax ebx ecx edx ;copy file name path
  638.         mov eax, openfile_path
  639.         mov ebx, Buf.5
  640.         mov ecx, 0
  641.       @@:
  642.         mov dl, byte[eax]
  643.         cmp dl, 0
  644.         je @f
  645.         mov byte[ebx], dl
  646.         inc eax
  647.         inc ebx
  648.         inc ecx
  649.         jmp @b
  650.       @@:
  651.         mov byte[ebx], 0
  652.         mov dword[editMBR.size], ecx
  653.         mov dword[editMBR.pos], ecx
  654.    pop edx ecx ebx eax
  655.    ret
  656.  
  657. align 4
  658. but_open_dlg:
  659.         pushad
  660.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  661.         mov [OpenDialog_data.type],0
  662.         stdcall[OpenDialog_Start], OpenDialog_data
  663.         cmp [OpenDialog_data.status],2
  664.         je @f
  665.         cmp [OpenDialog_data.status],0 ;ïîëüçîâàòåëü íàæàë Cancel?
  666.         je .end_open
  667.                 ;êîä ïðè óäà÷íîì îòêðûòèè äèàëîãà
  668.                 ;...
  669.                 call copyPath
  670.                 jmp .end_open
  671.         @@:
  672.                 ;êîä ïðè íå óäà÷íîì îòêðûòèè äèàëîãà
  673.                 ;...
  674.         .end_open:
  675.         popad
  676.         ret
  677.  
  678. ;äàííûå äëÿ äèàëîãà îòêðûòèÿ ôàéëîâ
  679. align 4
  680. OpenDialog_data:
  681. .type                   dd 0 ;0 - îòêðûòü, 1 - ñîõðàíèòü, 2 - âûáðàòü äèðåêòîðèþ
  682. .procinfo               dd procinfo
  683. .com_area_name          dd communication_area_name ;+8
  684. .com_area               dd 0           ;+12
  685. .opendir_path           dd plugin_path ;+16
  686. .dir_default_path       dd default_dir ;+20
  687. .start_path             dd file_name   ;+24 ïóòü ê äèàëîãó îòêðûòèÿ ôàéëîâ
  688. .draw_window            dd draw_window ;+28
  689. .status                 dd 0           ;+32
  690. .openfile_path          dd openfile_path ;+36 ïóòü ê îòêðûâàåìîìó ôàéëó
  691. .filename_area          dd filename_area ;+40
  692. .filter_area            dd Filter
  693. .x:
  694. .x_size                 dw 420 ;+48 ; Window X size
  695. .x_start                dw 10  ;+50 ; Window X position
  696. .y:
  697. .y_size                 dw 320 ;+52 ; Window y size
  698. .y_start                dw 10  ;+54 ; Window Y position
  699.  
  700. default_dir db '/sys',0 ;äèðåêòîðèÿ ïî óìîë÷àíèþ
  701. communication_area_name: db 'FFFFFFFF_open_dialog',0
  702. open_dialog_name:  db 'opendial',0
  703. communication_area_default_path: db '/sys/File managers/',0
  704.  
  705. Filter:
  706. dd Filter.end - Filter.1
  707. .1:
  708. ;db 'BIN',0
  709. .end:
  710. db 0
  711.  
  712.  
  713. align 16
  714. @IMPORT:
  715. library box_lib, 'box_lib.obj'
  716.  
  717. import  box_lib,\
  718.         edit_box_draw,          'edit_box_draw',\
  719.         edit_box_key,           'edit_box_key',\
  720.         edit_box_mouse,         'edit_box_mouse',\
  721.         init_checkbox,          'init_checkbox2',\
  722.         check_box_draw,         'check_box_draw2',\
  723.         check_box_mouse,        'check_box_mouse2',\
  724.         option_box_draw,        'option_box_draw',\
  725.         option_box_mouse,       'option_box_mouse',\
  726.         frame_draw,             'frame_draw'
  727.  
  728. align 4
  729. import_libkmenu:
  730.         kmenu_init      dd akmenu_init
  731.         kmainmenu_draw  dd akmainmenu_draw
  732.         kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent
  733.         ksubmenu_new    dd aksubmenu_new
  734.         ksubmenu_delete dd aksubmenu_delete
  735.         ksubmenu_draw   dd aksubmenu_draw
  736.         ksubmenu_add    dd aksubmenu_add
  737.         kmenuitem_new   dd akmenuitem_new
  738.         kmenuitem_delete dd akmenuitem_delete
  739.         kmenuitem_draw  dd akmenuitem_draw
  740. dd 0,0
  741.         akmenu_init     db 'kmenu_init',0
  742.         akmainmenu_draw db 'kmainmenu_draw',0
  743.         akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0
  744.         aksubmenu_new   db 'ksubmenu_new',0
  745.         aksubmenu_delete db 'ksubmenu_delete',0
  746.         aksubmenu_draw  db 'ksubmenu_draw',0
  747.         aksubmenu_add   db 'ksubmenu_add',0
  748.         akmenuitem_new  db 'kmenuitem_new',0
  749.         akmenuitem_delete db 'kmenuitem_delete',0
  750.         akmenuitem_draw  db 'kmenuitem_draw',0
  751.  
  752. align 4
  753. import_proclib:
  754.         OpenDialog_Init dd aOpenDialog_Init
  755.         OpenDialog_Start dd aOpenDialog_Start
  756. dd 0,0
  757.         aOpenDialog_Init db 'OpenDialog_init',0
  758.         aOpenDialog_Start db 'OpenDialog_start',0
  759.  
  760. system_dir0 db '/sys/lib/'
  761. lib0_name db 'proc_lib.obj',0
  762. lib1_name db 'kmenu.obj',0
  763.  
  764.  
  765. frame_data:
  766. .type                   dd 0 ;+0
  767. .x:
  768. .x_size                 dw 290+delta-2*(Otstup-10) ;+4
  769. .x_start                dw Otstup-10 ;+6
  770. .y:
  771. .y_size                 dw 80+20 ;+8
  772. .y_start                dw 151-6+dy ;+10
  773. .ext_fr_col             dd 0x888888 ;+12
  774. .int_fr_col             dd 0xffffff ;+16
  775. .draw_text_flag         dd 1 ;+20
  776. .text_pointer           dd text.option ;+24
  777. .text_position          dd 0 ;+28
  778. .font_number            dd 1;0 ;+32
  779. .font_size_y            dd 9 ;+36
  780. .font_color             dd 0x000000 ;+40
  781. .font_backgr_color      dd 0xFFFFFF ;dddddd ;+44
  782.  
  783. frame_data2:
  784. .type                   dd 0
  785. .x:
  786. .x_size                 dw 290+delta-2*(Otstup-10)
  787. .x_start                dw Otstup-10
  788. .y:
  789. .y_size                 dw 110
  790. .y_start                dw Otstup+5
  791. .ext_fr_col             dd 0x888888
  792. .int_fr_col             dd 0xffffff
  793. .draw_text_flag         dd 0;1
  794. .text_pointer           dd 0 ;text.option
  795. .text_position          dd 0
  796. .font_number            dd 0
  797. .font_size_y            dd 9
  798. .font_color             dd 0x0
  799. .font_backgr_color      dd 0xdddddd
  800.  
  801. ;symbolDownArrow db 25,0
  802.  
  803. kmNone: db 'None', 0  ;only MBR or ZeroDestroy
  804. ;kmFat12: db 'FAT12', 0
  805. kmFat16: db 'FAT16', 0
  806. kmFat32: db 'FAT32', 0
  807. ;kmExtFat: db 'EXTFAT', 0
  808. kmNTFS: db 'NTFS', 0
  809. kmExt2: db 'EXT2', 0
  810. ;kmExt3: db 'EXT3', 0
  811. ;kmExt4: db 'EXT4', 0
  812. ;kmXFS: db 'XFS', 0
  813.  
  814. l_libs_start:
  815.     lib0 l_libs lib0_name, file_name, system_dir0, import_proclib
  816.     lib1 l_libs lib1_name, file_name, system_dir0, import_libkmenu
  817. load_lib_end:
  818.  
  819. ;ðàçìåðû: 80 è 120
  820. editLabel edit_box 120,Otstup,60,0xffffff,0x6a9480,0,0xAABBCC,0,8,Buf.1, mouse_dd, 0,8,8
  821. ;editRU edit_box 120,Otstup+80+30+delta,60,0xffffff,0x6a9480,0,0xAABBCC,0,16,Buf.3, mouse_dd, 0,16,16
  822. editMBR edit_box 290+delta-Otstup-52-Otstup-20,Otstup+20,210+dy,0xffffff,0x6a9480,0,0xAABBCC,0,255,Buf.5, mouse_dd, 0,0,0 ;25,25
  823.  
  824. data_of_code dd 0
  825.  
  826. sc  system_colors
  827. mouse_dd  rd 1
  828.  
  829. coord:
  830.   .x: rw 1
  831.   .y: rw 1
  832.  
  833. coordUnit:
  834.   .x: rw 1
  835.   .y: rw 1
  836.  
  837. coordDevice:
  838.   .x: rw 1
  839.   .y: rw 1
  840.  
  841. kmDeviceID: rd 1
  842. kmDevice: rd 1
  843.  
  844. kmUnitID: rd 1
  845. kmUnit: rd 1
  846.  
  847. kmID: rb 1 ;íîìåð âûáðàííîãî ïóíêòà
  848. kmFS: rd 1
  849. mbr: rb 512
  850.  
  851. sys_path:      rb 4096
  852. file_name:     rb 4096
  853. plugin_path:   rb 4096
  854. openfile_path: rb 4096
  855. filename_area: rb 256
  856. rb 1024
  857. procinfo process_information
  858. pi rb 1024
  859.  
  860. deviceAdrStr: rd maxDeviceCount
  861.  
  862. I_END:
  863.         rb 256
  864. align 4
  865. STACKTOP:
  866. MEM:
  867.