;------------------------------------------------------------------------------
draw_buttons_panel:
mov ecx,[skin_high]
add ecx,19
shl ecx,16
mov cx,18
mov ebx,[window_width]
sub ebx,9
add ebx,5 shl 16
mcall 13,,,0xffffff
mov edx,15 shl 16+20
add edx,[skin_high]
mcall 7,buttons_file_data,<198,16>
mov ecx, 20
add ecx, [skin_high]
shl ecx, 16
add ecx, 16
mcall 8,<15,16>,,150+0x40000000
_new_but:
add ebx,26 shl 16
inc edx
mcall
cmp edx, 157+0x40000000
jl _new_but
ret
;--------------------------------------
.calculate_button:
mov ebx,edx
mov bx,15
mov ecx,edx
shl ecx,16
mov cx,bx
ret
;------------------------------------------------------------------------------
draw_left_sort_button:
mov bx,[left_panel_x.start_x]
add bx,[left_panel_x.size_x]
sub ebx,50+15
mov cx,[left_panel_y.start_y]
call calclulate_sort_button_1
mov edx,145
;--------------------------------------
.start:
mov esi,0xffffff
dec ebp
cmp [left_sort_flag],ebp
jne @f
mov esi,0xccccff
;--------------------------------------
@@:
call calclulate_sort_button_2
jnz .start
ret
;------------------------------------------------------------------------------
calclulate_sort_button_1:
shl ebx,16
mov bx,50
sub cx,14
shl ecx,16
mov cx,12
mov eax,8
mov ebp,4
ret
;------------------------------------------------------------------------------
calclulate_sort_button_2:
inc ebp
mcall
pusha
push ebx
mov eax,ebx
inc eax
shl eax,16
add ebx,eax
cmp ebp,4
jne @f
mov bx,15
jmp .continue
;--------------------------------------
@@:
mov bx,1
;--------------------------------------
.continue:
inc ecx
mcall 13,,,0xcccccc
pop ebx
cmp ebp,1
jne @f
mov eax,[temp_panel_end]
shl eax,16
add eax,[temp_panel_end]
shr eax,16
shr ebx,16
sub ebx,eax
shl ebx,16
mov bx,ax
rol ebx,16
mcall 13
mov [temp_panel_end],ebx
;--------------------------------------
@@:
popa
pusha
shr ecx,16
mov bx,cx
add ebx,3 shl 16+2
mov edx,ebp
dec edx
shl edx,2
add edx,sort_button_name
mov eax,4
xor ecx,ecx
mov esi,eax
mcall
popa
dec edx
sub ebx,38 shl 16
mov bx,36
dec ebp
ret
;------------------------------------------------------------------------------
draw_right_sort_button:
mov bx,[right_panel_x.start_x]
add bx,[right_panel_x.size_x]
sub ebx,50+15
mov cx,[right_panel_y.start_y]
call calclulate_sort_button_1
mov edx,149
;--------------------------------------
.start:
mov esi,0xffffff
dec ebp
cmp [right_sort_flag],ebp
jne @f
mov esi,0xccccff
;--------------------------------------
@@:
call calclulate_sort_button_2
jnz .start
ret
;------------------------------------------------------------------------------
draw_left_select_disk_button:
mov bx,[left_panel_x.start_x]
mov cx,[left_panel_y.start_y]
mov ebp,read_folder_name ;read_folder.name
mov edx,0x40000000+140
;--------------------------------------
.1:
shl ebx,16
mov bx,60
sub cx,14
shl ecx,16
mov cx,13
mcall 8,,,,0xffffff
mcall 13,,,0xffffff
pusha
mov esi,ebp
add esi,2
;--------------------------------------
@@:
inc esi
cmp [esi],byte 0
je @f
cmp [esi],byte '/'
jne @r
add esi,2
;--------------------------------------
@@:
sub esi,ebp ;read_folder.name
add ebx,1 shl 16
shr ecx,16
mov bx,cx
add ebx,3
mov edx,ebp
mcall 4,,0 ;,read_folder.name
popa
add ebx,50 shl 16
mov bx,10
mcall ,,,0x6060ff
mov [temp_panel_end],ebx
add ebx,1 shl 16
shr ecx,16
mov bx,cx
add ebx,3
mcall 4, ,0x80ffffff,select_disk_char
add ebx,1 shl 16
mcall
ret
;------------------------------------------------------------------------------
draw_right_select_disk_button:
mov bx,[right_panel_x.start_x]
mov cx,[right_panel_y.start_y]
mov ebp,read_folder_1_name ;read_folder_1.name
mov edx,0x40000000+141
jmp draw_left_select_disk_button.1
;------------------------------------------------------------------------------
;draw_ATAPI_tray_control:
; ret
;------------------------------------------------------------------------------
calc_max_panel_line:
xor eax,eax
mov ax,[left_panel_y.size_y]
mov ebx,10
xor edx,edx
div ebx
mov [max_panel_line],eax
ret
;------------------------------------------------------------------------------
draw_icon:
pusha
test [edx-40],byte 0x10
jnz .draw_dir_pic
call get_icon_number
imul ebx,270
add ebx,icons_file_data
jmp .draw
;--------------------------------------
.draw_dir_pic:
mov ebx,icons_file_data
cmp [edx],word '..'
jne .draw
add ebx,270 ;*17
;--------------------------------------
.draw:
mov edx,[esp+16] ;ebx
ror edx,16
sub edx,12
rol edx,16
dec edx
mcall 7, ,<10,9>
popa
ret
;------------------------------------------------------------------------------
; ПЕРЕВОД 10-НЫХ ЧИСЕЛ СО ЗНАКОМ В СТРОКОВЫЙ ВИД
; Вход:
; AX - число
; EBX - адрес строки
; Выход:
; строка содержит число, конец отмечен кодом 0
;------------------------------------------------------------------------------
decimal_string_2:
push eax ebx ecx edx
xor ecx,ecx
mov [ebx],byte '0'
inc ebx
;--------------------------------------
.p3:
xor edx,edx
push ebx
mov ebx,10
div ebx
pop ebx
add edx,48
push edx
inc ecx
cmp ax,0
jne .p3
cmp ecx,1
jbe .p4
mov ecx,2
dec ebx
;--------------------------------------
.p4:
pop edx
mov [ebx],dl
inc ebx
loop .p4
pop edx ecx ebx eax
ret
;------------------------------------------------------------------------------
decimal_string_4:
push eax ecx edx
xor ecx,ecx
mov [ebx],byte '0'
inc ebx
;--------------------------------------
.p3:
xor edx,edx
push ebx
mov ebx,10
div ebx
pop ebx
add edx,48
push edx
inc ecx
cmp eax,0
jne .p3
cmp ecx,3
jbe .p4
mov ecx,4
dec ebx
;--------------------------------------
.p4:
pop edx
mov [ebx],dl
inc ebx
loop .p4
pop edx ecx eax
ret
;------------------------------------------------------------------------------
draw_type_size_date:
pusha
test [edx-40],byte 0x10
jz .copy_type
mov [type_table],dword '
'
mov [file_name_length],0
mov [extension_size],0
jmp .start ;.size
;--------------------------------------
.copy_type:
mov [type_table],dword ' '
mov [type_table+4],word ' '
;--------------------------------------
.start:
mov esi,edx
xor eax,eax
;--------------------------------------
@@:
cld
lodsb
test eax,eax
jnz @b
mov [file_name_length],esi
sub [file_name_length],edx
mov [temp_counter_1],esi
test [edx-40],byte 0x10
jnz .size
dec esi
dec edx
;--------------------------------------
@@:
std
lodsb
cmp esi,edx
je .extension_size_0
cmp al,'.'
jnz @b
add esi,2
mov [extension_start],esi
mov ecx,[temp_counter_1]
sub ecx,esi
inc ecx
mov [extension_size],ecx
sub [file_name_length],ecx
cmp ecx,2
ja @f
inc [file_name_length]
;--------------------------------------
@@:
sub ecx,2
cmp ecx,4
jbe @f
mov ecx,4
mov [type_table+4],word '..'
;--------------------------------------
@@:
mov edi,type_table ;+1
cld
rep movsb
mov [edi],byte ' '
inc edx
jmp .size
;--------------------------------------
.extension_size_0:
inc edx
mov [extension_size],0
;--------------------------------------
.size:
test [edx-40],byte 0x10
jz .copy_size
mov [size_table],dword '----'
mov [size_table+4],word '- '
jmp .date
;--------------------------------------
.copy_size:
;/0x40000000 - Gb
;/0x100000 - Mb
;/0x400 Kb
mov [size_table],dword ' '
mov [size_table+4],word ' '
push ebx
push edx
mov eax,[edx-40+32]
mov ebx,0x40000000
xor edx,edx
div ebx
cmp eax,0
je @f
mov ebx,size_table
call decimal_string_4
mov [ebx],byte 'G'
jmp .size_convert_end
;--------------------------------------
@@:
mov edx,[esp]
mov eax,[edx-40+32]
mov ebx,0x100000
xor edx,edx
div ebx
cmp eax,0
je @f
mov ebx,size_table
call decimal_string_4
mov [ebx],byte 'M'
jmp .size_convert_end
;--------------------------------------
@@:
mov edx,[esp]
mov eax,[edx-40+32]
mov ebx,0x400
xor edx,edx
div ebx
cmp eax,0
je @f
mov ebx,size_table
call decimal_string_4
mov [ebx],byte 'K'
jmp .size_convert_end
;--------------------------------------
@@:
mov edx,[esp]
mov eax,[edx-40+32]
;.size_convert:
mov ebx,size_table
call decimal_string_4
;--------------------------------------
.size_convert_end:
cmp [size_table],byte '0'
jne @f
mov [size_table],byte ' '
;--------------------------------------
@@:
cmp [size_table+4],byte ' '
jne @f
mov esi,size_table+3
mov edi,esi
inc edi
mov ecx,5
std
rep movsb
jmp @r
;--------------------------------------
@@:
pop edx
pop ebx
;--------------------------------------
.date:
xor eax,eax
mov al,[edx-40+28]
push ebx
mov ebx,date_table
call decimal_string_2
mov al,[edx-40+29]
mov ebx,date_table+3
call decimal_string_2
mov ax,[edx-40+30]
mov ebx,year_table
call decimal_string_4
mov ax,[year_table+2]
mov [date_table+6],ax
pop ebx
ror ebx,16
add bx,[left_panel_x.size_x]
sub ebx,122+12+15
rol ebx,16
mov ecx,0
cmp [marked_file],byte 0
je @f
mov ecx,0xff0000
;--------------------------------------
@@:
mcall 4,,,type_table,20
popa
ret
;------------------------------------------------------------------------------
draw_folder_data:
cmp [drawing_panel_folder],1
jne .right_panel
mov eax,[left_folder_block]
sub eax,[max_panel_line]
test eax,0x8000000
jz .ok_left
mov [left_start_draw_line],0
jmp @f
;--------------------------------------
.ok_left:
cmp eax,[left_start_draw_line]
jae @f
mov [left_start_draw_line],eax
;--------------------------------------
@@:
mov bx,[left_panel_x.start_x]
add bx,12
shl ebx,16
mov bx,[left_panel_y.start_y]
inc bx
mov edx,[left_start_draw_line]
imul edx,304
add edx,[left_folder_data]
add edx,32+40
mov [temp_counter],0
jmp .type_folder
;--------------------------------------
.right_panel:
mov eax,[right_folder_block]
sub eax,[max_panel_line]
test eax,0x8000000
jz .ok_right
mov [right_start_draw_line],0
jmp @f
;--------------------------------------
.ok_right:
cmp eax,[right_start_draw_line]
jae @f
mov [right_start_draw_line],eax
;--------------------------------------
@@:
mov bx,[right_panel_x.start_x]
add bx,12
shl ebx,16
mov bx,[right_panel_y.start_y]
inc bx
mov edx,[right_start_draw_line]
imul edx,304
add edx,[right_folder_data]
add edx,32+40
mov [temp_counter],1
;--------------------------------------
.type_folder:
xor eax,eax
;--------------------------------------
.start:
pusha
mov eax,edx
cmp [temp_counter],1
je @f
sub eax,[left_folder_data]
sub eax,32+40
xor edx,edx
mov ebx,304
div ebx
cmp eax,[left_folder_block]
je .end_1
jmp .continue_1
;--------------------------------------
@@:
sub eax,[right_folder_data]
sub eax,32+40
xor edx,edx
mov ebx,304
div ebx
cmp eax,[right_folder_block]
je .end_1
;--------------------------------------
.continue_1:
popa
cmp eax,[max_panel_line] ; 20
je .end_2
mov [marked_file],0
cmp [edx+299-40],byte 0
je @f
mov [marked_file],1
;--------------------------------------
@@:
call clear_line
call draw_type_size_date
call draw_icon
push eax
xor eax,eax
mov ax,[left_panel_x.size_x]
push ebx edx
mov ebx,6
xor edx,edx
div ebx
pop edx ebx
sub eax,23+2+2
mov esi,[file_name_length]
mov [temp_counter_1],0
cmp esi,eax
jbe @f
mov esi,eax
mov [temp_counter_1],1
;--------------------------------------
@@:
mov ecx,0
cmp [marked_file],byte 0
je @f
mov ecx,0xff0000
;--------------------------------------
@@:
mcall 4
cmp [temp_counter_1],0
je .continue
mov eax,esi ;[file_name_length]
imul eax,6
shl eax,16
push ebx edx
add ebx,eax
mcall 4,,0xff0000,truncated_filename_char,2
add ebx,1 shl 16
mcall
pop edx ebx
;--------------------------------------
.continue:
add ebx,10
add edx,304 ;10
pop eax
inc eax
jmp .start
;--------------------------------------
.end_1:
popa
;--------------------------------------
.end_2:
mov ax,[left_panel_y.start_y]
add ax,[left_panel_y.size_y]
mov cx,bx
dec cx
rol ecx,16
mov cx,ax
mov eax,ecx
shr eax,16
sub cx,ax
cmp cx,0
jbe @f
mov bx,[left_panel_x.size_x]
sub ebx,12 shl 16
mcall 13,,,0xffffff
;--------------------------------------
@@:
.end:
cmp [drawing_panel_folder],1
jne @f
call draw_scroll_bar_left
ret
;--------------------------------------
@@:
call draw_scroll_bar_right
ret
;------------------------------------------------------------------------------
clear_line:
cmp [not_clear_lines],0
jne .end_1
pusha
shl ebx,16
shr ebx,16
dec ebx
cmp [drawing_panel_folder],1
jne .right
cmp [select_panel_counter],0
jne .continue
mov ax,[left_start_draw_cursor_line]
add ax,[left_panel_y.start_y]
cmp bx,ax
je .end
jmp .continue
;--------------------------------------
.right:
cmp [select_panel_counter],0
je .continue
mov ax,[right_start_draw_cursor_line]
add ax,[right_panel_y.start_y]
cmp bx,ax
je .end
;--------------------------------------
.continue:
mov ebx,[esp+16]
mov cx,bx
dec cx
rol ecx,16
mov cx,10
mov bx,[left_panel_x.size_x]
cmp [drawing_panel_folder],1
je @f
dec ebx
;--------------------------------------
@@:
sub ebx,12 shl 16+15
mcall 13,,,0xffffff
;--------------------------------------
.end:
popa
;--------------------------------------
.end_1:
ret
;------------------------------------------------------------------------------
draw_left_panel:
call clear_left_panel
call calc_max_panel_line
call draw_left_panel_selection
mov [drawing_panel_folder],1
call draw_folder_data
call draw_left_panel_patch
ret
;------------------------------------------------------------------------------
draw_right_panel:
call clear_right_panel
call calc_max_panel_line
call draw_right_panel_selection
mov [drawing_panel_folder],2
call draw_folder_data
call draw_right_panel_patch
ret
;------------------------------------------------------------------------------
draw_left_panel_patch:
cmp [select_panel_counter],0
jne .end
mov edx,read_folder_name ;read_folder.name
;--------------------------------------
.1:
call clear_patch_area
mov ebx,[window_high]
sub ebx,33
add ebx,8 shl 16
mcall 4,,0x80000000 ; ,read_folder.name
;--------------------------------------
.end:
ret
;------------------------------------------------------------------------------
draw_right_panel_patch:
cmp [select_panel_counter],1
jne draw_left_panel_patch.end
mov edx,read_folder_1_name ;read_folder_1.name
jmp draw_left_panel_patch.1
;------------------------------------------------------------------------------
clear_patch_area:
push edx
mov ebx,[window_width]
sub ebx,9
add ebx,5 shl 16
mov ecx,[window_high]
sub ecx,35
shl ecx,16
mov cx,12
mcall 13,,,0xffffcc
pop edx
ret
;------------------------------------------------------------------------------
draw_left_panel_selection:
cmp [select_panel_counter],0
jne .end
mov eax,[left_folder_block]
sub eax,[left_start_draw_line]
mov edx,left_start_draw_cursor_line
mov cx,[edx]
call for_all_panel_selection
mov eax,[left_folder_block]
dec eax
imul eax,10
cmp ax,cx
jae @f
mov cx,ax
;--------------------------------------
@@:
mov [edx],cx
mov ebx,[left_panel_x]
add cx,[left_panel_y.start_y]
;--------------------------------------
.1:
shl ecx,16
mov cx,10
sub ebx,15
mcall 13,,,0xbbddff
;--------------------------------------
.end:
ret
;------------------------------------------------------------------------------
draw_right_panel_selection:
cmp [select_panel_counter],1
jne draw_left_panel_selection.end
mov eax,[right_folder_block]
sub eax,[right_start_draw_line]
mov edx,right_start_draw_cursor_line
mov cx,[edx]
call for_all_panel_selection
mov eax,[right_folder_block]
dec eax
imul eax,10
cmp ax,cx
jae @f
mov cx,ax
;--------------------------------------
@@:
mov [edx],cx
mov ebx,[right_panel_x]
add cx,[right_panel_y.start_y]
jmp draw_left_panel_selection.1
;------------------------------------------------------------------------------
for_all_panel_selection:
imul eax,10
cmp ax,cx
jae @f
mov cx,ax
;--------------------------------------
@@:
mov eax,[max_panel_line]
dec eax
imul eax,10
cmp ax,cx
jae @f
mov cx,ax
;--------------------------------------
@@:
ret
;------------------------------------------------------------------------------
clear_left_panel:
mov ebx,7 shl 16
add ebx,[window_width]
shr bx,1
sub ebx,6+1
mov [left_panel_x],ebx
call calculate_panel_1
mov [left_panel_y],ecx
xor eax,eax
mov ax,cx
xor edx,edx
mov ebx,10
div ebx
; умножение на 10
shl eax,1 ; умножение на 2
lea eax,[eax+eax*4] ; умножение на 5
mov [left_panel_y_correct_size_y],ax
ret
;------------------------------------------------------------------------------
calculate_panel_1:
mov ecx,[skin_high]
add ecx,70
shl ecx,16
add ecx,[window_high]
sub ecx,129
ret
;------------------------------------------------------------------------------
clear_right_panel:
mov ebx,[window_width]
shr ebx,1
add ebx,3
shl ebx,16
add ebx,[window_width]
shr bx,1
sub bx,2+6
mov [right_panel_x],ebx
call calculate_panel_1
mov [right_panel_y],ecx
xor eax,eax
mov ax,cx
xor edx,edx
mov ebx,10
div ebx
; умножение на 10
shl eax,1 ; умножение на 2
lea eax,[eax+eax*4] ; умножение на 5
mov [right_panel_y_correct_size_y],ax
ret
;------------------------------------------------------------------------------
erase_fbutton:
mov edx,0x80000065
mov eax,8
mov ebp,12
;--------------------------------------
.start:
mcall
dec ebp
jnz .start
ret
;------------------------------------------------------------------------------
draw_fbutton:
test [window_status],100b ; window is rolled up
jnz .exit
test [window_status],10b ; window is minimized to panel
jnz .exit
mov ecx,[window_high]
sub ecx,20
shl ecx,16
add ecx,15
mov eax,[window_width]
mov ebx,12
xor edx,edx
div ebx
mov [fbutton_width],eax
mov ebx,5 shl 16
add ebx,eax
sub ebx,2
mov esi,0xaa00
mov edx,101
mov eax,8
mov ebp,12
;--------------------------------------
.start:
cmp ebp,1
jne @f
mov eax,ebx
shr eax,16
mov bx,ax
mov eax,[window_width]
sub ax,bx
sub ax,5
mov bx,ax
mov eax,8
;--------------------------------------
@@:
mcall
push eax ebx edx
mov edx,0x6060ff
mov bx,10
cmp ebp,4
jae @f
mov bx,18
;--------------------------------------
@@:
mcall 13
cmp ebp,1
je @f
ror ebx,16
add ebx,[fbutton_width]
dec ebx
rol ebx,16
mov bx,1
inc ecx
mcall ,,,0xcccccc
dec ecx
;--------------------------------------
@@:
pop edx ebx eax
call .rol_ror
inc edx
dec ebp
jnz .start
call draw_fbutton_name
ret
;--------------------------------------
.rol_ror:
rol ebx,16
add ebx,[fbutton_width]
ror ebx,16
;--------------------------------------
.exit:
ret
;------------------------------------------------------------------------------
draw_fbutton_name:
mov ebx, 7 shl 16
add ebx,[window_high]
sub ebx,19
mov eax,4
mov ecx,0x90000000
push ebx
call .type_1
pop ebx
mov ecx,0x90ffffff
sub ebx,1 shl 16 + 1
;--------------------------------------
.type_1:
cmp [shift_flag],1
je .type_shift
cmp [ctrl_flag],1
je .type_ctrl
cmp [alt_flag],1
je .type_alt
;--------------------------------------
.type:
mov edx,fbutton_name.f1
call .type_all
mov edx,fbutton_name.f2
call .type_all
mov edx,fbutton_name.f3
call .type_all
mov edx,fbutton_name.f4
call .type_all
mov edx,fbutton_name.f5
call .type_all
mov edx,fbutton_name.f6
call .type_all
mov edx,fbutton_name.f7
call .type_all
mov edx,fbutton_name.f8
call .type_all
mov edx,fbutton_name.f9
call .type_all
mov edx,fbutton_name.f10
call .type_all
mov edx,fbutton_name.f11
call .type_all
mov edx,fbutton_name.f12
mcall
ret
;--------------------------------------
.type_shift:
mov edx,fbutton_name_shift.f1
call .type_all
mov edx,fbutton_name_shift.f2
call .type_all
mov edx,fbutton_name_shift.f3
call .type_all
mov edx,fbutton_name_shift.f4
call .type_all
mov edx,fbutton_name_shift.f5
call .type_all
mov edx,fbutton_name_shift.f6
call .type_all
mov edx,fbutton_name_shift.f7
call .type_all
mov edx,fbutton_name_shift.f8
call .type_all
mov edx,fbutton_name_shift.f9
call .type_all
mov edx,fbutton_name_shift.f10
call .type_all
mov edx,fbutton_name_shift.f11
call .type_all
mov edx,fbutton_name_shift.f12
mcall
ret
;--------------------------------------
.type_ctrl:
mov edx,fbutton_name_ctrl.f1
call .type_all
mov edx,fbutton_name_ctrl.f2
call .type_all
mov edx,fbutton_name_ctrl.f3
call .type_all
mov edx,fbutton_name_ctrl.f4
call .type_all
mov edx,fbutton_name_ctrl.f5
call .type_all
mov edx,fbutton_name_ctrl.f6
call .type_all
mov edx,fbutton_name_ctrl.f7
call .type_all
mov edx,fbutton_name_ctrl.f8
call .type_all
mov edx,fbutton_name_ctrl.f9
call .type_all
mov edx,fbutton_name_ctrl.f10
call .type_all
mov edx,fbutton_name_ctrl.f11
call .type_all
mov edx,fbutton_name_ctrl.f12
mcall
ret
;--------------------------------------
.type_alt:
mov edx,fbutton_name_alt.f1
call .type_all
mov edx,fbutton_name_alt.f2
call .type_all
mov edx,fbutton_name_alt.f3
call .type_all
mov edx,fbutton_name_alt.f4
call .type_all
mov edx,fbutton_name_alt.f5
call .type_all
mov edx,fbutton_name_alt.f6
call .type_all
mov edx,fbutton_name_alt.f7
call .type_all
mov edx,fbutton_name_alt.f8
call .type_all
mov edx,fbutton_name_alt.f9
call .type_all
mov edx,fbutton_name_alt.f10
call .type_all
mov edx,fbutton_name_alt.f11
call .type_all
mov edx,fbutton_name_alt.f12
;--------------------------------------
.type_all:
mcall
call draw_fbutton.rol_ror
ret
;------------------------------------------------------------------------------