Subversion Repositories Kolibri OS

Rev

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