Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 180 → Rev 183

/programs/fs/kfar/trunk/dialogs.inc
1,5 → 1,5
; int __stdcall DialogBox(DLGTEMPLATE* dlg, void* DlgProc);
; int __stdcall DlgProc(int msg, int param1, int param2);
; int __stdcall GenericBox(DLGTEMPLATE* dlg, void* DlgProc);
; int __stdcall DlgProc(DLGTEMPLATE* dlg, int msg, int param1, int param2);
 
virtual at 0
dlgtemplate:
15,12 → 15,28
.border_color db ?
.header_color db ?
db ? ; align
.size = $
end virtual
 
DialogBox:
GenericBox:
pushad
mov ebx, [esp+20h+4]
; center window if required
cmp [ebx+dlgtemplate.x], -1
jnz @f
mov eax, [cur_width]
sub eax, [ebx+dlgtemplate.width]
shr eax, 1
mov [ebx+dlgtemplate.x], eax
@@:
cmp [ebx+dlgtemplate.y], -1
jnz @f
mov eax, [cur_height]
sub eax, [ebx+dlgtemplate.height]
shr eax, 1
mov [ebx+dlgtemplate.y], eax
@@:
; some checks
mov ebx, [esp+20h+4]
mov eax, [ebx+dlgtemplate.x]
cmp eax, 1
jl .sizeerr
259,6 → 275,7
push 0
push 0
push 1
push ebx
call eax
call draw_image
pop ebp ebx
309,6 → 326,7
push 0
push eax
push 2
push ebx
call ecx
pop ebp ebx
test eax, eax
649,7 → 667,7
mov [ebx+dlgtemplate.header_color], al
push MenuDlgProc
push ebx
call DialogBox
call GenericBox
mov [esp+28], eax
mov eax, ebx
call mf_free
657,17 → 675,17
ret 28
 
MenuDlgProc:
mov eax, [esp+4]
mov eax, [esp+8]
cmp al, 1
jz .draw
cmp al, 2
jz .key
ret 12
ret 16
.draw:
call .dodraw
ret 12
ret 16
.key:
mov al, [esp+8]
mov al, [esp+12]
cmp al, 0x48
jz .prev
cmp al, 0x4B
707,7 → 725,7
cmp [ascii2scan+ecx], al
jnz .n
mov eax, edx
ret 12
ret 16
.n:
mov edx, [edx]
test edx, edx
714,7 → 732,7
jnz .l
.ret:
xor eax, eax
ret 12
ret 16
.pgup:
mov eax, [ebx+36]
mov ecx, [ebx+dlgtemplate.height]
735,7 → 753,7
call .dodraw
call draw_image
xor eax, eax
ret 12
ret 16
.next:
mov eax, [ebx+36]
cmp dword [eax], 0
797,10 → 815,10
jmp .posret
.esc:
or eax, -1
ret 12
ret 16
.enter:
mov eax, [ebx+36]
ret 12
ret 16
 
.line_prev:
cmp eax, [ebx+44]
932,3 → 950,256
stosw
.noscrollbar:
ret
 
virtual at 0
dlgitemtemplate:
; «¥¬¥­âë:
; 1 = áâ â¨ç¥áª¨© ⥪áâ
.type dd ?
.x1 dd ?
.y1 dd ?
.x2 dd ?
.y2 dd ?
.data dd ?
.flags dd ?
; ”« £¨:
; 0 = ¢ëà ¢­¨¢ ­¨¥ ¢«¥¢®
; 1 = ¢ëà ¢­¨¢ ­¨¥ ¯® 業âàã
; 2 = ¢ëà ¢­¨¢ ­¨¥ ¢¯à ¢®
; 4 = í«¥¬¥­â ¨¬¥¥â 䮪ãá ¢¢®¤ 
.size = $
end virtual
; struct DLGDATA
; {
; DLGTEMPLATE dialog; /* window description */
; void* DlgProc; /* dialog procedure */
; /* int __stdcall DlgProc(DLGDATA* dlg, int msg, int param1, int param2); */
; void* user_data; /* arbitrary user data */
; unsigned num_items; /* number of items in the following array */
; DLGITEMTEMPLATE items[]; /* array of dialog items */
; }
; int __stdcall DialogBox(DLGDATA* dlg);
DialogBox:
push ManagerDlgProc
push dword [esp+8]
call GenericBox
ret 8
 
ManagerDlgProc:
mov eax, [esp+8]
dec eax
jz .draw
dec eax
jz .key
xor eax, eax
ret 16
.draw:
call .dodraw
ret 16
.key:
; find item with focus
add ebx, dlgtemplate.size+12
mov ecx, [ebx-4]
jecxz .nobtns
@@:
test [ebx+dlgitemtemplate.flags], 4
jnz @f
add ebx, dlgitemtemplate.size
loop @b
@@:
.nobtns:
mov al, [esp+12]
cmp al, 1
jz .esc
cmp al, 0x1C
jz .enter
cmp al, 0xF
jz .tab
cmp al, 0x48
jz .up
cmp al, 0x4B
jz .left
cmp al, 0x4D
jz .right
cmp al, 0x50
jz .down
.ret0:
xor eax, eax
ret 16
.esc:
or eax, -1
ret 16
.enter:
mov eax, ebx
ret 16
.tab:
test [ctrlstate], 3
jnz .shift_tab
.right:
.down:
jecxz .ret0
and byte [ebx+dlgitemtemplate.flags], not 4
dec ecx
jz .find_first_btn
@@:
add ebx, dlgitemtemplate.size
cmp [ebx+dlgitemtemplate.type], 2
jz .btn_found
loop @b
.find_first_btn:
mov ebx, [esp+4]
add ebx, dlgtemplate.size+12
@@:
cmp [ebx+dlgitemtemplate.type], 2
jz .btn_found
add ebx, dlgitemtemplate.size
jmp @b
.btn_found:
or byte [ebx+dlgitemtemplate.flags], 4
mov ebx, [esp+4]
call .dodraw
call draw_image
xor eax, eax
ret 16
.shift_tab:
.left:
.up:
jecxz .ret0
and byte [ebx+dlgitemtemplate.flags], not 4
mov eax, [esp+4]
sub ecx, [eax+dlgtemplate.size+8]
neg ecx
jz .find_last_btn
@@:
sub ebx, dlgitemtemplate.size
cmp [ebx+dlgitemtemplate.type], 2
loopnz @b
jz .btn_found
.find_last_btn:
mov ebx, [eax+dlgtemplate.size+8]
imul ebx, dlgitemtemplate.size
lea ebx, [ebx+eax+dlgtemplate.size+12]
@@:
sub ebx, dlgitemtemplate.size
cmp [ebx+dlgitemtemplate.type], 2
jnz @b
jmp .btn_found
 
.dodraw:
add ebx, dlgtemplate.size+8
mov ecx, [ebx]
add ebx, 4
jecxz .done_draw
.draw_loop:
push ecx
mov eax, [ebx+dlgitemtemplate.type]
dec eax
jz .draw_text
dec eax
jnz .draw_loop_continue
call draw_button
jmp .draw_loop_continue
.draw_text:
call draw_static_text
.draw_loop_continue:
pop ecx
add ebx, dlgitemtemplate.size
loop .draw_loop
.done_draw:
ret
 
draw_static_text:
; à¨á㥬 áâ â¨ç¥áª¨© ⥪áâ
mov ah, [dialog_main_color]
draw_text:
; ®¯à¥¤¥«ï¥¬ ¤«¨­ã áâப¨
mov esi, [ebx+dlgitemtemplate.data]
test esi, esi
jz .ret
or ecx, -1
@@:
inc ecx
cmp byte [ecx+esi], 0
jnz @b
; ¢ ecx ¤«¨­  áâப¨
push eax
xor eax, eax
mov edx, [ebx+dlgitemtemplate.x2]
sub edx, [ebx+dlgitemtemplate.x1]
inc edx
cmp ecx, edx
jae .text_draw
mov al, byte [ebx+dlgitemtemplate.flags]
and al, 3
jz .text_align_left
cmp al, 1
jz .text_align_center
; ⥪áâ ¢ë஢­¥­ ¢¯à ¢®
mov eax, edx
sub eax, ecx
jmp .text_draw
.text_align_center:
mov eax, edx
sub eax, ecx
shr eax, 1
jmp .text_draw
.text_align_left:
xor eax, eax
.text_draw:
push ecx
mov ecx, [esp+24]
push eax
mov eax, [ebx+dlgitemtemplate.x1]
add eax, [ecx+dlgtemplate.x]
push edx
mov edx, [ebx+dlgitemtemplate.y1]
add edx, [ecx+dlgtemplate.y]
call get_console_ptr
pop edx
pop ecx
mov ah, [esp+5]
mov al, ' '
rep stosw
pop ecx
cmp ecx, edx
jbe .text_copy
cmp edx, 3
jb .ret
mov al, '.'
stosw
stosw
stosw
add esi, ecx
mov ecx, edx
sub ecx, 3
sub esi, ecx
.text_copy:
jecxz .ret
@@:
lodsb
stosw
loop @b
.ret:
mov ecx, [esp+20]
mov eax, [ecx+dlgtemplate.x]
mov edx, [ecx+dlgtemplate.y]
add eax, [ebx+dlgitemtemplate.x2]
inc eax
add edx, [ebx+dlgitemtemplate.y1]
mov ecx, edi
call get_console_ptr
xchg ecx, edi
sub ecx, edi
shr ecx, 1
pop eax
mov al, ' '
rep stosw
ret
 
draw_button:
mov ah, [dialog_normal_btn_color]
test [ebx+dlgitemtemplate.flags], 4
jz @f
mov ah, [dialog_selected_btn_color]
@@:
jmp draw_text
/programs/fs/kfar/trunk/kfar.asm
578,11 → 578,7
mov [ebp + panel1_start - panel1_data], eax
jmp .done_redraw
.enter:
mov eax, [ebp + panel1_files - panel1_data]
mov ecx, [eax+ecx*4]
mov eax, [ebp + panel1_nfa - panel1_data]
lea ecx, [ecx+eax*4+32]
add ecx, [ebp + panel1_files - panel1_data]
call get_curfile_folder_entry
test byte [ecx], 10h
jnz .enter_folder
; find extension
889,11 → 885,73
.ret2:
ret
.f8:
mov eax, [ebp + panel1_files - panel1_data]
mov ecx, [eax+ecx*4]
mov eax, [ebp + panel1_nfa - panel1_data]
lea ecx, [ecx+eax*4+32]
add ecx, [ebp + panel1_files - panel1_data]
call get_curfile_folder_entry
cmp [bConfirmDelete], 0
jz .f8_allowed
mov ebx, f8_confirm_dlgdata
mov esi, aConfirmDeleteText
mov edi, aConfirmDeleteTextBuf
@@:
lodsb
stosb
test al, al
jnz @b
dec edi
mov esi, aDeleteFolder
test byte [ecx], 10h
jnz @f
mov esi, aDeleteFile
@@:
lodsb
stosb
test al, al
jnz @b
lea esi, [ecx+40]
mov [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.name], esi
or eax, -1
@@:
inc eax
cmp byte [eax+esi], 0
jnz @b
sub edi, aConfirmDeleteTextBuf+1
cmp eax, edi
jae @f
mov eax, edi
@@:
inc eax
inc eax
mov edx, [cur_width]
sub edx, 8
cmp eax, edx
jbe @f
mov eax, edx
@@:
mov [ebx + dlgtemplate.width], eax
dec eax
dec eax
mov [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.width2], eax
mov [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.width3], eax
shr eax, 1
mov [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.del_x2], eax
sub eax, aDeleteLength-1
mov [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.del_x1], eax
add eax, aDeleteLength
mov [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.cnl_x1], eax
add eax, aCancelLength - 1
mov [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.cnl_x2], eax
mov al, [dialog_border_color]
mov [ebx + dlgtemplate.border_color], al
mov al, [dialog_header_color]
mov [ebx + dlgtemplate.header_color], al
mov al, [dialog_main_color]
mov [ebx + dlgtemplate.main_color], al
or byte [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.flags1], 4
and byte [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.flags2], not 4
push ebx
call DialogBox
cmp eax, f8_confirm_dlgdata.del_btn
jnz .ret2
.f8_allowed:
lea esi, [ebp + panel1_dir - panel1_data]
mov edi, execdata
@@:
921,11 → 979,8
; jmp .done_redraw
mov eax, [ebp + panel1_index - panel1_data]
push eax
mov ecx, [ebp + panel1_files - panel1_data]
mov ecx, [ecx+eax*4]
mov eax, [ebp + panel1_nfa - panel1_data]
lea esi, [ecx+eax*4+32+40]
add esi, [ebp + panel1_files - panel1_data]
call get_curfile_name
mov esi, eax
mov edi, saved_file_name
@@:
lodsb
1012,6 → 1067,21
mov [panel2_height], eax
ret
 
get_curfile_folder_entry:
push eax
mov ecx, [ebp + panel1_index - panel1_data]
mov eax, [ebp + panel1_files - panel1_data]
mov ecx, [eax+ecx*4]
mov eax, [ebp + panel1_nfa - panel1_data]
lea ecx, [ecx+eax*4+32]
add ecx, [ebp + panel1_files - panel1_data]
pop eax
ret
get_curfile_name:
call get_curfile_folder_entry
add ecx, 40
ret
 
panels_getname:
if lang eq ru
mov eax, ' ­¥'
2811,7 → 2881,7
ret
 
 
header db 'Kolibri Far 0.13'
header db 'Kolibri Far 0.14'
;.length = $ - header
db 0
 
3407,6 → 3477,8
compare_names db 'nNxXmMsSuUcCaA'
end if
 
; ‡¤¥áì ­ ç¨­ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥ - ¢ ⥪ã饩 ॠ«¨§ æ¨¨ ®­¨ § è¨âë ¢ ¡¨­ à­¨ª
 
;  ­¥«ì
panel_normal_color db 1Bh
panel_border_color db 1Bh
3415,6 → 3487,12
panel_active_header_color db 30h
column_header_color db 1Eh
panel_nscreens_color db 0Bh
; „¨ «®£¨
dialog_main_color db 70h
dialog_border_color db 70h
dialog_header_color db 70h
dialog_normal_btn_color db 70h
dialog_selected_btn_color db 30h
; Œ¥­î
menu_normal_color db 3Fh
menu_selected_color db 0Fh
3511,10 → 3589,6
db 10h
db '*',0
 
bWasE0 db 0
ctrlstate db 0
MemForImage dd 0
 
associations:
dd aAsm, tinypad
dd aInc, tinypad
3558,6 → 3632,85
aRtf db 'rtf',0
rtfread db '/rd/1/RtfRead',0
 
bConfirmDelete db 1
 
; ‡¤¥áì § ª ­ç¨¢ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥
 
bWasE0 db 0
ctrlstate db 0
MemForImage dd 0
 
align 4
f8_confirm_dlgdata:
dd 0
.x dd -1
.y dd -1
.width dd ?
.height dd 3
dd 4
dd 2
dd aDeleteCaption
.main_color db ?
.border_color db ?
.header_color db ?
db 0
dd 0
dd 0
dd 4
; áâப  "‚ë å®â¨â¥ 㤠«¨âì ..."
dd 1
dd 1,0
.width2 dd ?
dd 0
dd aConfirmDeleteTextBuf
dd 1
; áâப  á ¨¬¥­¥¬ ä ©« /¯ ¯ª¨
dd 1
dd 1,1
.width3 dd ?
dd 1
.name dd ?
dd 1
; ª­®¯ª  "㤠«¨âì"
.del_btn:
dd 2
.del_x1 dd ?
dd 2
.del_x2 dd ?
dd 2
dd aDelete
.flags1 dd 4
; ª­®¯ª  "®â¬¥­¨âì"
dd 2
.cnl_x1 dd ?
dd 2
.cnl_x2 dd ?
dd 2
dd aCancel
.flags2 dd 0
 
if lang eq ru
aDeleteCaption db '“¤ «¥­¨¥',0
aConfirmDeleteText db '‚ë å®â¨â¥ 㤠«¨âì ',0
aDeleteFolder db '¯ ¯ªã',0
aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
aDeleteFile db 'ä ©«',0
aDelete db ' “¤ «¨âì ',0
aDeleteLength = $ - aDelete - 1
aCancel db ' Žâ¬¥­¨âì ',0
aCancelLength = $ - aCancel - 1
else
aDeleteCaption db 'Delete',0
aConfirmDeleteText db 'Do you wish to delete ',0
aDeleteFolder db 'the folder',0
aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
aDeleteFile db 'the file',0
aDelete db ' Delete ',0
aDeleteLength = $ - aDelete - 1
aCancel db ' Cancel ',0
aCancelLength = $ - aCancel - 1
end if
 
execinfo:
dd 7
dd 0
3637,8 → 3790,10
active_screen_vtable dd ?
active_screen_data dd ?
 
aConfirmDeleteTextBuf rb aConfirmDeleteTextMax + 1
 
; stack
align 512
align 4
rb 512
stacktop:
; buffers for directory - may be resized dynamically