kolibrios/programs/system/format/format.asm
theonlymirage 4c3f6d21d8 Format: add select menu button for FS
git-svn-id: svn://kolibrios.org@7473 a494cfbc-eb01-0410-851d-a64ba20cac60
2018-10-17 00:06:07 +00:00

610 lines
18 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Formatting Disk Utility ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Compile with FASM
; FORMAT ver. Oct 17, 2018
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
; All rights reserved.
; Redistribution and use in source and binary forms, with or without modification,
; are permitted provided that the following conditions are met:
; * Redistributions of source code must retain the above copyright notice, this
; list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright notice,
; this list of conditions and the following disclaimer in the documentation and/or
; other materials provided with the distribution.
; * Neither the name of the <organization> nor the names of its contributors may
; be used to endorse or promote products derived from this software without
; specific prior written permission.
; THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
; INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
; PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
; --------------------------------------------------------------------------------------
format binary as ""
use32
org 0
db 'MENUET01'
dd 1
dd START
dd I_END
dd MEM
dd STACKTOP
dd 0, 0
KMENUITEM_NORMAL equ 0
KMENUITEM_SUBMENU equ 1
KMENUITEM_SEPARATOR equ 2
include 'lang.inc'
include '../../macros.inc'
include '../../proc32.inc'
include '../../dll.inc'
include '../../develop/libraries/box_lib/trunk/box_lib.mac' ;êîìïîíåíòû checkBox è editBox
include '../../develop/libraries/box_lib/load_lib.mac' ;ìàêðîñ äëÿ çàãðóçêè áèáëèîòåê
@use_library
START:
mcall 48,3,sc,sizeof.system_colors ;ïîëó÷èòü ñèñòåìíûå öâåòà
stdcall dll.Load, @IMPORT
or eax, eax
jnz exit
load_libraries l_libs_start,load_lib_end ;çàãðóçêà áèáëèîòåê(è)
stdcall [OpenDialog_Init],OpenDialog_data ;ïîäãîòîâêà äèàëîãà
mov eax,40 ;óñòàíîâèòü ìàñêó äëÿ îæèäàåìûõ ñîáûòèé
mov ebx,0x27 ;ñèñòåìà áóäåò ðåàãèðîâàòü òîëüêî íà ñîîáùåíèå î ïåðåðèñîâêå,íàæàòà êíîïêà, îïðåäåë¸ííàÿ ðàíåå, ñîáûòèå îò ìûøè (÷òî-òî ñëó÷èëîñü - íàæàòèå íà êíîïêó ìûøè èëè ïåðåìåùåíèå; ñáðàñûâàåòñÿ ïðè ïðî÷òåíèè)
mcall
mov ecx,[sc.work_text]
and ecx, 0x9FFFFFFF
or ecx,0x90000000
;mov ecx, 0x90000000
mov dword[editLU.text_color], ecx
;mov dword[editLD.text_color], ecx
mov dword[editRU.text_color], ecx
mov dword[editRD.text_color], ecx
mov dword[editMBR.text_color], ecx
invoke init_checkbox, ch1
invoke init_checkbox, ch2
stdcall [kmenu_init], sc ;kmenu initialisation
stdcall [ksubmenu_new]
mov [kmFS], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmFat16, 111
stdcall [ksubmenu_add], [kmFS], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmFat32, 112
stdcall [ksubmenu_add], [kmFS], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmNTFS, 113
stdcall [ksubmenu_add], [kmFS], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmExt2, 114
stdcall [ksubmenu_add], [kmFS], eax
;stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0
;stdcall [ksubmenu_add], [kmFS], eax
stdcall [kmenuitem_new], KMENUITEM_NORMAL, kmNone, 110
stdcall [ksubmenu_add], [kmFS], eax
stdcall [kmenuitem_new], KMENUITEM_SUBMENU, kmFat16, [kmFS] ;çàãîëîâîê
call draw_window ; draw the window
event_wait:
mov eax, 10 ; function 10 : wait until event
mcall ; event type is returned in eax
cmp eax, 1 ; Event redraw request ?
je red ; Expl.: there has been activity on screen and
; parts of the applications has to be redrawn.
cmp eax, 2 ; Event key in buffer ?
je key ; Expl.: User has pressed a key while the
; app is at the top of the window stack.
cmp eax, 3 ; Event button in buffer ?
je button ; Expl.: User has pressed one of the
; applications buttons.
invoke check_box_mouse, ch1 ;ïðîâåðêà ÷åê áîêñà
invoke check_box_mouse, ch2
invoke edit_box_mouse, editLU ;ïðîâåðêà ñîáûòèé ìûøè äëÿ editBox'îâ
;invoke edit_box_mouse, editLD
invoke edit_box_mouse, editRU
invoke edit_box_mouse, editRD
invoke edit_box_mouse, editMBR
stdcall [kmainmenu_dispatch_cursorevent], [kmFS]
jmp event_wait
red: ; Redraw event handler
call draw_window ; We call the window_draw function and
jmp event_wait ; jump back to event_wait
key:
mcall 2
invoke edit_box_key, editLU
;invoke edit_box_key, editLD
invoke edit_box_key, editRU
invoke edit_box_key, editRD
invoke edit_box_key, editMBR
jmp event_wait ; Just read the key, ignore it and jump to event_wait.
button:
mcall 17
cmp ah,1 ; button id=1 ?
jne noclose
exit:
mcall -1
noclose:
cmp ah, 2 ;Format button
jne no_format
call butFormat
jmp event_wait
no_format:
cmp ah, 3 ;Brouse button
jne @f
call butBrouse
jmp event_wait
@@:
cmp ah, 4 ;Select FS button
jne @f
call butSelectFS
jmp event_wait
@@:
cmp ah, 110 ;kmenu list FS
jb @f
cmp ah, 114
ja @f
sub ah, 110
mov byte[kmID], ah
jmp red ;event_wait
@@:
jmp event_wait
butBrouse:
call but_open_dlg
ret
butFormat:
ret
butSelectFS:
push eax ebx ecx
mcall 9, pi, -1 ;get window coord
mov eax, dword[pi+34]
add eax, Otstup
mov word[coord.x], ax
mov eax, dword[pi+38]
add eax, 129
mov word[coord.y], ax
stdcall [ksubmenu_draw], [kmFS], coord
pop ecx ebx eax
ret
delta = 50
dy = 15 + 40
warning_title: db 'Warning!',0
draw_warningWindow:
mcall 12, 1
mov ebx, 100 * 65536 + (200) ; [x start] *65536 + [x size]
mov ecx, 100 * 65536 + (90) ; [y start] *65536 + [y size]
mov edx, 0x14ffffff ; color of work area RRGGBB
; 0x02000000 = window type 4 (fixed size, skinned window)
mov esi, 0x808899ff ; color of grab bar RRGGBB
; 0x80000000 = color glide
mov edi, warning_title
mcall 0
mcall 12, 2
ret
draw_window:
mcall 12, 1
;óäàëÿåì êíîïêè, åñëè åñòü
mov edx, 0x80000002
mcall 8
mov edx, 0x80000003
mcall 8
mov edx, 0x80000004
mcall 8
mov eax, 0 ; function 0 : define and draw window
mov ebx, 100 * 65536 + (290+delta) ; [x start] *65536 + [x size]
mov ecx, 100 * 65536 + (310+dy) ; [y start] *65536 + [y size]
mov edx, 0x14ffffff ; color of work area RRGGBB
; 0x02000000 = window type 4 (fixed size, skinned window)
mov esi, 0x808899ff ; color of grab bar RRGGBB
; 0x80000000 = color glide
mov edi, title
mcall
mov ebx, (290+delta-Otstup-130)*65536+130
mov ecx, (270+dy)*65536+(20+3)
mov edx, 0x00000002 ;2
mov esi, 0xAABBCC ;4466AA
mcall 8
mov ebx, (290+delta-Otstup-50-2)*65536+(50+2)
mov ecx, (210+dy)*65536+21 ;14
mov edx, 0x00000003 ;3
mov esi, 0xAABBCC ;D7D7D7 ;4466AA
mcall 8
;button select FS
mov ebx, Otstup*65536+120
mov ecx, (110)*65536+(21)
mov edx, 0x00000004
mov esi, 0xFFFFFF ;AABBCC
mcall 8
invoke check_box_draw, ch1 ;ðèñîâàíèå ÷åêáîêñîâ
invoke check_box_draw, ch2
invoke edit_box_draw, editMBR ;ðèñîâàíèå edit box'îâ
invoke edit_box_draw, editLU
;invoke edit_box_draw, editLD
invoke edit_box_draw, editRU
invoke edit_box_draw, editRD
call draw_super_text
mcall 12, 2
ret
Otstup = 30
;öâåò 0x224466 çàìåí¸í 0x90000000 è â ôèíàëå íà 0
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
ch2 check_box2 Otstup shl 16 + 12, (190+dy) shl 16 + 12, 6, 0xFFFFFFFF, 0xAABBCC, 0, ch_text.2, 100b
browse db '...', 0
if lang eq ru ;åñëè ÿçûê ñáîðêè ðóññêèé
title db "Formatting Disk Utility", 0
ch_text: ;ñîïðîâîæäàþùèé òåêñò äëÿ ÷åê áîêñîâ
.1 db '<27>®«­®¥ ¨ ¤®«£®¥ ä®à¬ â¨à®¢ ­¨¥',0
.2 db '‘®§¤ âì § £à㧮ç­ë© ¤¨áª, § ¯¨áì MBR:',0
text:
.volume db 'Œ¥âª  ⮬ :', 0
.fs db '” ©«®¢ ï á¨á⥬ :', 0
.disk db '…¬ª®áâì:', 0
.unit db '<27> §¬¥à ª« áâ¥à :', 0
.option db '<27> à ¬¥âàë:', 0
.format db '”®à¬ â¨à®¢ âì', 0
; .browse db 'Ž¡§®à', 0
head_f_i:
head_f_l db '‘¨á⥬­ ï ®è¨¡ª ',0
err_message_found_lib0 db '<27>¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'proc_lib.obj',39,0
err_message_import0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0
err_message_found_lib1 db '<27>¥ ­ ©¤¥­  ¡¨¡«¨®â¥ª  ',39,'kmenu.obj',39,0
err_message_import1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'kmenu',39,0
else ;èíà÷å àíãëèéñêèé òåêñò
title db "Formatting Disk Utility", 0
ch_text: ;ñîïðîâîæäàþùèé òåêñò äëÿ ÷åê áîêñîâ
.1 db 'Full and long disk formatting',0
.2 db 'Create startup disk, write MBR:',0
text:
.volume db 'Volume Label:', 0
.fs db 'File System:', 0
.disk db 'Capacity:', 0
.unit db 'Allocation unit size:', 0
.option db 'Options:', 0
.format db 'Format', 0
; .browse db 'Browse', 0
head_f_i:
head_f_l db 'System error',0
err_message_found_lib0 db 'Could not find library ',39,'proc_lib.obj',39,0
err_message_import0 db 'Error importing library ',39,'proc_lib.obj',39,0
err_message_found_lib1 db 'Could not find library ',39,'kmenu.obj',39,0
err_message_import1 db 'Error importing library ',39,'kmenu',39,0
end if
draw_super_text:
push eax ebx ecx edx edi esi
mov ebx, Otstup * 65536 + 49-6 ; draw info text with function 4 (x, y)
mov ecx, 0x90000000 ;0x90224466 ;0x224466
mov eax, text.volume
mov edx, eax
mov esi, 13
mcall 4
mov ebx, Otstup * 65536 + 99-6
mov edx, text.fs
mov esi, 12
mcall 4
mov ebx, (Otstup+80+30+delta) * 65536 + 99-6
mov edx, text.unit
mov esi, 21
mcall 4
mov ebx, (Otstup+80+30+delta) * 65536 + 49-6
mov edx, text.disk
mov esi, 9
mcall 4
mov ebx, Otstup * 65536 + (151-6+dy)
mov edx, text.option
mov esi, 8
mcall 4
mov ebx, (Otstup+5) * 65536 + (110+3)
mov dl, byte[kmID]
cmp dl, 0
jne @f
mov edx, kmNone
jmp .printFS
@@:
cmp dl, 1
jne @f
mov edx, kmFat16
jmp .printFS
@@:
cmp dl, 2
jne @f
mov edx, kmFat32
jmp .printFS
@@:
cmp dl, 3
jne @f
mov edx, kmNTFS
jmp .printFS
@@:
cmp dl, 4
jne @f
mov edx, kmExt2
jmp .printFS
@@:
mov byte[kmID], 0
mov edx, kmNone
.printFS:
;mov esi, 8
mcall 4
;buttons text
mov ebx, (290+delta-Otstup-130+10+2) * 65536 + (277-3+dy)
mov ecx, 0x90FFFFFF
mov eax, text.format
mov edx, eax
mov esi, 6
mcall 4
mov ebx, (290+delta-Otstup-52+6+8) * 65536 + (213+dy)
;mov ecx, 0xFFFFFF
mov eax, browse ;text.browse
mov edx, eax
mov esi, 6
mcall 4
pop esi edi edx ecx ebx eax
ret
Buf:
.1 db 'NONAME18',0,0
.2 db 'FAT',0,0 ;100 dup(0)
.3 db 'hd0 [FAT32: 4Gb]',0,0 ;100 dup(0)
.4 db '4096',0,0 ;100 dup(0)
.5 db '/rd/1/format/fat32mbr.bin', 0, 0
rb 256
align 16
@IMPORT:
library box_lib, 'box_lib.obj'
import box_lib,\
edit_box_draw, 'edit_box',\
edit_box_key, 'edit_box_key',\
edit_box_mouse, 'edit_box_mouse',\
init_checkbox, 'init_checkbox2',\
check_box_draw, 'check_box_draw2',\
check_box_mouse, 'check_box_mouse2',\
option_box_draw, 'option_box_draw',\
option_box_mouse, 'option_box_mouse'
copyPath:
push eax ebx ecx edx ;copy file name path
mov eax, openfile_path ;dword[OpenDialog_data.openfile_path]
mov ebx, Buf.5
mov ecx, 0
@@:
mov dl, byte[eax]
cmp dl, 0
je @f
mov byte[ebx], dl
inc eax
inc ebx
inc ecx
jmp @b
@@:
mov byte[ebx], 0
;mov dword[Buf.size5], ecx
mov dword[editMBR.size], ecx
mov dword[editMBR.pos], ecx
pop edx ecx ebx eax
ret
align 4
but_open_dlg:
pushad
copy_path open_dialog_name,communication_area_default_path,file_name,0
mov [OpenDialog_data.type],0
stdcall[OpenDialog_Start], OpenDialog_data
cmp [OpenDialog_data.status],2
je @f
cmp [OpenDialog_data.status],0 ;ïîëüçîâàòåëü íàæàë Cancel?
je .end_open
;êîä ïðè óäà÷íîì îòêðûòèè äèàëîãà
;...
call copyPath
jmp .end_open
@@:
;êîä ïðè íå óäà÷íîì îòêðûòèè äèàëîãà
;...
.end_open:
popad
ret
;äàííûå äëÿ äèàëîãà îòêðûòèÿ ôàéëîâ
align 4
OpenDialog_data:
.type dd 0 ;0 - îòêðûòü, 1 - ñîõðàíèòü, 2 - âûáðàòü äèðåêòîðèþ
.procinfo dd procinfo
.com_area_name dd communication_area_name ;+8
.com_area dd 0 ;+12
.opendir_path dd plugin_path ;+16
.dir_default_path dd default_dir ;+20
.start_path dd file_name ;+24 ïóòü ê äèàëîãó îòêðûòèÿ ôàéëîâ
.draw_window dd draw_window ;+28
.status dd 0 ;+32
.openfile_path dd openfile_path ;+36 ïóòü ê îòêðûâàåìîìó ôàéëó
.filename_area dd filename_area ;+40
.filter_area dd Filter
.x:
.x_size dw 420 ;+48 ; Window X size
.x_start dw 10 ;+50 ; Window X position
.y:
.y_size dw 320 ;+52 ; Window y size
.y_start dw 10 ;+54 ; Window Y position
default_dir db '/rd/1',0 ;äèðåêòîðèÿ ïî óìîë÷àíèþ
communication_area_name: db 'FFFFFFFF_open_dialog',0
open_dialog_name: db 'opendial',0
communication_area_default_path: db '/rd/1/File managers/',0
Filter:
dd Filter.end - Filter.1
.1:
;db 'BIN',0
.end:
db 0
;îïèñàíèå ýêñïîðòèðóåìûõ ôóíêöèé
align 4
import_libkmenu:
kmenu_init dd akmenu_init
kmainmenu_draw dd akmainmenu_draw
kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent
ksubmenu_new dd aksubmenu_new
ksubmenu_delete dd aksubmenu_delete
ksubmenu_draw dd aksubmenu_draw
ksubmenu_add dd aksubmenu_add
kmenuitem_new dd akmenuitem_new
kmenuitem_delete dd akmenuitem_delete
kmenuitem_draw dd akmenuitem_draw
dd 0,0
akmenu_init db 'kmenu_init',0
akmainmenu_draw db 'kmainmenu_draw',0
akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0
aksubmenu_new db 'ksubmenu_new',0
aksubmenu_delete db 'ksubmenu_delete',0
aksubmenu_draw db 'ksubmenu_draw',0
aksubmenu_add db 'ksubmenu_add',0
akmenuitem_new db 'kmenuitem_new',0
akmenuitem_delete db 'kmenuitem_delete',0
akmenuitem_draw db 'kmenuitem_draw',0
align 4
proclib_import:
OpenDialog_Init dd aOpenDialog_Init
OpenDialog_Start dd aOpenDialog_Start
dd 0,0
aOpenDialog_Init db 'OpenDialog_init',0
aOpenDialog_Start db 'OpenDialog_start',0
system_dir0 db '/sys/lib/'
lib0_name db 'proc_lib.obj',0
lib1_name db 'kmenu.obj',0
;symbolDownArrow db 25,0
kmNone: db 'None', 0 ;only MBR or ZeroDestroy
;kmFat12: db 'FAT12', 0
kmFat16: db 'FAT16', 0
kmFat32: db 'FAT32', 0
;kmExtFat: db 'EXTFAT', 0
kmNTFS: db 'NTFS', 0
kmExt2: db 'EXT2', 0
;kmExt3: db 'EXT3', 0
;kmExt4: db 'EXT4', 0
;kmXFS: db 'XFS', 0
l_libs_start:
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
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
load_lib_end:
;ðàçìåðû: 80 è 120
editLU edit_box 120,Otstup,60,0xffffff,0x6a9480,0,0xAABBCC,0,8,Buf.1, mouse_dd, 0,8,8
;editLD edit_box 120,Otstup,110,0xffffff,0x6a9480,0,0xAABBCC,0,3,Buf.2, mouse_dd, 0,3,3
editRU edit_box 120,Otstup+80+30+delta,60,0xffffff,0x6a9480,0,0xAABBCC,0,16,Buf.3, mouse_dd, 0,16,16
editRD edit_box 120,Otstup+80+30+delta,110,0xffffff,0x6a9480,0,0xAABBCC,0,4,Buf.4, mouse_dd, 0,4,4
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
data_of_code dd 0
sc system_colors
mouse_dd rd 1
coord:
.x: rw 1
.y: rw 1
kmID: rb 1 ;íîìåð âûáðàííîãî ïóíêòà
kmFS: rd 1
mbr: rb 512
sys_path: rb 4096
file_name: rb 4096
plugin_path: rb 4096
openfile_path: rb 4096
filename_area: rb 256
rb 1024
procinfo process_information
pi rb 1024
I_END:
rb 256 ;4096
STACKTOP:
MEM: