forked from KolibriOS/kolibrios
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:
parent
7e4b227ec1
commit
c1fce6235d
@ -1,7 +1,6 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru >lang.inc
|
||||
@fasm kfar.asm kfar
|
||||
mtappack kfar
|
||||
@erase lang.inc
|
||||
@kpack kfar
|
||||
@pause
|
@ -8,6 +8,7 @@ dlgtemplate:
|
||||
; ¡¨â 1: ¨á¯®«ì§®¢ âì áâ ¤ àâë¥ æ¢¥â ¯à¥¤ã¯à¥¦¤¥¨ï/®è¨¡ª¨
|
||||
; (¥á«¨ «î¡®© ¨§ íâ¨å ¡¨â®¢ ãáâ ®¢«¥, ¯®«ï main_color,border_color,header_color
|
||||
; ¨£®à¨àãîâáï)
|
||||
; ¡¨â 2: ¥ à¨á®¢ âì â¥ì
|
||||
.flags dd ?
|
||||
.x dd ?
|
||||
.y dd ?
|
||||
@ -20,10 +21,137 @@ dlgtemplate:
|
||||
.border_color db ?
|
||||
.header_color db ?
|
||||
db ? ; align
|
||||
.dataptr dd ? ; used internally, ignored on input
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
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
|
||||
mov ebx, [esp+20h+4]
|
||||
; center window if required
|
||||
@ -86,7 +214,7 @@ GenericBox:
|
||||
@@:
|
||||
; allocate memory for data under dialog
|
||||
; for 'No memory' dialog use static data area
|
||||
mov ebp, nomem_dlgsavearea
|
||||
mov eax, nomem_dlgsavearea
|
||||
cmp ebx, nomem_dlgdata
|
||||
jz .allocated
|
||||
mov eax, [ebx+dlgtemplate.width]
|
||||
@ -99,7 +227,7 @@ GenericBox:
|
||||
add edx, [ebx+dlgtemplate.border_size_y]
|
||||
inc edx
|
||||
mul edx
|
||||
lea ecx, [eax*2]
|
||||
lea ecx, [eax*2+8]
|
||||
call xpgalloc
|
||||
test eax, eax
|
||||
jnz @f
|
||||
@ -109,8 +237,11 @@ GenericBox:
|
||||
or eax, -1
|
||||
ret 8
|
||||
@@:
|
||||
mov ebp, eax
|
||||
.allocated:
|
||||
mov [ebx+dlgtemplate.dataptr], eax
|
||||
pop dword [eax+4]
|
||||
pop dword [eax]
|
||||
lea ebp, [eax+8]
|
||||
; save data
|
||||
mov eax, [ebx+dlgtemplate.y]
|
||||
add eax, [ebx+dlgtemplate.height]
|
||||
@ -131,12 +262,13 @@ GenericBox:
|
||||
push eax
|
||||
call save_console_data
|
||||
; draw shadow
|
||||
test byte [ebx+dlgtemplate.flags], 4
|
||||
jnz .noshadow
|
||||
mov eax, [ebx+dlgtemplate.x]
|
||||
sub eax, [ebx+dlgtemplate.border_size_x]
|
||||
ja @f
|
||||
xor eax, eax
|
||||
@@:
|
||||
push eax ; save real window left
|
||||
inc eax
|
||||
inc eax
|
||||
mov edx, [ebx+dlgtemplate.y]
|
||||
@ -144,7 +276,6 @@ GenericBox:
|
||||
ja @f
|
||||
xor edx, edx
|
||||
@@:
|
||||
push edx ; save real window top
|
||||
inc edx
|
||||
call get_console_ptr
|
||||
mov ecx, [ebx+dlgtemplate.y]
|
||||
@ -185,9 +316,29 @@ GenericBox:
|
||||
add edi, [cur_width]
|
||||
dec edx
|
||||
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
|
||||
pop edx
|
||||
pop eax
|
||||
mov eax, [ebx+dlgtemplate.x]
|
||||
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
|
||||
mov ecx, [ebx+dlgtemplate.x]
|
||||
add ecx, [ebx+dlgtemplate.width]
|
||||
@ -302,117 +453,24 @@ GenericBox:
|
||||
dec edx
|
||||
jnz @b
|
||||
; send redraw message
|
||||
mov eax, [esp+28h+8]
|
||||
push ebx ebp
|
||||
mov eax, [esp+28h]
|
||||
push 0
|
||||
push 0
|
||||
push 1
|
||||
push ebx
|
||||
call eax
|
||||
call draw_image
|
||||
pop ebp ebx
|
||||
; message loop
|
||||
.event:
|
||||
push 10
|
||||
pop eax
|
||||
int 40h
|
||||
dec eax
|
||||
jz .redraw
|
||||
dec eax
|
||||
jz .key
|
||||
jmp exit
|
||||
.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:
|
||||
popad
|
||||
ret 8
|
||||
|
||||
; void __stdcall HideGenericBox(DLGTEMPLATE* dlg, int bRedrawWindow);
|
||||
HideGenericBox:
|
||||
; void __stdcall HideDialogBox(DLGDATA* dlg, int bRedrawWindow);
|
||||
HideDialogBox:
|
||||
pushad
|
||||
mov ebx, [esp+24h]
|
||||
mov ebp, [ebx+dlgtemplate.dataptr]
|
||||
add ebp, 8
|
||||
; restore data
|
||||
mov eax, [ebx+dlgtemplate.y]
|
||||
add eax, [ebx+dlgtemplate.height]
|
||||
@ -433,16 +491,21 @@ GenericBox:
|
||||
push eax
|
||||
call restore_console_data
|
||||
call draw_keybar
|
||||
cmp ebx, nomem_dlgdata
|
||||
jz @f
|
||||
mov ecx, ebp
|
||||
call pgfree
|
||||
@@:
|
||||
lea ecx, [ebp-8]
|
||||
push dword [ecx]
|
||||
push dword [ecx+4]
|
||||
pop [ebx+dlgtemplate.y]
|
||||
pop [ebx+dlgtemplate.x]
|
||||
cmp ebx, nomem_dlgdata
|
||||
jz @f
|
||||
call pgfree
|
||||
@@:
|
||||
or [cursor_x], -1
|
||||
or [cursor_y], -1
|
||||
cmp dword [esp+28h], 0
|
||||
jz @f
|
||||
call draw_image
|
||||
@@:
|
||||
popad
|
||||
ret 8
|
||||
|
||||
@ -555,13 +618,13 @@ menu:
|
||||
; void* variants, const char* title, unsigned flags);
|
||||
menu_centered_in:
|
||||
pushad
|
||||
mov ecx, 56
|
||||
; 36 bytes for dlgtemplate + additional:
|
||||
; +36: dd cur_variant
|
||||
; +40: dd num_variants
|
||||
; +44: dd begin_variant
|
||||
; +48: dd end_variant
|
||||
; +52: dd cur_variant_idx
|
||||
mov ecx, 60
|
||||
; 40 bytes for dlgtemplate + additional:
|
||||
; +40: dd cur_variant
|
||||
; +44: dd num_variants
|
||||
; +48: dd begin_variant
|
||||
; +52: dd end_variant
|
||||
; +56: dd cur_variant_idx
|
||||
call xpgalloc
|
||||
test eax, eax
|
||||
jnz @f
|
||||
@ -584,16 +647,16 @@ menu_centered_in:
|
||||
xor eax, eax
|
||||
xor ecx, ecx
|
||||
mov esi, [esp+20h+20]
|
||||
mov [ebx+36], esi
|
||||
and dword [ebx+52], 0
|
||||
mov [ebx+40], esi
|
||||
and dword [ebx+56], 0
|
||||
@@:
|
||||
cmp dword [esi+4], 0
|
||||
jz .find_width
|
||||
mov esi, [esi+4]
|
||||
inc dword [ebx+52]
|
||||
inc dword [ebx+56]
|
||||
jmp @b
|
||||
.find_width:
|
||||
mov [ebx+44], esi
|
||||
mov [ebx+48], esi
|
||||
add esi, 8
|
||||
push esi
|
||||
xor edx, edx
|
||||
@ -628,7 +691,7 @@ menu_centered_in:
|
||||
sub eax, [ebx+dlgtemplate.border_size_x]
|
||||
mov [ebx+dlgtemplate.width], eax
|
||||
mov [ebx+dlgtemplate.height], ecx
|
||||
mov [ebx+40], ecx
|
||||
mov [ebx+44], ecx
|
||||
sub eax, [esp+20h+12]
|
||||
neg eax
|
||||
sar eax, 1
|
||||
@ -677,8 +740,8 @@ menu_centered_in:
|
||||
mov [ebx+dlgtemplate.y], 3
|
||||
.small_height:
|
||||
mov ecx, [ebx+dlgtemplate.height]
|
||||
mov eax, [ebx+36]
|
||||
mov [ebx+44], eax
|
||||
mov eax, [ebx+40]
|
||||
mov [ebx+48], eax
|
||||
dec ecx
|
||||
jz .skip
|
||||
push ecx
|
||||
@ -688,13 +751,13 @@ menu_centered_in:
|
||||
mov eax, [eax+4]
|
||||
loop @b
|
||||
@@:
|
||||
mov [ebx+44], eax
|
||||
mov [ebx+48], eax
|
||||
pop ecx
|
||||
.loop:
|
||||
mov eax, [eax]
|
||||
loop .loop
|
||||
.skip:
|
||||
mov [ebx+48], eax
|
||||
mov [ebx+52], eax
|
||||
mov eax, [esp+20h+24]
|
||||
mov [ebx+dlgtemplate.title], eax
|
||||
mov al, [menu_normal_color]
|
||||
@ -723,25 +786,25 @@ MenuDlgProc:
|
||||
call .dodraw
|
||||
ret 16
|
||||
.prev:
|
||||
mov eax, [ebx+36]
|
||||
mov eax, [ebx+40]
|
||||
cmp dword [eax+4], 0
|
||||
jz .end
|
||||
call .line_prev
|
||||
.posret:
|
||||
mov [ebx+36], eax
|
||||
mov [ebx+40], eax
|
||||
.redraw:
|
||||
call .dodraw
|
||||
call draw_image
|
||||
xor eax, eax
|
||||
ret 16
|
||||
.next:
|
||||
mov eax, [ebx+36]
|
||||
mov eax, [ebx+40]
|
||||
cmp dword [eax], 0
|
||||
jz .home
|
||||
call .line_next
|
||||
jmp .posret
|
||||
.pgdn:
|
||||
mov eax, [ebx+36]
|
||||
mov eax, [ebx+40]
|
||||
mov ecx, [ebx+dlgtemplate.height]
|
||||
.pgdnl:
|
||||
cmp dword [eax], 0
|
||||
@ -775,7 +838,7 @@ MenuDlgProc:
|
||||
jz .ins
|
||||
cmp al, 0x53
|
||||
jz .del
|
||||
mov edx, [ebx+36]
|
||||
mov edx, [ebx+40]
|
||||
@@:
|
||||
cmp dword [edx+4], 0
|
||||
jz @f
|
||||
@ -803,7 +866,7 @@ MenuDlgProc:
|
||||
xor eax, eax
|
||||
ret 16
|
||||
.pgup:
|
||||
mov eax, [ebx+36]
|
||||
mov eax, [ebx+40]
|
||||
mov ecx, [ebx+dlgtemplate.height]
|
||||
.pgupl:
|
||||
cmp dword [eax+4], 0
|
||||
@ -812,14 +875,14 @@ MenuDlgProc:
|
||||
loop .pgupl
|
||||
jmp .posret
|
||||
.home:
|
||||
mov eax, [ebx+36]
|
||||
mov eax, [ebx+40]
|
||||
@@:
|
||||
cmp dword [eax+4], 0
|
||||
jz @f
|
||||
mov eax, [eax+4]
|
||||
jmp @b
|
||||
@@:
|
||||
mov [ebx+44], eax
|
||||
mov [ebx+48], eax
|
||||
push eax
|
||||
mov ecx, [ebx+dlgtemplate.height]
|
||||
dec ecx
|
||||
@ -828,19 +891,19 @@ MenuDlgProc:
|
||||
mov eax, [eax]
|
||||
loop .h2
|
||||
.h1:
|
||||
mov [ebx+48], eax
|
||||
mov [ebx+52], eax
|
||||
pop eax
|
||||
and dword [ebx+52], 0
|
||||
and dword [ebx+56], 0
|
||||
jmp .posret
|
||||
.end:
|
||||
mov eax, [ebx+36]
|
||||
mov eax, [ebx+40]
|
||||
@@:
|
||||
cmp dword [eax], 0
|
||||
jz @f
|
||||
mov eax, [eax]
|
||||
jmp @b
|
||||
@@:
|
||||
mov [ebx+48], eax
|
||||
mov [ebx+52], eax
|
||||
push eax
|
||||
mov ecx, [ebx+dlgtemplate.height]
|
||||
dec ecx
|
||||
@ -849,17 +912,17 @@ MenuDlgProc:
|
||||
mov eax, [eax+4]
|
||||
loop .e2
|
||||
.e1:
|
||||
mov [ebx+44], eax
|
||||
mov eax, [ebx+40]
|
||||
mov [ebx+48], eax
|
||||
mov eax, [ebx+44]
|
||||
dec eax
|
||||
mov [ebx+52], eax
|
||||
mov [ebx+56], eax
|
||||
pop eax
|
||||
jmp .posret
|
||||
.esc:
|
||||
or eax, -1
|
||||
ret 16
|
||||
.enter:
|
||||
mov eax, [ebx+36]
|
||||
mov eax, [ebx+40]
|
||||
ret 16
|
||||
.ins:
|
||||
push 5
|
||||
@ -869,7 +932,7 @@ MenuDlgProc:
|
||||
push 4
|
||||
pop edx
|
||||
@@:
|
||||
mov eax, [ebx+36]
|
||||
mov eax, [ebx+40]
|
||||
cmp byte [eax+8], '/'
|
||||
jnz @f
|
||||
cmp word [eax+9], 'cd'
|
||||
@ -885,41 +948,41 @@ MenuDlgProc:
|
||||
ret 16
|
||||
|
||||
.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]
|
||||
jnz @f
|
||||
mov edx, [ebx+44]
|
||||
mov edx, [edx]
|
||||
mov [ebx+44], edx
|
||||
mov edx, [ebx+48]
|
||||
mov edx, [edx+4]
|
||||
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, [edx]
|
||||
mov [ebx+48], edx
|
||||
mov edx, [ebx+52]
|
||||
mov edx, [edx]
|
||||
mov [ebx+52], edx
|
||||
@@:
|
||||
mov eax, [eax]
|
||||
inc dword [ebx+52]
|
||||
inc dword [ebx+56]
|
||||
ret
|
||||
|
||||
.dodraw:
|
||||
mov eax, [ebx+dlgtemplate.x]
|
||||
mov edx, [ebx+dlgtemplate.y]
|
||||
call get_console_ptr
|
||||
mov esi, [ebx+44]
|
||||
mov esi, [ebx+48]
|
||||
.0:
|
||||
xor edx, edx
|
||||
mov ah, [menu_selected_color]
|
||||
cmp esi, [ebx+36]
|
||||
cmp esi, [ebx+40]
|
||||
jz @f
|
||||
mov ah, [menu_normal_color]
|
||||
@@:
|
||||
@ -947,7 +1010,7 @@ MenuDlgProc:
|
||||
mov ah, [menu_selected_highlight_color]
|
||||
push ecx
|
||||
mov ecx, [esp+8]
|
||||
cmp ecx, [ebx+36]
|
||||
cmp ecx, [ebx+40]
|
||||
pop ecx
|
||||
jz .amp1
|
||||
mov ah, [menu_highlight_color]
|
||||
@ -973,7 +1036,7 @@ MenuDlgProc:
|
||||
pop esi edi
|
||||
add edi, [cur_width]
|
||||
add edi, [cur_width]
|
||||
cmp esi, [ebx+48]
|
||||
cmp esi, [ebx+52]
|
||||
jz @f
|
||||
mov esi, [esi]
|
||||
test esi, esi
|
||||
@ -981,13 +1044,13 @@ MenuDlgProc:
|
||||
@@:
|
||||
; ‹¨¥©ª ¯à®ªàã⪨
|
||||
mov ecx, [ebx+dlgtemplate.height]
|
||||
cmp ecx, [ebx+40]
|
||||
cmp ecx, [ebx+44]
|
||||
jz .noscrollbar
|
||||
sub ecx, 2
|
||||
jbe .noscrollbar
|
||||
mov eax, [ebx+52]
|
||||
mov eax, [ebx+56]
|
||||
mul ecx
|
||||
div dword [ebx+40]
|
||||
div dword [ebx+44]
|
||||
push eax
|
||||
mov eax, [ebx+dlgtemplate.x]
|
||||
add eax, [ebx+dlgtemplate.width]
|
||||
@ -1015,6 +1078,25 @@ MenuDlgProc:
|
||||
.noscrollbar:
|
||||
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
|
||||
dlgitemtemplate:
|
||||
; <EFBFBD>«¥¬¥âë:
|
||||
@ -1060,6 +1142,20 @@ DialogBox:
|
||||
call GenericBox
|
||||
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:
|
||||
mov ebp, ebx
|
||||
mov eax, [esp+8]
|
||||
@ -1255,21 +1351,8 @@ ManagerDlgProc:
|
||||
.editor_char:
|
||||
test [ctrlstate], 0x3C
|
||||
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, byte [layout+eax]
|
||||
call get_ascii_char
|
||||
push eax
|
||||
; insert entered symbol
|
||||
xor eax, eax
|
||||
@ -1482,6 +1565,10 @@ SayErr:
|
||||
pop eax
|
||||
push aError
|
||||
push eax
|
||||
; int __stdcall SayErrTitle(const char* title,
|
||||
; int num_strings, const char* strings[],
|
||||
; int num_buttons, const char* buttons[]);
|
||||
SayErrTitle:
|
||||
push 2
|
||||
jmp @f
|
||||
|
||||
@ -1571,6 +1658,7 @@ Message:
|
||||
stosd ; dlgtemplate.title
|
||||
xor eax, eax
|
||||
stosd ; (ignored)
|
||||
stosd ; (ignored)
|
||||
stosd ; DlgProc
|
||||
stosd ; userdata
|
||||
mov eax, [esp+32+8]
|
||||
|
2294
programs/fs/kfar/trunk/editor.inc
Normal file
2294
programs/fs/kfar/trunk/editor.inc
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,32 +1,39 @@
|
||||
[Associations]
|
||||
asm=/rd/1/TinyPad; AsmMenu1,AsmMenu2
|
||||
inc=/rd/1/TinyPad
|
||||
ini=/rd/1/TinyPad
|
||||
txt=/rd/1/TinyPad
|
||||
jpg=/rd/1/JpegView
|
||||
jpeg=/rd/1/JpegView
|
||||
gif=/rd/1/GIFVIEW; GifMenu1,MenuAnimage
|
||||
wav=/rd/1/AC97SND
|
||||
mp3=/rd/1/AC97SND
|
||||
mid=/rd/1/MIDAMP
|
||||
bmp=/rd/1/MV; BmpMenu1,MenuAnimage
|
||||
png=/rd/1/@rcher
|
||||
rtf=/rd/1/RtfRead
|
||||
3ds=/rd/1/3d/view3ds
|
||||
lif=/rd/1/demos/life2
|
||||
skn=/rd/1/desktop
|
||||
asm=/sys/TinyPad; AsmMenu1,AsmMenu2
|
||||
inc=/sys/TinyPad
|
||||
ini=/sys/TinyPad
|
||||
txt=/sys/TinyPad
|
||||
jpg=/sys/JpegView
|
||||
jpeg=/sys/JpegView
|
||||
gif=/sys/GIFVIEW; GifMenu1,MenuAnimage
|
||||
wav=/sys/AC97SND
|
||||
mp3=/sys/AC97SND
|
||||
mid=/sys/MIDAMP
|
||||
bmp=/sys/MV; BmpMenu1,MenuAnimage
|
||||
png=/sys/@rcher
|
||||
rtf=/sys/RtfRead
|
||||
3ds=/sys/3d/view3ds
|
||||
lif=/sys/demos/life2
|
||||
skn=/sys/desktop
|
||||
|
||||
[Menu]
|
||||
AsmMenu1=&<26>¥¤ ªâ®à,/rd/1/TinyPad
|
||||
AsmMenu2=&Š®¬¯¨«¨à®¢ âì,/rd/1/develop/fasm
|
||||
GifMenu1=&<26>à®á¬®âà,/rd/1/GIFVIEW
|
||||
BmpMenu1=&<26>à®á¬®âà,/rd/1/MV
|
||||
MenuAnimage=&<26>¥¤ ªâ®à,/rd/1/animage
|
||||
AsmMenu1=&<26>¥¤ ªâ®à,/sys/TinyPad
|
||||
AsmMenu2=&Š®¬¯¨«¨à®¢ âì,/sys/develop/fasm
|
||||
GifMenu1=&<26>à®á¬®âà,/sys/GIFVIEW
|
||||
BmpMenu1=&<26>à®á¬®âà,/sys/MV
|
||||
MenuAnimage=&<26>¥¤ ªâ®à,/sys/animage
|
||||
|
||||
[Panels]
|
||||
LeftViewMode=2
|
||||
RightViewMode=2
|
||||
|
||||
[Editor]
|
||||
# ‘¨¬¢®«ë ª®æ áâப¨, ª®â®àë¥ ¡ã¤¥â ¢áâ ¢«ïâì
|
||||
# । ªâ®à kfar ¯à¨ ¤®¡ ¢«¥¨¨ ®¢®© áâப¨:
|
||||
# DOS - ¯®¤®¡¨¥ DOS/Win (0D 0A), Unix - ¯®¤®¡¨¥ Unix (0A),
|
||||
# Mac - ¯®¤®¡¨¥ Mac (0D)
|
||||
EOLStyle=Unix
|
||||
|
||||
[FolderShortcuts]
|
||||
# Œ®¦® ®¯à¥¤¥«¨âì ¤® ¤¥áï⨠ááë«®ª ¯ ¯ª¨ Shortcut0...Shortcut9,
|
||||
# â ª¨¥ ¯ ¯ª¨ ¬®¦® ᤥ« âì ¡ëáâàë© ¯¥à¥å®¤ ¯® RCtrl+<æ¨äà >
|
||||
|
91
programs/fs/kfar/trunk/kfar.txt
Normal file
91
programs/fs/kfar/trunk/kfar.txt
Normal 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
|
@ -1,20 +1,21 @@
|
||||
virtual at 0
|
||||
viewer_data:
|
||||
.hPlugin dd ?
|
||||
.hFile dd ?
|
||||
.buf_start dq ?
|
||||
.cur_pos dq ?
|
||||
.filesize dq ?
|
||||
.buf_pos dd ?
|
||||
.buf_size dd ?
|
||||
.col dq ?
|
||||
.hPlugin dd ?
|
||||
.hFile dd ?
|
||||
.hWorkFile dd ?
|
||||
.encoding db ?
|
||||
.bEofReached db ?
|
||||
.flags db ? ; & 1: hex mode
|
||||
; & 2: unwrap
|
||||
; & 4: big-endian unicode
|
||||
.bEofReached db ?
|
||||
rb 1
|
||||
align 200h
|
||||
.filename rb 1024
|
||||
.hostname rb 1024
|
||||
.buf rb 16384
|
||||
@ -154,6 +155,7 @@ view_file:
|
||||
mov [ebp+viewer_data.hWorkFile], eax
|
||||
test eax, eax
|
||||
jnz .retry
|
||||
..openerr_in_screen:
|
||||
push ContinueBtn
|
||||
push 1
|
||||
push aCannotOpenFile_ptr
|
||||
@ -212,6 +214,9 @@ view_file:
|
||||
@@:
|
||||
mov [ebp+viewer_data.encoding], encodings.unicode
|
||||
.nounicode:
|
||||
viewer_OnRedraw:
|
||||
or [cursor_x], -1
|
||||
or [cursor_y], -1
|
||||
call viewer_set_keybar
|
||||
call viewer_draw_text
|
||||
ret
|
||||
@ -418,63 +423,35 @@ viewer_draw_text:
|
||||
xor edx, edx
|
||||
call get_console_ptr
|
||||
mov ah, [view_status_color]
|
||||
lea esi, [ebp+viewer_data.filename]
|
||||
mov dl, 3
|
||||
mov ecx, [cur_width]
|
||||
sub ecx, 44
|
||||
cmp ecx, 20
|
||||
jae .5
|
||||
jae @f
|
||||
mov cl, 20
|
||||
.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, ' '
|
||||
add ecx, 8
|
||||
call viewedit_draw_filename
|
||||
add ecx, 11
|
||||
rep stosw
|
||||
movzx esi, [ebp+viewer_data.encoding]
|
||||
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
|
||||
stosw
|
||||
loop @b
|
||||
cmp esi, [esp]
|
||||
jae @b
|
||||
cld
|
||||
pop esi edi
|
||||
mov al, ' '
|
||||
mov cl, 8
|
||||
mov cl, 13
|
||||
rep stosw
|
||||
std
|
||||
push edi
|
||||
@ -700,7 +677,7 @@ end if
|
||||
push edx
|
||||
mov eax, ecx
|
||||
xor edx, edx
|
||||
div [tabsize]
|
||||
div [viewer_tabsize]
|
||||
mov ecx, edx
|
||||
pop edx
|
||||
jmp .1
|
||||
@ -716,7 +693,7 @@ end if
|
||||
push edx
|
||||
push ecx
|
||||
mov eax, ecx
|
||||
mov ecx, [tabsize]
|
||||
mov ecx, [viewer_tabsize]
|
||||
xor edx, edx
|
||||
div ecx
|
||||
pop eax
|
||||
@ -1001,6 +978,54 @@ end if
|
||||
adc dword [scrpos+4], 0
|
||||
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:
|
||||
mov eax, dword [ebp+viewer_data.cur_pos]
|
||||
mov edx, dword [ebp+viewer_data.cur_pos+4]
|
||||
@ -1213,7 +1238,7 @@ viewer_next_newline:
|
||||
.tab:
|
||||
push ecx
|
||||
mov eax, ecx
|
||||
mov ecx, [tabsize]
|
||||
mov ecx, [viewer_tabsize]
|
||||
xor edx, edx
|
||||
div ecx
|
||||
sub ecx, edx
|
||||
@ -1232,8 +1257,11 @@ viewer_next_newline:
|
||||
jnz .2
|
||||
dec [ebp+viewer_data.buf_pos]
|
||||
.2:
|
||||
clc
|
||||
.ret:
|
||||
pushf
|
||||
call viewer_set_curpos
|
||||
popf
|
||||
ret
|
||||
|
||||
viewer_prev_newline:
|
||||
@ -1363,11 +1391,6 @@ end if
|
||||
movsw
|
||||
jmp draw_keybar
|
||||
|
||||
viewer_OnRedraw:
|
||||
call viewer_set_keybar
|
||||
call viewer_draw_text
|
||||
ret
|
||||
|
||||
viewer_OnExit:
|
||||
mov edx, [ebp+viewer_data.hPlugin]
|
||||
test edx, edx
|
||||
@ -1383,6 +1406,7 @@ viewer_OnExit:
|
||||
ret
|
||||
|
||||
viewer_IsHandleUsed:
|
||||
editor_IsHandleUsed:
|
||||
cmp edx, [ebp+viewer_data.hPlugin]
|
||||
jnz @f
|
||||
cmp ebx, [ebp+viewer_data.hFile]
|
||||
@ -1579,6 +1603,25 @@ else
|
||||
stosd
|
||||
stosb
|
||||
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
|
||||
cmp [ebp+viewer_data.hPlugin], 0
|
||||
jz .native
|
||||
|
Loading…
Reference in New Issue
Block a user