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
|
@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
|
@ -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]
|
||||||
|
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,31 +1,38 @@
|
|||||||
[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,
|
||||||
|
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
|
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
|
||||||
|
Loading…
Reference in New Issue
Block a user