Subversion Repositories Kolibri OS

Rev

Rev 7476 | Rev 8346 | Go to most recent revision | 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'
47
include '../../dll.inc'
7476 theonlymir 48
include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;for uses checkBox and editBox
49
include '../../develop/libraries/box_lib/load_lib.mac'
7471 theonlymir 50
@use_library
51
 
52
START:
7476 theonlymir 53
   mcall 48,3,sc,sizeof.system_colors ;get system colors
7471 theonlymir 54
 
55
   stdcall dll.Load, @IMPORT
56
   or      eax, eax
57
   jnz     exit
58
 
7476 theonlymir 59
   load_libraries l_libs_start,load_lib_end
60
   stdcall [OpenDialog_Init],OpenDialog_data
7471 theonlymir 61
 
7476 theonlymir 62
   ;set mask for events:
63
   ;сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
64
   mcall 40, 0x27
7471 theonlymir 65
 
66
   mov ecx,[sc.work_text]
67
   and ecx, 0x9FFFFFFF
68
   or  ecx,0x90000000
7476 theonlymir 69
 
70
   call initBuf
71
 
7483 theonlymir 72
   mov dword[editLabel.text_color], ecx
7471 theonlymir 73
   mov dword[editMBR.text_color], ecx
74
 
75
   invoke init_checkbox, ch1
76
   invoke init_checkbox, ch2
77
 
7476 theonlymir 78
   stdcall [kmenu_init], sc
79
   stdcall [ksubmenu_new]
80
   mov [kmFS], eax
7473 theonlymir 81
 
7476 theonlymir 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
7473 theonlymir 93
 
7476 theonlymir 94
   stdcall [kmenuitem_new], KMENUITEM_SUBMENU, kmFat16, [kmFS]
7473 theonlymir 95
 
96
 
7476 theonlymir 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]
7471 theonlymir 117
 
7483 theonlymir 118
   call getDeviceList
119
 
7476 theonlymir 120
   call  draw_window
121
 
7471 theonlymir 122
event_wait:
7476 theonlymir 123
   mcall 10
7471 theonlymir 124
 
7476 theonlymir 125
   cmp     eax, 1       ; Event redraw
126
   je      redraw
7471 theonlymir 127
 
7476 theonlymir 128
   cmp     eax, 2       ; Event key in buffer ?
129
   je      key
7471 theonlymir 130
 
7476 theonlymir 131
   cmp     eax, 3       ; Event button in buffer ?
132
   je      button
7471 theonlymir 133
 
7476 theonlymir 134
   cmp     eax, 6       ; Event mouse in buffer ?
135
   je      mouse
7471 theonlymir 136
 
7476 theonlymir 137
   jmp  event_wait
7471 theonlymir 138
 
139
 
7476 theonlymir 140
redraw:
141
   call    draw_window
142
   jmp     event_wait
7473 theonlymir 143
 
7471 theonlymir 144
key:
7476 theonlymir 145
   mcall 2
7483 theonlymir 146
   invoke  edit_box_key, editLabel
7476 theonlymir 147
   invoke  edit_box_key, editMBR
148
   jmp     event_wait
7471 theonlymir 149
 
150
button:
7473 theonlymir 151
    mcall 17
7471 theonlymir 152
 
7476 theonlymir 153
    cmp ah, 1         ;Close button
154
    jne @f
7471 theonlymir 155
exit:
7473 theonlymir 156
    mcall -1
7476 theonlymir 157
@@:
7473 theonlymir 158
   cmp ah, 2          ;Format button
7476 theonlymir 159
   jne @f
7473 theonlymir 160
   call butFormat
161
   jmp event_wait
7476 theonlymir 162
@@:
7473 theonlymir 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
@@:
7476 theonlymir 173
   cmp ah, 5          ;Select unit size button
174
   jne @f
175
   call butUnit
176
   jmp event_wait
177
@@:
7483 theonlymir 178
   cmp ah, 6          ;Select Device button
179
   jne @f
180
   call butDevice
181
   jmp event_wait
182
@@:
7473 theonlymir 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
7476 theonlymir 189
   jmp redraw
7473 theonlymir 190
@@:
7476 theonlymir 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
@@:
7483 theonlymir 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
@@:
7473 theonlymir 207
   jmp event_wait
7471 theonlymir 208
 
7476 theonlymir 209
mouse:
210
   invoke check_box_mouse, ch1  ;проверка чек бокса
211
   invoke check_box_mouse, ch2
7473 theonlymir 212
 
7483 theonlymir 213
   invoke  edit_box_mouse, editLabel   ;проверка событий мыши для editBox'ов
7476 theonlymir 214
   invoke  edit_box_mouse, editMBR
215
 
216
   stdcall [kmainmenu_dispatch_cursorevent], [kmFS]
217
   jmp event_wait
218
 
7473 theonlymir 219
butBrouse:
7471 theonlymir 220
   call but_open_dlg
221
   ret
7473 theonlymir 222
 
223
butFormat:
7471 theonlymir 224
   ret
225
 
7473 theonlymir 226
butSelectFS:
227
   push eax ebx ecx
228
   mcall 9, pi, -1 ;get window coord
7471 theonlymir 229
 
7473 theonlymir 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
 
7476 theonlymir 242
butUnit:
243
   push eax ebx ecx
244
   mcall 9, pi, -1
7473 theonlymir 245
 
7476 theonlymir 246
   mov eax, dword[pi+34]
247
   add eax, Otstup+80+30+delta
248
   mov word[coordUnit.x], ax
7473 theonlymir 249
 
7476 theonlymir 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
 
7483 theonlymir 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
 
7471 theonlymir 275
delta = 50
7473 theonlymir 276
dy = 15 + 40
277
warning_title: db 'Warning!',0
278
draw_warningWindow:
279
   ret
280
 
7471 theonlymir 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]
7476 theonlymir 287
        mov     edx,[sc.work]    ;0x14FFFFFF
288
        add     edx, 0x14000000         ; color of work area RRGGBB
7471 theonlymir 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
 
7483 theonlymir 296
        mov ebx, (290+delta-Otstup-130+10)*65536+130
7471 theonlymir 297
        mov ecx, (270+dy)*65536+(20+3)
7476 theonlymir 298
        mov edx, 0x00000002
299
        mov esi, 0xAABBCC
7471 theonlymir 300
        mcall 8
301
 
302
        mov ebx, (290+delta-Otstup-50-2)*65536+(50+2)
303
        mov ecx, (210+dy)*65536+21 ;14
7476 theonlymir 304
        mov edx, 0x00000003
305
        mov esi, 0xAABBCC
7471 theonlymir 306
        mcall 8
307
 
7473 theonlymir 308
        ;button select FS
309
        mov ebx, Otstup*65536+120
310
        mov ecx, (110)*65536+(21)
311
        mov edx, 0x00000004
7476 theonlymir 312
        mov esi, 0xFFFFFF
7473 theonlymir 313
        mcall 8
314
 
7476 theonlymir 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
 
7483 theonlymir 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
 
7471 theonlymir 329
       invoke check_box_draw, ch1  ;рисование чекбоксов
330
       invoke check_box_draw, ch2
331
 
332
       invoke  edit_box_draw, editMBR     ;рисование edit box'ов
7483 theonlymir 333
       invoke  edit_box_draw, editLabel
7471 theonlymir 334
 
7483 theonlymir 335
       call draw_super_text
7471 theonlymir 336
 
7476 theonlymir 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
 
7471 theonlymir 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
 
7473 theonlymir 359
 
360
browse db '...', 0
361
 
7476 theonlymir 362
if lang eq ru  ;RU language
7471 theonlymir 363
 
364
title   db  "Formatting Disk Utility", 0
365
 
7476 theonlymir 366
ch_text:       ;text for CheckBoxs
7471 theonlymir 367
.1 db 'Џ®«­®Ґ Ё ¤®«Ј®Ґ д®а¬ вЁа®ў ­ЁҐ',0
368
.2 db '‘®§¤ вм § Ја㧮з­л© ¤ЁбЄ, § ЇЁбм MBR:',0
369
 
370
text:
371
  .volume db 'ЊҐвЄ  ⮬ :', 0
372
  .fs     db '” ©«®ў п бЁб⥬ :', 0
7476 theonlymir 373
  .disk   db 'Ќ Є®ЇЁвҐ«м:', 0 ;'…¬Є®бвм:', 0
7471 theonlymir 374
  .unit   db 'ђ §¬Ґа Є« бвҐа :', 0
375
  .option db 'Џ а ¬Ґвал:', 0
376
  .format db '”®а¬ вЁа®ў вм', 0
377
 
7483 theonlymir 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
 
7471 theonlymir 388
head_f_i:
7476 theonlymir 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
7471 theonlymir 394
 
7476 theonlymir 395
else           ;EN language
7471 theonlymir 396
 
397
title   db  "Formatting Disk Utility", 0
398
 
7476 theonlymir 399
ch_text:
7471 theonlymir 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
7476 theonlymir 406
  .disk   db 'Storage device:', 0 ;'Capacity:', 0
7471 theonlymir 407
  .unit   db 'Allocation unit size:', 0
408
  .option db 'Options:', 0
409
  .format db 'Format', 0
410
 
7483 theonlymir 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
 
7471 theonlymir 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
 
7483 theonlymir 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
 
7471 theonlymir 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
 
7476 theonlymir 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:
7471 theonlymir 570
   mcall 4
571
 
7473 theonlymir 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
 
7483 theonlymir 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
 
7471 theonlymir 614
   ;buttons text
7483 theonlymir 615
   mov     ebx, (290+delta-Otstup-130+10+2+10) * 65536 + (277-3+dy)
7473 theonlymir 616
   mov     ecx, 0x90FFFFFF
7471 theonlymir 617
   mov eax, text.format
618
   mov     edx, eax
619
   mov     esi, 6
620
   mcall 4
621
 
7473 theonlymir 622
   mov     ebx, (290+delta-Otstup-52+6+8) * 65536 + (213+dy)
7471 theonlymir 623
   ;mov     ecx, 0xFFFFFF
7473 theonlymir 624
   mov eax, browse ;text.browse
7471 theonlymir 625
   mov     edx, eax
626
   mov     esi, 6
627
   mcall 4
628
 
629
   pop esi edi edx ecx ebx eax
630
   ret
631
 
7476 theonlymir 632
 
7483 theonlymir 633
 
7471 theonlymir 634
Buf:
635
  .1 db 'NONAME18',0,0
7483 theonlymir 636
  ;.3 db 'hd0 [4Gb]',0,0 ;100 dup(0)
7476 theonlymir 637
  .5 rb 512 ;db '/rd/1/format/fat32mbr.bin', 0, 0
7471 theonlymir 638
 
7476 theonlymir 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
7471 theonlymir 645
 
7476 theonlymir 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
@@:
7471 theonlymir 657
 
7476 theonlymir 658
   pop ecx eax
659
   ret
7471 theonlymir 660
 
7476 theonlymir 661
 
662
 
7471 theonlymir 663
copyPath:
664
   push eax ebx ecx edx ;copy file name path
7476 theonlymir 665
        mov eax, openfile_path
7471 theonlymir 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
 
7476 theonlymir 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
 
7471 theonlymir 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
 
7476 theonlymir 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
 
7471 theonlymir 828
;symbolDownArrow db 25,0
829
 
7473 theonlymir 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
 
7471 theonlymir 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
7483 theonlymir 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
7476 theonlymir 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
7471 theonlymir 850
 
851
data_of_code dd 0
852
 
853
sc  system_colors
854
mouse_dd  rd 1
855
 
7473 theonlymir 856
coord:
857
  .x: rw 1
858
  .y: rw 1
859
 
7476 theonlymir 860
coordUnit:
861
  .x: rw 1
862
  .y: rw 1
863
 
7483 theonlymir 864
coordDevice:
865
  .x: rw 1
866
  .y: rw 1
867
 
868
kmDeviceID: rd 1
869
kmDevice: rd 1
870
 
7476 theonlymir 871
kmUnitID: rd 1
872
kmUnit: rd 1
873
 
7473 theonlymir 874
kmID: rb 1 ;номер выбранного пункта
875
kmFS: rd 1
876
mbr: rb 512
877
 
7471 theonlymir 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
7473 theonlymir 885
pi rb 1024
7471 theonlymir 886
 
7483 theonlymir 887
deviceAdrStr: rd maxDeviceCount
888
 
7471 theonlymir 889
I_END:
7476 theonlymir 890
        rb 256
891
align 4
7471 theonlymir 892
STACKTOP:
893
MEM: