Subversion Repositories Kolibri OS

Rev

Rev 7473 | Go to most recent revision | Details | Last modification | View Log | RSS feed

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