KFar 0.5: built-in editor, first steps

git-svn-id: svn://kolibrios.org@814 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Evgeny Grechnikov (Diamond) 2008-07-02 20:27:47 +00:00
parent 7e4b227ec1
commit c1fce6235d
7 changed files with 3472 additions and 308 deletions

View File

@ -1,7 +1,6 @@
@erase lang.inc @erase lang.inc
@echo lang fix ru >lang.inc @echo lang fix ru >lang.inc
@fasm kfar.asm kfar @fasm kfar.asm kfar
mtappack kfar
@erase lang.inc @erase lang.inc
@kpack kfar @kpack kfar
@pause @pause

View File

@ -8,6 +8,7 @@ dlgtemplate:
; ¡¨â 1: ¨á¯®«ì§®¢ âì áâ ­¤ àâ­ë¥ æ¢¥â  ¯à¥¤ã¯à¥¦¤¥­¨ï/®è¨¡ª¨ ; ¡¨â 1: ¨á¯®«ì§®¢ âì áâ ­¤ àâ­ë¥ æ¢¥â  ¯à¥¤ã¯à¥¦¤¥­¨ï/®è¨¡ª¨
; (¥á«¨ «î¡®© ¨§ íâ¨å ¡¨â®¢ ãáâ ­®¢«¥­, ¯®«ï main_color,border_color,header_color ; (¥á«¨ «î¡®© ¨§ íâ¨å ¡¨â®¢ ãáâ ­®¢«¥­, ¯®«ï main_color,border_color,header_color
; ¨£­®à¨àãîâáï) ; ¨£­®à¨àãîâáï)
; ¡¨â 2: ­¥ à¨á®¢ âì ⥭ì
.flags dd ? .flags dd ?
.x dd ? .x dd ?
.y dd ? .y dd ?
@ -20,10 +21,137 @@ dlgtemplate:
.border_color db ? .border_color db ?
.header_color db ? .header_color db ?
db ? ; align db ? ; align
.dataptr dd ? ; used internally, ignored on input
.size = $ .size = $
end virtual end virtual
GenericBox: GenericBox:
push [cursor_x]
push [cursor_y]
push dword [esp+8+8]
push dword [esp+8+8]
call ShowGenericBox
test eax, eax
jz @f
pop [cursor_y]
pop [cursor_x]
ret
@@:
pushad
; message loop
.event:
push 10
pop eax
int 40h
dec eax
jz .redraw
dec eax
jz .key
jmp exit
.redraw:
call draw_window
jmp .event
.key:
mov al, 2
int 40h
shr eax, 8
cmp al, 0xE0
jnz @f
mov [bWasE0], 1
jmp .event
@@:
xchg ah, [bWasE0]
cmp al, 0x1D
jz .ctrl_down
cmp al, 0x9D
jz .ctrl_up
cmp al, 0x2A
jz .lshift_down
cmp al, 0xAA
jz .lshift_up
cmp al, 0x36
jz .rshift_down
cmp al, 0xB6
jz .rshift_up
cmp al, 0x38
jz .alt_down
cmp al, 0xB8
jz .alt_up
mov ebx, [esp+24h+8]
mov ecx, [esp+28h+8]
push 0
push eax
push 2
push ebx
call ecx
test eax, eax
jz .event
mov [esp+28], eax
jmp .exit
.ctrl_down:
test ah, ah
jnz .rctrl_down
or [ctrlstate], 4
jmp .event
.rctrl_down:
or [ctrlstate], 8
jmp .event
.ctrl_up:
test ah, ah
jnz .rctrl_up
and [ctrlstate], not 4
jmp .event
.rctrl_up:
and [ctrlstate], not 8
jmp .event
.lshift_down:
test ah, ah
jnz @f
or [ctrlstate], 1
@@: jmp .event
.lshift_up:
test ah, ah
jnz @b
and [ctrlstate], not 1
jmp @b
.rshift_down:
or [ctrlstate], 2
jmp .event
.rshift_up:
and [ctrlstate], not 2
jmp .event
.alt_down:
test ah, ah
jnz .ralt_down
or [ctrlstate], 0x10
jmp .event
.ralt_down:
or [ctrlstate], 0x20
jmp .event
.alt_up:
test ah, ah
jnz .ralt_up
and [ctrlstate], not 0x10
jmp .event
.ralt_up:
and [ctrlstate], not 0x20
jmp .event
.exit:
popad
push eax
push 0
push dword [esp+12+8]
call HideGenericBox
pop eax
pop [cursor_y]
pop [cursor_x]
pushad
call draw_image
popad
ret 8
; int __stdcall ShowGenericBox(DLGTEMPLATE* dlg, void* DlgProc);
ShowGenericBox:
pushad pushad
mov ebx, [esp+20h+4] mov ebx, [esp+20h+4]
; center window if required ; center window if required
@ -86,7 +214,7 @@ GenericBox:
@@: @@:
; allocate memory for data under dialog ; allocate memory for data under dialog
; for 'No memory' dialog use static data area ; for 'No memory' dialog use static data area
mov ebp, nomem_dlgsavearea mov eax, nomem_dlgsavearea
cmp ebx, nomem_dlgdata cmp ebx, nomem_dlgdata
jz .allocated jz .allocated
mov eax, [ebx+dlgtemplate.width] mov eax, [ebx+dlgtemplate.width]
@ -99,7 +227,7 @@ GenericBox:
add edx, [ebx+dlgtemplate.border_size_y] add edx, [ebx+dlgtemplate.border_size_y]
inc edx inc edx
mul edx mul edx
lea ecx, [eax*2] lea ecx, [eax*2+8]
call xpgalloc call xpgalloc
test eax, eax test eax, eax
jnz @f jnz @f
@ -109,8 +237,11 @@ GenericBox:
or eax, -1 or eax, -1
ret 8 ret 8
@@: @@:
mov ebp, eax
.allocated: .allocated:
mov [ebx+dlgtemplate.dataptr], eax
pop dword [eax+4]
pop dword [eax]
lea ebp, [eax+8]
; save data ; save data
mov eax, [ebx+dlgtemplate.y] mov eax, [ebx+dlgtemplate.y]
add eax, [ebx+dlgtemplate.height] add eax, [ebx+dlgtemplate.height]
@ -131,12 +262,13 @@ GenericBox:
push eax push eax
call save_console_data call save_console_data
; draw shadow ; draw shadow
test byte [ebx+dlgtemplate.flags], 4
jnz .noshadow
mov eax, [ebx+dlgtemplate.x] mov eax, [ebx+dlgtemplate.x]
sub eax, [ebx+dlgtemplate.border_size_x] sub eax, [ebx+dlgtemplate.border_size_x]
ja @f ja @f
xor eax, eax xor eax, eax
@@: @@:
push eax ; save real window left
inc eax inc eax
inc eax inc eax
mov edx, [ebx+dlgtemplate.y] mov edx, [ebx+dlgtemplate.y]
@ -144,7 +276,6 @@ GenericBox:
ja @f ja @f
xor edx, edx xor edx, edx
@@: @@:
push edx ; save real window top
inc edx inc edx
call get_console_ptr call get_console_ptr
mov ecx, [ebx+dlgtemplate.y] mov ecx, [ebx+dlgtemplate.y]
@ -185,9 +316,29 @@ GenericBox:
add edi, [cur_width] add edi, [cur_width]
dec edx dec edx
jnz .shadow_loop jnz .shadow_loop
.noshadow:
popad
push dword [esp+8]
push dword [esp+8]
call DrawGenericBox
xor eax, eax
ret 8
; void __stdcall DrawGenericBox(DLGDATA* dlg, void* DlgProc)
DrawGenericBox:
pushad
mov ebx, [esp+24h]
; draw area background ; draw area background
pop edx mov eax, [ebx+dlgtemplate.x]
pop eax sub eax, [ebx+dlgtemplate.border_size_x]
ja @f
xor eax, eax
@@:
mov edx, [ebx+dlgtemplate.y]
sub edx, [ebx+dlgtemplate.border_size_y]
ja @f
xor edx, edx
@@:
call get_console_ptr call get_console_ptr
mov ecx, [ebx+dlgtemplate.x] mov ecx, [ebx+dlgtemplate.x]
add ecx, [ebx+dlgtemplate.width] add ecx, [ebx+dlgtemplate.width]
@ -302,117 +453,24 @@ GenericBox:
dec edx dec edx
jnz @b jnz @b
; send redraw message ; send redraw message
mov eax, [esp+28h+8] mov eax, [esp+28h]
push ebx ebp
push 0 push 0
push 0 push 0
push 1 push 1
push ebx push ebx
call eax call eax
call draw_image call draw_image
pop ebp ebx popad
; message loop ret 8
.event:
push 10 ; void __stdcall HideGenericBox(DLGTEMPLATE* dlg, int bRedrawWindow);
pop eax HideGenericBox:
int 40h ; void __stdcall HideDialogBox(DLGDATA* dlg, int bRedrawWindow);
dec eax HideDialogBox:
jz .redraw pushad
dec eax mov ebx, [esp+24h]
jz .key mov ebp, [ebx+dlgtemplate.dataptr]
jmp exit add ebp, 8
.redraw:
push ebx ebp
call draw_window
pop ebp ebx
jmp .event
.key:
mov al, 2
int 40h
shr eax, 8
cmp al, 0xE0
jnz @f
mov [bWasE0], 1
jmp .event
@@:
xchg ah, [bWasE0]
cmp al, 0x1D
jz .ctrl_down
cmp al, 0x9D
jz .ctrl_up
cmp al, 0x2A
jz .lshift_down
cmp al, 0xAA
jz .lshift_up
cmp al, 0x36
jz .rshift_down
cmp al, 0xB6
jz .rshift_up
cmp al, 0x38
jz .alt_down
cmp al, 0xB8
jz .alt_up
mov ecx, [esp+28h+8]
push ebx ebp
push 0
push eax
push 2
push ebx
call ecx
pop ebp ebx
test eax, eax
jz .event
mov [esp+8+28], eax
jmp .exit
.ctrl_down:
test ah, ah
jnz .rctrl_down
or [ctrlstate], 4
jmp .event
.rctrl_down:
or [ctrlstate], 8
jmp .event
.ctrl_up:
test ah, ah
jnz .rctrl_up
and [ctrlstate], not 4
jmp .event
.rctrl_up:
and [ctrlstate], not 8
jmp .event
.lshift_down:
test ah, ah
jnz @f
or [ctrlstate], 1
@@: jmp .event
.lshift_up:
test ah, ah
jnz @b
and [ctrlstate], not 1
jmp @b
.rshift_down:
or [ctrlstate], 2
jmp .event
.rshift_up:
and [ctrlstate], not 2
jmp .event
.alt_down:
test ah, ah
jnz .ralt_down
or [ctrlstate], 0x10
jmp .event
.ralt_down:
or [ctrlstate], 0x20
jmp .event
.alt_up:
test ah, ah
jnz .ralt_up
and [ctrlstate], not 0x10
jmp .event
.ralt_up:
and [ctrlstate], not 0x20
jmp .event
.exit:
; restore data ; restore data
mov eax, [ebx+dlgtemplate.y] mov eax, [ebx+dlgtemplate.y]
add eax, [ebx+dlgtemplate.height] add eax, [ebx+dlgtemplate.height]
@ -433,16 +491,21 @@ GenericBox:
push eax push eax
call restore_console_data call restore_console_data
call draw_keybar call draw_keybar
cmp ebx, nomem_dlgdata lea ecx, [ebp-8]
jz @f push dword [ecx]
mov ecx, ebp push dword [ecx+4]
call pgfree
@@:
pop [ebx+dlgtemplate.y] pop [ebx+dlgtemplate.y]
pop [ebx+dlgtemplate.x] pop [ebx+dlgtemplate.x]
cmp ebx, nomem_dlgdata
jz @f
call pgfree
@@:
or [cursor_x], -1 or [cursor_x], -1
or [cursor_y], -1 or [cursor_y], -1
cmp dword [esp+28h], 0
jz @f
call draw_image call draw_image
@@:
popad popad
ret 8 ret 8
@ -555,13 +618,13 @@ menu:
; void* variants, const char* title, unsigned flags); ; void* variants, const char* title, unsigned flags);
menu_centered_in: menu_centered_in:
pushad pushad
mov ecx, 56 mov ecx, 60
; 36 bytes for dlgtemplate + additional: ; 40 bytes for dlgtemplate + additional:
; +36: dd cur_variant ; +40: dd cur_variant
; +40: dd num_variants ; +44: dd num_variants
; +44: dd begin_variant ; +48: dd begin_variant
; +48: dd end_variant ; +52: dd end_variant
; +52: dd cur_variant_idx ; +56: dd cur_variant_idx
call xpgalloc call xpgalloc
test eax, eax test eax, eax
jnz @f jnz @f
@ -584,16 +647,16 @@ menu_centered_in:
xor eax, eax xor eax, eax
xor ecx, ecx xor ecx, ecx
mov esi, [esp+20h+20] mov esi, [esp+20h+20]
mov [ebx+36], esi mov [ebx+40], esi
and dword [ebx+52], 0 and dword [ebx+56], 0
@@: @@:
cmp dword [esi+4], 0 cmp dword [esi+4], 0
jz .find_width jz .find_width
mov esi, [esi+4] mov esi, [esi+4]
inc dword [ebx+52] inc dword [ebx+56]
jmp @b jmp @b
.find_width: .find_width:
mov [ebx+44], esi mov [ebx+48], esi
add esi, 8 add esi, 8
push esi push esi
xor edx, edx xor edx, edx
@ -628,7 +691,7 @@ menu_centered_in:
sub eax, [ebx+dlgtemplate.border_size_x] sub eax, [ebx+dlgtemplate.border_size_x]
mov [ebx+dlgtemplate.width], eax mov [ebx+dlgtemplate.width], eax
mov [ebx+dlgtemplate.height], ecx mov [ebx+dlgtemplate.height], ecx
mov [ebx+40], ecx mov [ebx+44], ecx
sub eax, [esp+20h+12] sub eax, [esp+20h+12]
neg eax neg eax
sar eax, 1 sar eax, 1
@ -677,8 +740,8 @@ menu_centered_in:
mov [ebx+dlgtemplate.y], 3 mov [ebx+dlgtemplate.y], 3
.small_height: .small_height:
mov ecx, [ebx+dlgtemplate.height] mov ecx, [ebx+dlgtemplate.height]
mov eax, [ebx+36] mov eax, [ebx+40]
mov [ebx+44], eax mov [ebx+48], eax
dec ecx dec ecx
jz .skip jz .skip
push ecx push ecx
@ -688,13 +751,13 @@ menu_centered_in:
mov eax, [eax+4] mov eax, [eax+4]
loop @b loop @b
@@: @@:
mov [ebx+44], eax mov [ebx+48], eax
pop ecx pop ecx
.loop: .loop:
mov eax, [eax] mov eax, [eax]
loop .loop loop .loop
.skip: .skip:
mov [ebx+48], eax mov [ebx+52], eax
mov eax, [esp+20h+24] mov eax, [esp+20h+24]
mov [ebx+dlgtemplate.title], eax mov [ebx+dlgtemplate.title], eax
mov al, [menu_normal_color] mov al, [menu_normal_color]
@ -723,25 +786,25 @@ MenuDlgProc:
call .dodraw call .dodraw
ret 16 ret 16
.prev: .prev:
mov eax, [ebx+36] mov eax, [ebx+40]
cmp dword [eax+4], 0 cmp dword [eax+4], 0
jz .end jz .end
call .line_prev call .line_prev
.posret: .posret:
mov [ebx+36], eax mov [ebx+40], eax
.redraw: .redraw:
call .dodraw call .dodraw
call draw_image call draw_image
xor eax, eax xor eax, eax
ret 16 ret 16
.next: .next:
mov eax, [ebx+36] mov eax, [ebx+40]
cmp dword [eax], 0 cmp dword [eax], 0
jz .home jz .home
call .line_next call .line_next
jmp .posret jmp .posret
.pgdn: .pgdn:
mov eax, [ebx+36] mov eax, [ebx+40]
mov ecx, [ebx+dlgtemplate.height] mov ecx, [ebx+dlgtemplate.height]
.pgdnl: .pgdnl:
cmp dword [eax], 0 cmp dword [eax], 0
@ -775,7 +838,7 @@ MenuDlgProc:
jz .ins jz .ins
cmp al, 0x53 cmp al, 0x53
jz .del jz .del
mov edx, [ebx+36] mov edx, [ebx+40]
@@: @@:
cmp dword [edx+4], 0 cmp dword [edx+4], 0
jz @f jz @f
@ -803,7 +866,7 @@ MenuDlgProc:
xor eax, eax xor eax, eax
ret 16 ret 16
.pgup: .pgup:
mov eax, [ebx+36] mov eax, [ebx+40]
mov ecx, [ebx+dlgtemplate.height] mov ecx, [ebx+dlgtemplate.height]
.pgupl: .pgupl:
cmp dword [eax+4], 0 cmp dword [eax+4], 0
@ -812,14 +875,14 @@ MenuDlgProc:
loop .pgupl loop .pgupl
jmp .posret jmp .posret
.home: .home:
mov eax, [ebx+36] mov eax, [ebx+40]
@@: @@:
cmp dword [eax+4], 0 cmp dword [eax+4], 0
jz @f jz @f
mov eax, [eax+4] mov eax, [eax+4]
jmp @b jmp @b
@@: @@:
mov [ebx+44], eax mov [ebx+48], eax
push eax push eax
mov ecx, [ebx+dlgtemplate.height] mov ecx, [ebx+dlgtemplate.height]
dec ecx dec ecx
@ -828,19 +891,19 @@ MenuDlgProc:
mov eax, [eax] mov eax, [eax]
loop .h2 loop .h2
.h1: .h1:
mov [ebx+48], eax mov [ebx+52], eax
pop eax pop eax
and dword [ebx+52], 0 and dword [ebx+56], 0
jmp .posret jmp .posret
.end: .end:
mov eax, [ebx+36] mov eax, [ebx+40]
@@: @@:
cmp dword [eax], 0 cmp dword [eax], 0
jz @f jz @f
mov eax, [eax] mov eax, [eax]
jmp @b jmp @b
@@: @@:
mov [ebx+48], eax mov [ebx+52], eax
push eax push eax
mov ecx, [ebx+dlgtemplate.height] mov ecx, [ebx+dlgtemplate.height]
dec ecx dec ecx
@ -849,17 +912,17 @@ MenuDlgProc:
mov eax, [eax+4] mov eax, [eax+4]
loop .e2 loop .e2
.e1: .e1:
mov [ebx+44], eax mov [ebx+48], eax
mov eax, [ebx+40] mov eax, [ebx+44]
dec eax dec eax
mov [ebx+52], eax mov [ebx+56], eax
pop eax pop eax
jmp .posret jmp .posret
.esc: .esc:
or eax, -1 or eax, -1
ret 16 ret 16
.enter: .enter:
mov eax, [ebx+36] mov eax, [ebx+40]
ret 16 ret 16
.ins: .ins:
push 5 push 5
@ -869,7 +932,7 @@ MenuDlgProc:
push 4 push 4
pop edx pop edx
@@: @@:
mov eax, [ebx+36] mov eax, [ebx+40]
cmp byte [eax+8], '/' cmp byte [eax+8], '/'
jnz @f jnz @f
cmp word [eax+9], 'cd' cmp word [eax+9], 'cd'
@ -885,41 +948,41 @@ MenuDlgProc:
ret 16 ret 16
.line_prev: .line_prev:
cmp eax, [ebx+44]
jnz @f
mov edx, [ebx+44]
mov edx, [edx+4]
mov [ebx+44], edx
mov edx, [ebx+48]
mov edx, [edx+4]
mov [ebx+48], edx
@@:
mov eax, [eax+4]
dec dword [ebx+52]
ret
.line_next:
cmp eax, [ebx+48] cmp eax, [ebx+48]
jnz @f jnz @f
mov edx, [ebx+44] mov edx, [ebx+48]
mov edx, [edx] mov edx, [edx+4]
mov [ebx+44], edx mov [ebx+48], edx
mov edx, [ebx+52]
mov edx, [edx+4]
mov [ebx+52], edx
@@:
mov eax, [eax+4]
dec dword [ebx+56]
ret
.line_next:
cmp eax, [ebx+52]
jnz @f
mov edx, [ebx+48] mov edx, [ebx+48]
mov edx, [edx] mov edx, [edx]
mov [ebx+48], edx mov [ebx+48], edx
mov edx, [ebx+52]
mov edx, [edx]
mov [ebx+52], edx
@@: @@:
mov eax, [eax] mov eax, [eax]
inc dword [ebx+52] inc dword [ebx+56]
ret ret
.dodraw: .dodraw:
mov eax, [ebx+dlgtemplate.x] mov eax, [ebx+dlgtemplate.x]
mov edx, [ebx+dlgtemplate.y] mov edx, [ebx+dlgtemplate.y]
call get_console_ptr call get_console_ptr
mov esi, [ebx+44] mov esi, [ebx+48]
.0: .0:
xor edx, edx xor edx, edx
mov ah, [menu_selected_color] mov ah, [menu_selected_color]
cmp esi, [ebx+36] cmp esi, [ebx+40]
jz @f jz @f
mov ah, [menu_normal_color] mov ah, [menu_normal_color]
@@: @@:
@ -947,7 +1010,7 @@ MenuDlgProc:
mov ah, [menu_selected_highlight_color] mov ah, [menu_selected_highlight_color]
push ecx push ecx
mov ecx, [esp+8] mov ecx, [esp+8]
cmp ecx, [ebx+36] cmp ecx, [ebx+40]
pop ecx pop ecx
jz .amp1 jz .amp1
mov ah, [menu_highlight_color] mov ah, [menu_highlight_color]
@ -973,7 +1036,7 @@ MenuDlgProc:
pop esi edi pop esi edi
add edi, [cur_width] add edi, [cur_width]
add edi, [cur_width] add edi, [cur_width]
cmp esi, [ebx+48] cmp esi, [ebx+52]
jz @f jz @f
mov esi, [esi] mov esi, [esi]
test esi, esi test esi, esi
@ -981,13 +1044,13 @@ MenuDlgProc:
@@: @@:
; ‹¨­¥©ª  ¯à®ªàã⪨ ; ‹¨­¥©ª  ¯à®ªàã⪨
mov ecx, [ebx+dlgtemplate.height] mov ecx, [ebx+dlgtemplate.height]
cmp ecx, [ebx+40] cmp ecx, [ebx+44]
jz .noscrollbar jz .noscrollbar
sub ecx, 2 sub ecx, 2
jbe .noscrollbar jbe .noscrollbar
mov eax, [ebx+52] mov eax, [ebx+56]
mul ecx mul ecx
div dword [ebx+40] div dword [ebx+44]
push eax push eax
mov eax, [ebx+dlgtemplate.x] mov eax, [ebx+dlgtemplate.x]
add eax, [ebx+dlgtemplate.width] add eax, [ebx+dlgtemplate.width]
@ -1015,6 +1078,25 @@ MenuDlgProc:
.noscrollbar: .noscrollbar:
ret ret
get_ascii_char:
; query keyboard layout
pushad
mov al, [ctrlstate]
and al, 3
xor ecx, ecx
cmp al, 1
sbb ecx, -2
push 26
pop eax
push 2
pop ebx
mov edx, layout
int 0x40
popad
; translate scancode to ASCII
movzx eax, byte [layout+eax]
ret
virtual at 0 virtual at 0
dlgitemtemplate: dlgitemtemplate:
; <EFBFBD>«¥¬¥­âë: ; <EFBFBD>«¥¬¥­âë:
@ -1060,6 +1142,20 @@ DialogBox:
call GenericBox call GenericBox
ret 4 ret 4
; int __stdcall ShowDialogBox(DLGDATA* dlg);
ShowDialogBox:
push ManagerDlgProc
push dword [esp+8]
call ShowGenericBox
ret 4
; void __stdcall DrawDialogBox(DLGDATA* dlg);
DrawDialogBox:
push ManagerDlgProc
push dword [esp+8]
call DrawGenericBox
ret 4
ManagerDlgProc: ManagerDlgProc:
mov ebp, ebx mov ebp, ebx
mov eax, [esp+8] mov eax, [esp+8]
@ -1255,21 +1351,8 @@ ManagerDlgProc:
.editor_char: .editor_char:
test [ctrlstate], 0x3C test [ctrlstate], 0x3C
jnz .ret_draw jnz .ret_draw
; query keyboard layout
pushad
push 26
pop eax
push 2
pop ebx
xor ecx, ecx
cmp [ctrlstate], 1
sbb ecx, -2
mov edx, layout
int 0x40
popad
; translate scancode to ASCII
movzx eax, al movzx eax, al
movzx eax, byte [layout+eax] call get_ascii_char
push eax push eax
; insert entered symbol ; insert entered symbol
xor eax, eax xor eax, eax
@ -1482,6 +1565,10 @@ SayErr:
pop eax pop eax
push aError push aError
push eax push eax
; int __stdcall SayErrTitle(const char* title,
; int num_strings, const char* strings[],
; int num_buttons, const char* buttons[]);
SayErrTitle:
push 2 push 2
jmp @f jmp @f
@ -1571,6 +1658,7 @@ Message:
stosd ; dlgtemplate.title stosd ; dlgtemplate.title
xor eax, eax xor eax, eax
stosd ; (ignored) stosd ; (ignored)
stosd ; (ignored)
stosd ; DlgProc stosd ; DlgProc
stosd ; userdata stosd ; userdata
mov eax, [esp+32+8] mov eax, [esp+32+8]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +1,39 @@
[Associations] [Associations]
asm=/rd/1/TinyPad; AsmMenu1,AsmMenu2 asm=/sys/TinyPad; AsmMenu1,AsmMenu2
inc=/rd/1/TinyPad inc=/sys/TinyPad
ini=/rd/1/TinyPad ini=/sys/TinyPad
txt=/rd/1/TinyPad txt=/sys/TinyPad
jpg=/rd/1/JpegView jpg=/sys/JpegView
jpeg=/rd/1/JpegView jpeg=/sys/JpegView
gif=/rd/1/GIFVIEW; GifMenu1,MenuAnimage gif=/sys/GIFVIEW; GifMenu1,MenuAnimage
wav=/rd/1/AC97SND wav=/sys/AC97SND
mp3=/rd/1/AC97SND mp3=/sys/AC97SND
mid=/rd/1/MIDAMP mid=/sys/MIDAMP
bmp=/rd/1/MV; BmpMenu1,MenuAnimage bmp=/sys/MV; BmpMenu1,MenuAnimage
png=/rd/1/@rcher png=/sys/@rcher
rtf=/rd/1/RtfRead rtf=/sys/RtfRead
3ds=/rd/1/3d/view3ds 3ds=/sys/3d/view3ds
lif=/rd/1/demos/life2 lif=/sys/demos/life2
skn=/rd/1/desktop skn=/sys/desktop
[Menu] [Menu]
AsmMenu1=&<26>¥¤ ªâ®à,/rd/1/TinyPad AsmMenu1=&<26>¥¤ ªâ®à,/sys/TinyPad
AsmMenu2=&Š®¬¯¨«¨à®¢ âì,/rd/1/develop/fasm AsmMenu2=&Š®¬¯¨«¨à®¢ âì,/sys/develop/fasm
GifMenu1=&<26>à®á¬®âà,/rd/1/GIFVIEW GifMenu1=&<26>à®á¬®âà,/sys/GIFVIEW
BmpMenu1=&<26>à®á¬®âà,/rd/1/MV BmpMenu1=&<26>à®á¬®âà,/sys/MV
MenuAnimage=&<26>¥¤ ªâ®à,/rd/1/animage MenuAnimage=&<26>¥¤ ªâ®à,/sys/animage
[Panels] [Panels]
LeftViewMode=2 LeftViewMode=2
RightViewMode=2 RightViewMode=2
[Editor]
# ‘¨¬¢®«ë ª®­æ  áâப¨, ª®â®àë¥ ¡ã¤¥â ¢áâ ¢«ïâì
# । ªâ®à kfar ¯à¨ ¤®¡ ¢«¥­¨¨ ­®¢®© áâப¨:
# DOS - ­ ¯®¤®¡¨¥ DOS/Win (0D 0A), Unix - ­ ¯®¤®¡¨¥ Unix (0A),
# Mac - ­ ¯®¤®¡¨¥ Mac (0D)
EOLStyle=Unix
[FolderShortcuts] [FolderShortcuts]
# Œ®¦­® ®¯à¥¤¥«¨âì ¤® ¤¥áï⨠ááë«®ª ­  ¯ ¯ª¨ Shortcut0...Shortcut9, # Œ®¦­® ®¯à¥¤¥«¨âì ¤® ¤¥áï⨠ááë«®ª ­  ¯ ¯ª¨ Shortcut0...Shortcut9,
# ­  â ª¨¥ ¯ ¯ª¨ ¬®¦­® ᤥ« âì ¡ëáâàë© ¯¥à¥å®¤ ¯® RCtrl+<æ¨äà > # ­  â ª¨¥ ¯ ¯ª¨ ¬®¦­® ᤥ« âì ¡ëáâàë© ¯¥à¥å®¤ ¯® RCtrl+<æ¨äà >

View File

@ -0,0 +1,91 @@
Управляющие сочетания клавиш в KFar.
В панелях:
стрелки, Home, End - перемещение курсора по активной панели
Tab - изменение активной панели
Enter - вход в папку или запуск программы, на которую указывает курсор
F3 - переход к просмотру файла под курсором
F5 - копирование выделенных элементов или элемента под курсором на другую панель
Shift+F5 - копирование выделенных элементов или элемента под курсором
на текущую панель
(нужно будет задать другое имя; для F5 это также можно сделать)
F7 - создание папки
F8 - удаление выделенных элементов или элемента под курсором
F10 - выход
Alt+F1/Alt+F2 - смена диска, отображаемого на левой/правой панели
Alt+F9 - разворачивание окна к максимально возможным размерам и
восстановление размеров
Ctrl+F3 - сортировать файлы/папки на активной панели по имени
Ctrl+F4 - сортировка по расширению
Ctrl+F5 - сортировка по дате/времени последней модификации
Ctrl+F6 - сортировка по размеру
Ctrl+F7 - не сортировать (отображать в том же порядке, что и на диске)
Ctrl+F8 - сортировка по дате/времени создания
Ctrl+F9 - сортировка по дате/времени последнего обращения
F12 - вызов меню экранов
Ctrl+R - перечитать содержимое активной панели
Menu - вызвать контекстное меню для файла под курсором
LeftCtrl+1/2/3/4 - выбрать режим панели (краткий/средний/полный/широкий)
RightCtrl+0..9 - перейти к папке, указанной в разделе [FolderShortcuts]
в ini-файле под именем Shortcut0..9 соответственно
Insert - выделить/снять выделение с текущего файла/папки
Grey[+] - выделить файлы и папки по маске
Grey[-] - снять выделение с файлов и папок по маске
Маска имеет вид типа "*.asm,*.inc|template.asm" (пример задаёт все файлы
с расширениями ASM и INC за исключением template.asm): одна или больше
элементарная маска включения со стандартным значением символов '*' и '?',
разделённых ',' или ';', после чего можно поставить '|' и одну или больше
масок исключения. Маска "*.*" задаёт все файлы с точкой в имени (т.е.
файлы с любым непустым расширением); чтобы задать все файлы, используйте "*".
Grey[*] - инвертировать выделение
Alt+<буква или цифра> - позиционирование курсора на имени файла/папки,
начинающемся на указанную букву или цифру; вызывает окно быстрого поиска,
в котором можно вводить дальнейшие символы имени файла для уточнения,
а также Ctrl+Enter/Shift+Ctrl+Enter для перемещения к следующему/предыдущему
элементу панели, имя которого начинается с введённых букв
В просмотрщике:
Esc = F3 = F10 = Numpad5 - выход
Down - строку вниз
PgDn - страницу вниз
Up - строку вверх
PgUp - страницу вверх
Home - в начало файла
End - в конец файла
Left - символ влево
Right - символ вправо
Ctrl+Left - в режиме Text 20 символов влево;
в режиме Hex байт влево
Ctrl+Right - в режиме Text 20 символов вправо;
в режиме Hex байт вправо
Ctrl+Shift+Left - в начало строк на экране
Ctrl+Shift+Right - в конец строк на экране
F2 - включение/выключение переноса строк
F4 - переключение просмотра Text <-> Hex
F8 - переключение кодировки cp866 (DOS) <-> cp1251 (Win)
Shift+F8 - меню выбора кодировки
F12 - вызов меню экранов
Alt+F9 - разворачивание окна к максимально возможным размерам и
восстановление размеров
В редакторе:
Esc = F10 - выход; если файл был модифицирован, последует вопрос о
необходимости сохранения
Shift+F10 - выход с сохранением
F2 - сохранить файл
Down - строку вниз
PgDn - страницу вниз
Up - строку вверх
PgUp - страницу вверх
Left - предыдущий символ
Right - символ вправо
Home - в начало строки
End - в конец строки
Backspace - удалить символ перед курсором
Del - удалить символ под курсором
Ins - переключить режим вставки/замены при вводе
F12 - вызов меню экранов
Alt+F9 - разворачивание окна к максимально возможным размерам и
восстановление размеров
diamond
mailto:diamondz@land.ru

View File

@ -1,20 +1,21 @@
virtual at 0 virtual at 0
viewer_data: viewer_data:
.hPlugin dd ?
.hFile dd ?
.buf_start dq ? .buf_start dq ?
.cur_pos dq ? .cur_pos dq ?
.filesize dq ? .filesize dq ?
.buf_pos dd ? .buf_pos dd ?
.buf_size dd ? .buf_size dd ?
.col dq ? .col dq ?
.hPlugin dd ?
.hFile dd ?
.hWorkFile dd ? .hWorkFile dd ?
.encoding db ? .encoding db ?
.bEofReached db ?
.flags db ? ; & 1: hex mode .flags db ? ; & 1: hex mode
; & 2: unwrap ; & 2: unwrap
; & 4: big-endian unicode ; & 4: big-endian unicode
.bEofReached db ?
rb 1 rb 1
align 200h
.filename rb 1024 .filename rb 1024
.hostname rb 1024 .hostname rb 1024
.buf rb 16384 .buf rb 16384
@ -154,6 +155,7 @@ view_file:
mov [ebp+viewer_data.hWorkFile], eax mov [ebp+viewer_data.hWorkFile], eax
test eax, eax test eax, eax
jnz .retry jnz .retry
..openerr_in_screen:
push ContinueBtn push ContinueBtn
push 1 push 1
push aCannotOpenFile_ptr push aCannotOpenFile_ptr
@ -212,6 +214,9 @@ view_file:
@@: @@:
mov [ebp+viewer_data.encoding], encodings.unicode mov [ebp+viewer_data.encoding], encodings.unicode
.nounicode: .nounicode:
viewer_OnRedraw:
or [cursor_x], -1
or [cursor_y], -1
call viewer_set_keybar call viewer_set_keybar
call viewer_draw_text call viewer_draw_text
ret ret
@ -418,63 +423,35 @@ viewer_draw_text:
xor edx, edx xor edx, edx
call get_console_ptr call get_console_ptr
mov ah, [view_status_color] mov ah, [view_status_color]
lea esi, [ebp+viewer_data.filename]
mov dl, 3
mov ecx, [cur_width] mov ecx, [cur_width]
sub ecx, 44 sub ecx, 44
cmp ecx, 20 cmp ecx, 20
jae .5 jae @f
mov cl, 20 mov cl, 20
.5:
lodsb
cmp al, '/'
jnz @f
dec edx
jz .6
@@: @@:
stosw call viewedit_draw_filename
loop .5 add ecx, 11
.6:
dec ecx
stosw
push esi
@@:
inc esi
cmp byte [esi-1], 0
jnz @b
sub esi, [esp]
dec esi
cmp ecx, esi
jae .7
mov al, '.'
stosw
stosw
stosw
sub ecx, 3
sub esi, ecx
add [esp], esi
.7:
pop esi
@@:
lodsb
test al, al
jz @f
dec ecx
stosw
jmp @b
@@:
mov al, ' '
add ecx, 8
rep stosw rep stosw
movzx esi, [ebp+viewer_data.encoding] movzx esi, [ebp+viewer_data.encoding]
lea esi, [encodings.names+esi*8] lea esi, [encodings.names+esi*8]
mov cl, 8 push edi esi
dec edi
dec edi
std
add esi, 8
@@:
dec esi
cmp byte [esi], ' '
jz @b
@@: @@:
lodsb lodsb
stosw stosw
loop @b cmp esi, [esp]
jae @b
cld
pop esi edi
mov al, ' ' mov al, ' '
mov cl, 8 mov cl, 13
rep stosw rep stosw
std std
push edi push edi
@ -700,7 +677,7 @@ end if
push edx push edx
mov eax, ecx mov eax, ecx
xor edx, edx xor edx, edx
div [tabsize] div [viewer_tabsize]
mov ecx, edx mov ecx, edx
pop edx pop edx
jmp .1 jmp .1
@ -716,7 +693,7 @@ end if
push edx push edx
push ecx push ecx
mov eax, ecx mov eax, ecx
mov ecx, [tabsize] mov ecx, [viewer_tabsize]
xor edx, edx xor edx, edx
div ecx div ecx
pop eax pop eax
@ -1001,6 +978,54 @@ end if
adc dword [scrpos+4], 0 adc dword [scrpos+4], 0
ret ret
viewedit_draw_filename:
lea esi, [ebp+viewer_data.filename]
xor edx, edx
cmp [ebp+viewer_data.hPlugin], edx
mov dl, 3
jz .5
mov dl, 1
.5:
lodsb
cmp al, '/'
jnz @f
dec edx
jz .6
@@:
stosw
loop .5
.6:
dec ecx
stosw
push esi
@@:
inc esi
cmp byte [esi-1], 0
jnz @b
sub esi, [esp]
dec esi
cmp ecx, esi
jae .7
mov al, '.'
stosw
stosw
stosw
sub ecx, 3
sub esi, ecx
add [esp], esi
.7:
pop esi
@@:
lodsb
test al, al
jz @f
dec ecx
stosw
jmp @b
@@:
mov al, ' '
ret
viewer_seek_to_current: viewer_seek_to_current:
mov eax, dword [ebp+viewer_data.cur_pos] mov eax, dword [ebp+viewer_data.cur_pos]
mov edx, dword [ebp+viewer_data.cur_pos+4] mov edx, dword [ebp+viewer_data.cur_pos+4]
@ -1213,7 +1238,7 @@ viewer_next_newline:
.tab: .tab:
push ecx push ecx
mov eax, ecx mov eax, ecx
mov ecx, [tabsize] mov ecx, [viewer_tabsize]
xor edx, edx xor edx, edx
div ecx div ecx
sub ecx, edx sub ecx, edx
@ -1232,8 +1257,11 @@ viewer_next_newline:
jnz .2 jnz .2
dec [ebp+viewer_data.buf_pos] dec [ebp+viewer_data.buf_pos]
.2: .2:
clc
.ret: .ret:
pushf
call viewer_set_curpos call viewer_set_curpos
popf
ret ret
viewer_prev_newline: viewer_prev_newline:
@ -1363,11 +1391,6 @@ end if
movsw movsw
jmp draw_keybar jmp draw_keybar
viewer_OnRedraw:
call viewer_set_keybar
call viewer_draw_text
ret
viewer_OnExit: viewer_OnExit:
mov edx, [ebp+viewer_data.hPlugin] mov edx, [ebp+viewer_data.hPlugin]
test edx, edx test edx, edx
@ -1383,6 +1406,7 @@ viewer_OnExit:
ret ret
viewer_IsHandleUsed: viewer_IsHandleUsed:
editor_IsHandleUsed:
cmp edx, [ebp+viewer_data.hPlugin] cmp edx, [ebp+viewer_data.hPlugin]
jnz @f jnz @f
cmp ebx, [ebp+viewer_data.hFile] cmp ebx, [ebp+viewer_data.hFile]
@ -1579,6 +1603,25 @@ else
stosd stosd
stosb stosb
end if end if
jmp viewedit_getname
editor_getname:
if lang eq ru
mov eax, '<27>¥¤ '
stosd
mov eax, 'ªâ®à'
stosd
mov eax, ' '
stosd
stosb
else
mov eax, 'Edit'
stosd
mov eax, ' '
stosd
stosd
stosb
end if
viewedit_getname:
sub ecx, 13 sub ecx, 13
cmp [ebp+viewer_data.hPlugin], 0 cmp [ebp+viewer_data.hPlugin], 0
jz .native jz .native