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) committed 2008-07-02 20:27:47 +00:00
1 parent 7e4b227ec1
commit c1fce6235d
7 files changed
+3472 -308

No files matched your search

-1
View File
@@ -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
+276 -188
View File
@@ -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:
; Элементы:
@@ -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]
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+28 -21
View File
@@ -1,31 +1,38 @@
[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=&Редактор,/rd/1/TinyPad
AsmMenu2=&Компилировать,/rd/1/develop/fasm
GifMenu1=&Просмотр,/rd/1/GIFVIEW
BmpMenu1=&Просмотр,/rd/1/MV
MenuAnimage=&Редактор,/rd/1/animage
AsmMenu1=&Редактор,/sys/TinyPad
AsmMenu2=&Компилировать,/sys/develop/fasm
GifMenu1=&Просмотр,/sys/GIFVIEW
BmpMenu1=&Просмотр,/sys/MV
MenuAnimage=&Редактор,/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,
+91
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
+99 -56
View File
@@ -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, 'Реда'
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