/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 |