Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 473 → Rev 474

/programs/fs/kfar/trunk/viewer.inc
10,6 → 10,7
.bEofReached db ?
.flags db ? ; & 1: hex mode
; & 2: unwrap
; & 4: big-endian unicode
rb 1
.filename rb 1024
.buf rb 16384
24,9 → 25,11
ret
.file:
lea esi, [ebp + panel1_dir - panel1_data]
mov eax, viewer_data.size
push ecx
mov ecx, viewer_data.size
mov edx, viewer_vtable
call new_screen
pop ecx
test eax, eax
jnz @f
ret
128,6 → 131,16
jz .attr_retry
jmp delete_active_screen
.readok:
cmp ebx, 2
jb .nounicode
cmp word [ebp+viewer_data.buf], 0xFEFF
jz @f
cmp word [ebp+viewer_data.buf], 0xFFFE
jnz .nounicode
or byte [ebp+viewer_data.flags], 4
@@:
mov [ebp+viewer_data.encoding], encodings.unicode
.nounicode:
call viewer_set_keybar
call viewer_draw_text
ret
134,6 → 147,24
 
viewer_get_next_char:
pusha
cmp [ebp+viewer_data.encoding], encodings.unicode
jnz @f
cmp [bForHex], 0
jnz @f
cmp dword [ebp+viewer_data.buf_start], 0
jnz @f
cmp dword [ebp+viewer_data.buf_start+4], 0
jnz @f
lea eax, [ebp+viewer_data.buf]
cmp eax, [ebp+viewer_data.buf_pos]
jnz @f
cmp word [eax], 0xFFFE
jz .skip
cmp word [eax], 0xFEFF
jnz @f
.skip:
add [ebp+viewer_data.buf_pos], 2
@@:
mov eax, [ebp+viewer_data.buf_pos]
lea ecx, [ebp+viewer_data.buf]
add ecx, [ebp+viewer_data.buf_size]
184,6 → 215,8
popa
ret
.buffered:
cmp [ebp+viewer_data.encoding], encodings.unicode
jz .unicode
mov al, [eax]
.done:
mov [esp+28], al
192,6 → 225,17
popa
ret
 
.unicode:
inc [ebp+viewer_data.buf_pos]
cmp [bForHex], 0
jnz @f
call read_unicode_char
jmp .done
@@:
mov ax, [eax]
mov [esp+29], ah
jmp .done
 
viewer_get_prev_char:
pusha
lea ecx, [ebp+viewer_data.buf]
217,14 → 261,61
.buffered:
mov eax, [ebp+viewer_data.buf_pos]
dec eax
cmp [ebp+viewer_data.encoding], encodings.unicode
jz .unicode
mov [ebp+viewer_data.buf_pos], eax
mov al, [eax]
mov [esp+28], al
.done:
clc
.ret:
popa
ret
 
.unicode:
dec eax
mov [ebp+viewer_data.buf_pos], eax
call read_unicode_char
jmp .done
 
read_unicode_char:
mov ax, [eax]
uni2ansi_char:
test [ebp+viewer_data.flags], 4
jz @f
xchg al, ah
@@:
cmp ax, 0x80
jb .ret
cmp ax, 0x401
jz .yo1
cmp ax, 0x451
jz .yo2
cmp ax, 0x410
jb .unk
cmp ax, 0x440
jb .rus1
cmp ax, 0x450
jb .rus2
.unk:
mov al, ' '
.ret:
ret
.yo1:
mov al, 'ð'
ret
.yo2:
mov al, 'ñ'
ret
.rus1:
; 0x410-0x43F -> 0x80-0xAF
add al, 0x70
ret
.rus2:
; 0x440-0x44F -> 0xE0-0xEF
add al, 0xA0
ret
 
fld_uint64:
fild qword [eax]
test byte [eax+7], 80h
508,6 → 599,8
test al, al
jns @f
movzx esi, [ebp+viewer_data.encoding]
cmp esi, encodings.unicode
jz @f
shl esi, 7
movzx eax, al
mov al, [encodings.tables-80h+esi+eax]
609,12 → 702,15
rep stosw
mov ebx, edi
pop edi
mov [bForHex], 1
call viewer_get_next_char
mov [bForHex], 0
jc .hexdone
push eax
push edi
add edi, 36*2
mov al, 0xB3
mov ah, [view_normal_color]
call .safechar
pop edi
mov eax, dword [ebp+viewer_data.cur_pos]
655,9 → 751,13
pop eax
jmp @f
.hexchar:
mov [bForHex], 1
call viewer_get_next_char
mov [bForHex], 0
jc .hexdone
@@:
cmp [ebp+viewer_data.encoding], encodings.unicode
jz .hexchar_unicode
push eax
shr al, 4
call .hex_digit
698,6 → 798,53
@@:
cmp ecx, 16
jnz .hexchar
jmp .hexchar_nextline
.hexchar_unicode:
push eax
shr eax, 12
call .hex_digit
pop eax
push eax
shr eax, 8
and al, 0xF
call .hex_digit
pop eax
push eax
shr al, 4
call .hex_digit
pop eax
push eax
and al, 0xF
call .hex_digit
mov al, ' '
mov ah, [view_normal_color]
call .safechar
pop eax
push edi
add edi, 38*2
push ecx
shl ecx, 3
sub edi, ecx
pop ecx
cmp ecx, 4
jb @f
sub edi, 4
@@:
call uni2ansi_char
mov ah, [view_normal_color]
call .safechar
pop edi
inc ecx
cmp ecx, 4
jnz @f
mov al, 0xB3
call .safechar
mov al, ' '
call .safechar
@@:
cmp ecx, 8
jnz .hexchar
.hexchar_nextline:
mov edi, ebx
add esi, 3
mov edx, esi
932,8 → 1079,11
viewer_next_newline:
test [ebp+viewer_data.flags], 1
jz .nohex
push 10h
push 8
pop ecx
cmp [ebp+viewer_data.encoding], encodings.unicode
jz @f
add ecx, ecx
@@:
call viewer_get_next_char
jc @f
978,6 → 1128,9
cmp cl, 0xD xor 0xA
jz .2
dec [ebp+viewer_data.buf_pos]
cmp [ebp+viewer_data.encoding], encodings.unicode
jnz .2
dec [ebp+viewer_data.buf_pos]
.2:
.ret:
call viewer_set_curpos
986,8 → 1139,11
viewer_prev_newline:
test [ebp+viewer_data.flags], 1
jz .nohex
push 10h
push 8
pop ecx
cmp [ebp+viewer_data.encoding], encodings.unicode
jz @f
add ecx, ecx
@@:
call viewer_get_prev_char
jc @f
1096,7 → 1252,11
@@:
end if
movzx esi, [ebp+viewer_data.encoding]
xor esi, 1
dec esi
jz @f
push 1
pop esi
@@:
lea esi, [encodings.names+esi*8]
lea edi, [eax+keybar_cp-keybar_viewer]
movsd
1154,11 → 1314,13
ret
.f8:
movzx esi, [ebp+viewer_data.encoding]
xor [ebp+viewer_data.encoding], 1
call viewer_set_keybar
jmp .done_redraw
dec [ebp+viewer_data.encoding]
jz .done_redraw_keybar
mov [ebp+viewer_data.encoding], 1
jmp .done_redraw_keybar
.f2:
xor [ebp+viewer_data.flags], 2
.done_redraw_keybar:
call viewer_set_keybar
jmp .done_redraw
.f4:
1167,7 → 1329,13
call viewer_set_keybar
popf
jnz .tohex
add dword [ebp+viewer_data.cur_pos], 1
push 1
pop eax
cmp [ebp+viewer_data.encoding], encodings.unicode
jnz @f
add eax, eax
@@:
add dword [ebp+viewer_data.cur_pos], eax
adc dword [ebp+viewer_data.cur_pos+4], 0
call viewer_seek_to_current
call viewer_prev_newline
1249,6 → 1417,29
mov dword [ebp+viewer_data.col], eax
mov dword [ebp+viewer_data.col+4], edx
jmp .done_redraw
.shift_f8:
mov ecx, encodings.menu.1
mov al, [ebp+viewer_data.encoding]
@@:
cmp byte [ecx-1], al
jz @f
mov ecx, [ecx]
jmp @b
@@:
push 1
push aTables
push ecx
call menu
cmp eax, -1
jz .ret
mov al, [eax-1]
mov [ebp+viewer_data.encoding], al
cmp al, encodings.unicode
jnz .done_redraw_keybar
add dword [ebp+viewer_data.cur_pos], 1
adc dword [ebp+viewer_data.cur_pos+4], 0
and dword [ebp+viewer_data.cur_pos], not 1
jmp .done_redraw_keybar
 
viewer_getname:
if lang eq ru