Subversion Repositories Kolibri OS

Rev

Rev 9568 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7471 theonlymir 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
; Formatting Disk Utility ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4
; Compile with FASM
7483 theonlymir 5
; FORMAT ver. Oct 19, 2018
7471 theonlymir 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  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
 
7473 theonlymir 40
KMENUITEM_NORMAL equ 0
41
KMENUITEM_SUBMENU equ 1
42
KMENUITEM_SEPARATOR equ 2
43
 
7471 theonlymir 44
include 'lang.inc'
45
include '../../macros.inc'
46
include '../../proc32.inc'
8346 IgorA 47
include '../../KOSfuncs.inc'
7471 theonlymir 48
include '../../dll.inc'
7476 theonlymir 49
include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;for uses checkBox and editBox
8346 IgorA 50
include '../../load_lib.mac'
7471 theonlymir 51
@use_library
52
 
53
START:
8346 IgorA 54
   mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors ;get system colors
7471 theonlymir 55
 
56
   stdcall dll.Load, @IMPORT
57
   or      eax, eax
58
   jnz     exit
59
 
7476 theonlymir 60
   load_libraries l_libs_start,load_lib_end
61
   stdcall [OpenDialog_Init],OpenDialog_data
7471 theonlymir 62
 
7476 theonlymir 63
   ;set mask for events:
64
   ;сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
8346 IgorA 65
   mcall SF_SET_EVENTS_MASK, 0x27
7471 theonlymir 66
 
67
   mov ecx,[sc.work_text]
8346 IgorA 68
   and ecx,0x9FFFFFFF
7471 theonlymir 69
   or  ecx,0x90000000
7476 theonlymir 70
 
71
   call initBuf
72
 
7483 theonlymir 73
   mov dword[editLabel.text_color], ecx
7471 theonlymir 74
   mov dword[editMBR.text_color], ecx
75
 
76
   invoke init_checkbox, ch1
77
   invoke init_checkbox, ch2
78
 
7476 theonlymir 79
   stdcall [kmenu_init], sc
80
   stdcall [ksubmenu_new]
81
   mov [kmFS], eax
7473 theonlymir 82
 
7476 theonlymir 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
7473 theonlymir 94
 
7476 theonlymir 95
   stdcall [kmenuitem_new], KMENUITEM_SUBMENU, kmFat16, [kmFS]
7473 theonlymir 96
 
97
 
7476 theonlymir 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]
7471 theonlymir 118
 
7483 theonlymir 119
   call getDeviceList
120
 
7476 theonlymir 121
   call  draw_window
122
 
7471 theonlymir 123
event_wait:
8346 IgorA 124
   mcall SF_WAIT_EVENT
7471 theonlymir 125
 
7476 theonlymir 126
   cmp     eax, 1       ; Event redraw
127
   je      redraw
7471 theonlymir 128
 
7476 theonlymir 129
   cmp     eax, 2       ; Event key in buffer ?
130
   je      key
7471 theonlymir 131
 
7476 theonlymir 132
   cmp     eax, 3       ; Event button in buffer ?
133
   je      button
7471 theonlymir 134
 
7476 theonlymir 135
   cmp     eax, 6       ; Event mouse in buffer ?
136
   je      mouse
7471 theonlymir 137
 
7476 theonlymir 138
   jmp  event_wait
7471 theonlymir 139
 
140
 
7476 theonlymir 141
redraw:
142
   call    draw_window
143
   jmp     event_wait
7473 theonlymir 144
 
7471 theonlymir 145
key:
8346 IgorA 146
   mcall SF_GET_KEY
7483 theonlymir 147
   invoke  edit_box_key, editLabel
7476 theonlymir 148
   invoke  edit_box_key, editMBR
149
   jmp     event_wait
7471 theonlymir 150
 
151
button:
8346 IgorA 152
    mcall SF_GET_BUTTON
7471 theonlymir 153
 
7476 theonlymir 154
    cmp ah, 1         ;Close button
155
    jne @f
7471 theonlymir 156
exit:
8346 IgorA 157
    mcall SF_TERMINATE_PROCESS
7476 theonlymir 158
@@:
7473 theonlymir 159
   cmp ah, 2          ;Format button
7476 theonlymir 160
   jne @f
7473 theonlymir 161
   call butFormat
162
   jmp event_wait
7476 theonlymir 163
@@:
7473 theonlymir 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
@@:
7476 theonlymir 174
   cmp ah, 5          ;Select unit size button
175
   jne @f
176
   call butUnit
177
   jmp event_wait
178
@@:
7483 theonlymir 179
   cmp ah, 6          ;Select Device button
180
   jne @f
181
   call butDevice
182
   jmp event_wait
183
@@:
7473 theonlymir 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
7476 theonlymir 190
   jmp redraw
7473 theonlymir 191
@@:
7476 theonlymir 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
@@:
7483 theonlymir 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
@@:
7473 theonlymir 208
   jmp event_wait
7471 theonlymir 209
 
7476 theonlymir 210
mouse:
211
   invoke check_box_mouse, ch1  ;проверка чек бокса
212
   invoke check_box_mouse, ch2
7473 theonlymir 213
 
7483 theonlymir 214
   invoke  edit_box_mouse, editLabel   ;проверка событий мыши для editBox'ов
7476 theonlymir 215
   invoke  edit_box_mouse, editMBR
216
 
217
   stdcall [kmainmenu_dispatch_cursorevent], [kmFS]
218
   jmp event_wait
219
 
7473 theonlymir 220
butBrouse:
7471 theonlymir 221
   call but_open_dlg
222
   ret
7473 theonlymir 223
 
224
butFormat:
7471 theonlymir 225
   ret
226
 
7473 theonlymir 227
butSelectFS:
228
   push eax ebx ecx
8346 IgorA 229
   mcall SF_THREAD_INFO, pi, -1 ;get window coord
7471 theonlymir 230
 
7473 theonlymir 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
 
7476 theonlymir 243
butUnit:
244
   push eax ebx ecx
8346 IgorA 245
   mcall SF_THREAD_INFO, pi, -1
7473 theonlymir 246
 
7476 theonlymir 247
   mov eax, dword[pi+34]
248
   add eax, Otstup+80+30+delta
249
   mov word[coordUnit.x], ax
7473 theonlymir 250
 
7476 theonlymir 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
 
7483 theonlymir 259
butDevice:
260
   push eax ebx ecx
8346 IgorA 261
   mcall SF_THREAD_INFO, pi, -1
7483 theonlymir 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
 
7471 theonlymir 276
delta = 50
7473 theonlymir 277
dy = 15 + 40
278
warning_title: db 'Warning!',0
279
draw_warningWindow:
280
   ret
281
 
7471 theonlymir 282
draw_window:
8346 IgorA 283
   mcall  SF_REDRAW, SSF_BEGIN_DRAW
7471 theonlymir 284
 
8346 IgorA 285
        mov     eax, SF_CREATE_WINDOW           ; define and draw window
7471 theonlymir 286
        mov     ebx, 100 * 65536 + (290+delta)  ; [x start] *65536 + [x size]
287
        mov     ecx, 100 * 65536 + (310+dy)  ; [y start] *65536 + [y size]
7476 theonlymir 288
        mov     edx,[sc.work]    ;0x14FFFFFF
289
        add     edx, 0x14000000         ; color of work area RRGGBB
7471 theonlymir 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
 
7476 theonlymir 297
        mov esi, 0xAABBCC
8346 IgorA 298
        mcall SF_DEFINE_BUTTON, (290+delta-Otstup-130+10)*65536+130, (270+dy)*65536+(20+3), 2
7471 theonlymir 299
 
8346 IgorA 300
        inc edx
301
        mcall , (290+delta-Otstup-50-2)*65536+(50+2), (210+dy)*65536+21 ;14
7471 theonlymir 302
 
7473 theonlymir 303
        ;button select FS
8346 IgorA 304
        inc edx
7476 theonlymir 305
        mov esi, 0xFFFFFF
8346 IgorA 306
        mcall , Otstup*65536+120, (110)*65536+(21)
7473 theonlymir 307
 
7476 theonlymir 308
        ;button select unit size
8346 IgorA 309
        inc edx
310
        mcall , (Otstup+80+30+delta)*65536+120, (110)*65536+(21)
7476 theonlymir 311
 
7483 theonlymir 312
        ;button select device
8346 IgorA 313
        inc edx
314
        mcall , (Otstup+80+30+delta)*65536+120, (60)*65536+(21)
7483 theonlymir 315
 
7471 theonlymir 316
       invoke check_box_draw, ch1  ;рисование чекбоксов
317
       invoke check_box_draw, ch2
318
 
319
       invoke  edit_box_draw, editMBR     ;рисование edit box'ов
7483 theonlymir 320
       invoke  edit_box_draw, editLabel
7471 theonlymir 321
 
7483 theonlymir 322
       call draw_super_text
7471 theonlymir 323
 
7476 theonlymir 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
 
8346 IgorA 335
        mcall SF_REDRAW, SSF_END_DRAW
7471 theonlymir 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
 
7473 theonlymir 346
 
347
browse db '...', 0
348
 
7476 theonlymir 349
if lang eq ru  ;RU language
7471 theonlymir 350
 
351
title   db  "Formatting Disk Utility", 0
352
 
7476 theonlymir 353
ch_text:       ;text for CheckBoxs
7471 theonlymir 354
.1 db 'Џ®«­®Ґ Ё ¤®«Ј®Ґ д®а¬ вЁа®ў ­ЁҐ',0
355
.2 db '‘®§¤ вм § Ја㧮з­л© ¤ЁбЄ, § ЇЁбм MBR:',0
356
 
357
text:
358
  .volume db 'ЊҐвЄ  ⮬ :', 0
359
  .fs     db '” ©«®ў п бЁб⥬ :', 0
7476 theonlymir 360
  .disk   db 'Ќ Є®ЇЁвҐ«м:', 0 ;'…¬Є®бвм:', 0
7471 theonlymir 361
  .unit   db 'ђ §¬Ґа Є« бвҐа :', 0
362
  .option db 'Џ а ¬Ґвал:', 0
363
  .format db '”®а¬ вЁа®ў вм', 0
364
 
7483 theonlymir 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
 
7476 theonlymir 375
else           ;EN language
7471 theonlymir 376
 
377
title   db  "Formatting Disk Utility", 0
378
 
7476 theonlymir 379
ch_text:
7471 theonlymir 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
7476 theonlymir 386
  .disk   db 'Storage device:', 0 ;'Capacity:', 0
7471 theonlymir 387
  .unit   db 'Allocation unit size:', 0
388
  .option db 'Options:', 0
389
  .format db 'Format', 0
390
 
7483 theonlymir 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
 
7471 theonlymir 401
end if
402
 
403
 
7483 theonlymir 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
 
8346 IgorA 426
   mcall SF_SYS_MISC, SSF_HEAP_INIT
7483 theonlymir 427
 
8346 IgorA 428
   mcall SF_SYS_MISC, SSF_MEM_ALLOC, sizeBDVK*maxDeviceCount+32
7483 theonlymir 429
   mov dword[read_folder_struct.return], eax
8346 IgorA 430
   mcall SF_FILE, read_folder_struct
7483 theonlymir 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
 
7471 theonlymir 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
8346 IgorA 476
   mcall SF_DRAW_TEXT
7471 theonlymir 477
 
478
   mov     ebx, Otstup * 65536 + 99-6
479
   mov     edx, text.fs
480
   mov     esi, 12
8346 IgorA 481
   mcall SF_DRAW_TEXT
7471 theonlymir 482
 
483
   mov     ebx, (Otstup+80+30+delta) * 65536 + 99-6
484
   mov     edx, text.unit
485
   mov     esi, 21
8346 IgorA 486
   mcall SF_DRAW_TEXT
7471 theonlymir 487
 
488
   mov     ebx, (Otstup+80+30+delta) * 65536 + 49-6
489
   mov     edx, text.disk
490
   mov     esi, 9
8346 IgorA 491
   mcall SF_DRAW_TEXT
7471 theonlymir 492
 
7476 theonlymir 493
;   mov     ebx, Otstup * 65536 + (151-6+dy)
494
;   mov     edx, text.option
495
;   mov     esi, 8
8346 IgorA 496
;   mcall SF_DRAW_TEXT
7476 theonlymir 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:
8346 IgorA 543
   mcall SF_DRAW_TEXT
7471 theonlymir 544
 
7473 theonlymir 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
8346 IgorA 576
   mcall SF_DRAW_TEXT
7473 theonlymir 577
 
7483 theonlymir 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
8346 IgorA 585
   mcall SF_DRAW_TEXT
7483 theonlymir 586
 
7471 theonlymir 587
   ;buttons text
7483 theonlymir 588
   mov     ebx, (290+delta-Otstup-130+10+2+10) * 65536 + (277-3+dy)
7473 theonlymir 589
   mov     ecx, 0x90FFFFFF
7471 theonlymir 590
   mov eax, text.format
591
   mov     edx, eax
592
   mov     esi, 6
8346 IgorA 593
   mcall SF_DRAW_TEXT
7471 theonlymir 594
 
7473 theonlymir 595
   mov     ebx, (290+delta-Otstup-52+6+8) * 65536 + (213+dy)
7471 theonlymir 596
   ;mov     ecx, 0xFFFFFF
7473 theonlymir 597
   mov eax, browse ;text.browse
7471 theonlymir 598
   mov     edx, eax
599
   mov     esi, 6
8346 IgorA 600
   mcall SF_DRAW_TEXT
7471 theonlymir 601
 
602
   pop esi edi edx ecx ebx eax
603
   ret
604
 
7476 theonlymir 605
 
7483 theonlymir 606
 
7471 theonlymir 607
Buf:
608
  .1 db 'NONAME18',0,0
7483 theonlymir 609
  ;.3 db 'hd0 [4Gb]',0,0 ;100 dup(0)
9587 vitalkrilo 610
  .5 rb 512 ;db '/sys/format/fat32mbr.bin', 0, 0
7471 theonlymir 611
 
7476 theonlymir 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
7471 theonlymir 618
 
7476 theonlymir 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
@@:
7471 theonlymir 630
 
7476 theonlymir 631
   pop ecx eax
632
   ret
7471 theonlymir 633
 
7476 theonlymir 634
 
635
 
7471 theonlymir 636
copyPath:
637
   push eax ebx ecx edx ;copy file name path
7476 theonlymir 638
        mov eax, openfile_path
7471 theonlymir 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
 
9587 vitalkrilo 700
default_dir db '/sys',0 ;директория по умолчанию
7471 theonlymir 701
communication_area_name: db 'FFFFFFFF_open_dialog',0
702
open_dialog_name:  db 'opendial',0
9587 vitalkrilo 703
communication_area_default_path: db '/sys/File managers/',0
7471 theonlymir 704
 
705
Filter:
706
dd Filter.end - Filter.1
707
.1:
708
;db 'BIN',0
709
.end:
710
db 0
711
 
712
 
7476 theonlymir 713
align 16
714
@IMPORT:
715
library box_lib, 'box_lib.obj'
716
 
717
import  box_lib,\
9568 IgorA 718
        edit_box_draw,          'edit_box_draw',\
7476 theonlymir 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
 
7471 theonlymir 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
8346 IgorA 753
import_proclib:
7471 theonlymir 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
 
7476 theonlymir 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
 
7471 theonlymir 801
;symbolDownArrow db 25,0
802
 
7473 theonlymir 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
 
7471 theonlymir 814
l_libs_start:
8346 IgorA 815
    lib0 l_libs lib0_name, file_name, system_dir0, import_proclib
816
    lib1 l_libs lib1_name, file_name, system_dir0, import_libkmenu
7471 theonlymir 817
load_lib_end:
818
 
819
;размеры: 80 и 120
7483 theonlymir 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
7476 theonlymir 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
7471 theonlymir 823
 
824
data_of_code dd 0
825
 
826
sc  system_colors
827
mouse_dd  rd 1
828
 
7473 theonlymir 829
coord:
830
  .x: rw 1
831
  .y: rw 1
832
 
7476 theonlymir 833
coordUnit:
834
  .x: rw 1
835
  .y: rw 1
836
 
7483 theonlymir 837
coordDevice:
838
  .x: rw 1
839
  .y: rw 1
840
 
841
kmDeviceID: rd 1
842
kmDevice: rd 1
843
 
7476 theonlymir 844
kmUnitID: rd 1
845
kmUnit: rd 1
846
 
7473 theonlymir 847
kmID: rb 1 ;номер выбранного пункта
848
kmFS: rd 1
849
mbr: rb 512
850
 
7471 theonlymir 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
7473 theonlymir 858
pi rb 1024
7471 theonlymir 859
 
7483 theonlymir 860
deviceAdrStr: rd maxDeviceCount
861
 
7471 theonlymir 862
I_END:
7476 theonlymir 863
        rb 256
864
align 4
7471 theonlymir 865
STACKTOP:
866
MEM: