; Вьюер файлов
;
; F8  - смена кодовой страницы (по кругу: dos/win/koi8-r)
; Esc, F3, F10  - выход из вьюера
;
; Перемещения по тексту:
;	 курсор   -  на строку вверх
;	 курсор   -  на строку вниз
;	-> курсор  -  вправо
;	<- курсор  -  влево
;	PgUp       -  на страницу вверх
;	PgDwn      -  на страницу вниз
;	Home       -  в начало файла
;	End        -  в конец файла
;       Ctrl+ курсор - на страницу вверх
;       Ctrl+ курсор - на страницу вниз
;	Ctrl+PgUp  -  в начало файла
;	Ctrl+PgDwn -  в конец файла
;	Ctrl+"->"  -  на 26 символов вправо
;	Ctrl+"<-"  -  на 26 символов влево
; Мышка:
;    левый бутон:
;       текст по-строчно вверх  - мышка в верхней половине окна
;       текст по-строчно вниз   - мышка в нижней половине окна
;    правый бутон:
;       X-скроллинг вправо      - мышка в правой половине окна
;       X-скроллинг влево       - мышка в левой половине окна
;
; При клике на строке ввода адреса (Goto..), входим в режим редактирования
; строки. При клике за пределами строки ввода, выходим из режима редакти-
; рования с отменой изменений (равносильно нажатию Esc).
;





;///////////////////////////////////////////////////////////
; Вьюер
;
; вход: temp_fname=имя файла
; выход: A=код возврата
;        CF - при ошибке, A=код ошибки
;///////////////////////////////////////////////////////////
viewer:	call	setup_fview		; настроить константы
	; открыть окно "Please wait, reading file..."
	ld	hl,win_fview_load_file	; описатель окна
	call	WinSimple		; вывести окно
	; загр. файл
	ld	hl,temp_fname		; имя файла
	call	A837F			; вся работа по загрузке файла в страницы
	push	af
	; закрыть окно
	call	CloseWinSimple
	pop	af
	jr	c,viewer_exit		; ошибка
	;
	ld	a,(id_pages)		; идентиф. выдел. блока памяти
	ld	(D9F03),a
	ld	hl,(lsize__)		; мл.разряд размера файла
	ld	(D9F04),hl
	ld	hl,(hsize__)		; ст.разряд размера файла
	ld	(D9F06),hl
	call	save_screen		; сохр. экран
	call	main_viewer
	call	rest_screen		; восст. экран
	ld	a,0			; код возврата
	or	a
viewer_exit:
	push	af
	; освоб. блок памяти
	ld	a,(id_pages)		; идентиф. блока памяти
	ld	c,0C3h
	rst	08h
	pop	af
	ret




; Запомнить содержимое окна
save_screen:
	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	ret	nz			; панельный режим
	ld	c,0B2h
sv_scrn__:
	ld	hl,2050h		; высота/ширина экрана
	ld	ix,0C000h+1400h		; буфер под окно
	ld	a,(page_sys_screen)	; страница буфера
	ld	b,a
	xor	a			; идентиф. глоб. окна
	ld	e,a			; X полож.
	ld	d,a			; Y полож.
	di
	rst	08h
	ei
	ret

; Восстановить содержимое окна
rest_screen:
	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	ret	nz			; панельный режим
	ld	c,0B3h
	jr	sv_scrn__




file_handle:
	db	-1			; дескр. файла

id_pages:
	db	-1			; идентиф. выдел. блока памяти

lsize__:dw	0			; мл.разряд размера файла
hsize__:dw	0			; ст.разряд





;===========================================================
;  Вся работа по загрузке файла в страницы
;
; вход: hl=имя файла
;===========================================================
A837F:	ld	a,1			; на чтение
	ld	c,11h			; открыть файл
	rst	10h
	ret	c
	ld	(file_handle),a		; дескр. файла
	ld	hl,0
	ld	ix,0
	ld	a,(file_handle)		; дескр. файла
	ld	bc,0215h		; указатель на конец файла
	rst	10h
	ld	(hsize__),hl		; ст.разряд размера файла
	ld	(lsize__),ix		; мл.разряд
	call	get_mem_file		; расч. и выдел. страницы под файл
	jr	c,A83B3			; не хватает памяти
	call	A83ED			; загрузить открытый файл в страницы
close_file:
	ld	a,(file_handle)		; дескр. файла
	ld	c,12h			; закрыть файл
	rst	10h
	ret
	;
A83B3:	call	close_file
	ld	a,30			; код "нет памяти"
	scf
	ret


;-------------------------------------------------
; По размеру файла расчитать необходимое
; число страниц и выделить их.
; выход: CF - не хватает памяти
;-------------------------------------------------
get_mem_file:
	ld	hl,(hsize__)		; ст.разряд размера файла
	ld	bc,(lsize__)		; мл.разряд
	ld	de,4000h		; делитель (размер страницы)
	xor	a
	scf
A83C9:	rr	d
	rr	e
	jr	c,A83DD
	rr	h
	rr	l
	rr	b
	rr	c
	jr	nc,A83C9
	ld	a,1
	jr	A83C9
	;
A83DD:	or	a
	jr	z,A83E1
	inc	bc
A83E1:	xor	a
	cp	b
	scf
	ret	nz
	; выделить блок памяти
	ld	b,c			; b=число страниц
	ld	c,0C2h
	rst	08h
	ld	(id_pages),a		; идентиф. блока
	ret


;-------------------------------------------------
; Загрузить открытый файл в страницы
;-------------------------------------------------
A83ED:	ld	hl,0
	ld	ix,0
	ld	a,(file_handle)		; дескр. файла
	ld	bc,0015h		; указатель на начало файла
	rst	10h
	ld	a,(id_pages)		; идентиф. блока памяти
	ld	b,0			; лог. номер страницы в блоке
	ld	c,0C4h			; получить физ. номер страницы в блоке
	rst	08h
	ret	c
A8404:	push	af
	out	(SLOT3),a
	ld	hl,LC000		; куда
	ld	de,4000h		; сколько
	ld	a,(file_handle)		; дескр.
	ld	c,13h			; читать файл
	rst	10h
	pop	bc
	ret	c			; ошибка чтения
	inc	a			; a=#FF (прочитано меньшее число байт)
	ret	z			; да
	ld	a,b			; a=физич. страница
	ld	c,0C7h			; получить след. номер физ. страницы блока
	rst	08h
	ret	c
	cp	255
	jr	nz,A8404		; не последняя страница
	ret





D9F03:	db	0			; 2-я ячейка списка выдел. страниц
	;
D9F04:	dw	0			; мл.разряд размера файла
D9F06:	dw	0			; ст.разряд размера файла



; массив списка выдел. страниц
list_pages:
	ds	255+1


; текущий адрес в дампе
DA109:	db	0			; мл.разряд
DA10A:	db	0
DA10B:	db	0
DA10C:	db	0			; ст.разряд

; тек. адрес ... ??
DA10D:	db	0			; мл.разряд
DA10E:	db	0
DA10F:	db	0
DA110:	db	0			; ст.разряд

DA111:	dw	0
DA113:	dw	0


; массив в 256 символов (пишется вывод. на экран строка)
TA115:	ds	63			;  80 симв.
TA154:	ds	193


; длина всей строки 80 символов
TA215:	db	"View: "
TA21B:	db	"                                             "
	db	"Bytes                        "



; статусная строка в ASCII-режиме
TA265:	db	"1       "
TA26D:	db	"2Wrap   "
	db	"3       "
	db	"4Hex    "
	db	"5       "
	db	"6       "
	db	"7       "
TA29D:	db	"8Win    "
	db	"9       "
	db	"10Quit  "

; статусная строка в HEX-режиме
TA2B5:	db	"1       "
	db	"2       "
	db	"3       "
	db	"4Ascii  "
	db	"5Goto   "
	db	"6       "
	db	"7       "
TA33D:	db	"8Win    "
	db	"9       "
	db	"10Quit  "



; массив 2460 байт
AA355:	db	0
AA356:	ds	81			;len_string+1
AA3A7:	ds	173
AA454:	ds	2205


TACF1:	ds	125
TAD6E:	ds	125
TADEB:	ds	125
TAE68:	ds	130


UnWrap:	db	true			; 0/1 да/нет признак переноса строки

TAEEF:	db	"UnWrapWrap  "

TAE00:	db	"WinKoiDos"
TAE02:	db	"DOSWINKOI"

TAEFB:	db	"        ",0		; буфер вводимого адреса перехода


AAF04:	ds	2
DAF06:	dw	0
	ds	3



;===========================================================
;  Начало осн. кода программы
;===========================================================
main_viewer:
	ld	hl,0
	ld	(DA109),hl		; сбр. тек. адрес в дампе
	ld	(DA10B),hl
	call	create_list_pages	; создать список выдел. страниц
	ld	iy,AAF04
	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	jp	nz,AB317		; в панели, вывести ascii-дамп
	call	AAF96			; вывод имени файла в верх. стат. строке
	; очистить осн. окно
	ld	de,0			; Y/X полож. окна
	ld	hl,2050h		; Y/X размеры
	ld	a,(color_array+39)	; 1Bh атрибут
	ld	b,a
	ld	c,89h			; очистка окна
	rst	08h
	; очистить буфер номера колонки (посл. 2 цифры)
	ld	hl,TB1C7+1		; буфер
	ld	a," "
	ld	(hl),a
	inc	hl
	ld	(hl),a
	; уст. курсор
	ld	de,0			; Y/X
	ld	c,84h			; уст. курсор
	rst	08h
	; окрасить верх. стат. строку
	ld	hl,TA215		; буфер строки
	ld	a,(color_array+41)	; 30h атрибут
	ld	e,a
loc04:	ld	b,len_string		; 80 длина строки
	ld	c,85h			; вывести строку с атрибутом
	rst	08h
	; вывести ascii-дамп
	jp	AB317



;-------------------------------------------------
; Вывод имени файла в верх. стат. строке
;-------------------------------------------------
AAF96:	ld	hl,temp_fname		; откуда
	ld	de,TA21B		; имя файла в стат. строке
	push	de
	ld	b,12			; макс. длина имени
AAFC3:	ld	a,(hl)
	or	a
	jr	z,AAFCC
	ld	(de),a
	inc	hl
	inc	de
	djnz	AAFC3
AAFCC:	dec	b
	inc	b
	jr	z,AAFD6
	ld	a," "			; допись концовки имени
	ld	(de),a
	inc	de
	djnz	$-2
AAFD6:	pop	hl
	;
	ld	bc,34			; полож. размера файла в стат. строке
	add	hl,bc
	ex	de,hl
	ld	hl,(D9F04)		; мл.разряд размера файла
	exx
	ld	hl,(D9F06)		; ст.разряд размера файла
	exx
	call	AB1E4			; вывести в буфер строки (de) размер файла
	; в буфер строки "Col"
	ld	hl,9			; X полож. "Col" в стат. строке
	add	hl,de
	ld	(hl),"C"
	inc	hl
	ld	(hl),"o"
	inc	hl
	ld	(hl),"l"
	ret




; Создать список выделенных страниц
create_list_pages:
	ld	hl,list_pages		; 256 байт, массив списка
	ld	a,(D9F03)		; идентиф. блока
	ld	c,0C5h
	rst	08h
	ret



;=============================================================
;     ВЫВОД ДАМПА В ОКНЕ
;
; Вход: a=0 - вывод в ascii-режиме (перенос строк включен)
;       a=1 - вывод в ascii-режиме (перенос строк выключен)
;       a=2 - вывод в hex-режиме
;=============================================================
DUMP:	set	0,(iy+4)
	or	a
	jr	z,wrap_on		; Wrap
	dec	a
	jr	z,wrap_off		; UnWrap
	jp	mode_hex		; hex-режим

; Включен перенос строк
wrap_on:ld	hl,(D9F04)		; мл.разряд размера файла
	ld	(DA10D),hl
	ld	hl,(D9F06)		; ст.разряд размера файла
	ld	(DA10F),hl
metk04:	ld	a,num_strings+1		; 31
	call	AB02B
	ld	hl,(DA10D)
	ld	de,(DA10F)
	jp	AB0B6
	;
AB02B:	ld	hl,(DA10D)
	ld	de,(DA10F)
loc40:	ld	bc,len_string+2		; 82 макс. длина строки
	push	bc
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	pop	bc			; сколько
	ret	c
	push	af
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,AA355
	ld	bc,(DAF06)
	add	hl,bc
	ld	b,c
	call	ABA43
	pop	af
	dec	a
	jr	nz,AB02B
	ret

; Выключен перенос строк
wrap_off:
	ld	hl,(D9F04)		; мл.разряд размера файла
	ld	(DA10D),hl
	ld	hl,(D9F06)		; ст.разряд размера файла
	ld	(DA10F),hl
metk05:	ld	a,num_strings+1		; 31
AB06D:	ld	hl,(DA10D)
	ld	de,(DA10F)
	ld	bc,256			; макс. длина строки
	push	bc
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	pop	bc			; сколько
	ret	c
	push	af
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,AA355
	ld	bc,(DAF06)
	add	hl,bc
	ld	b,c
	call	ABA43
	pop	af
	dec	a
	jr	nz,AB06D
	ld	hl,(DA10D)
	ld	de,(DA10F)
	jr	AB0B6


;=================================================
;   HEX-режим отображения данных
;=================================================
mode_hex:
	ld	hl,(D9F04)		; мл.разряд размера файла
	ld	de,(D9F06)		; ст.разряд размера файла
const20:ld	bc,16 * num_strings	; "байт в строке дампа" * "число строк"
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	ret	c
AB0B6:	push	hl
	push	de
	push	hl
	pop	ix
	ex	de,hl
	ld	bc,100			; 100%
	call	AB137			; hl,ix / bc ?
	ld	(AB0F1+1),ix
	ld	(AB100+1),de
	ld	ix,TACF1		; ds 125
	ld	hl,0
	ld	e,l
	ld	d,h
	ld	bc,6300h		; "b" счетчик
	ld	(ix+0),l
	inc	ix
	ld	(ix+0),h
	inc	ix
	ld	(ix+0),e
	inc	ix
	ld	(ix+0),d
	inc	ix
	ld	(ix+0),c
	inc	ix
	inc	c
AB0F0:	push	bc
AB0F1:	ld	bc,0
	add	hl,bc
	ld	(ix+0),l
	inc	ix
	ld	(ix+0),h
	inc	ix
	ex	de,hl
AB100:	ld	bc,0
	adc	hl,bc
	ex	de,hl
	pop	bc
	ld	(ix+0),e
	inc	ix
	ld	(ix+0),d
	inc	ix
	ld	(ix+0),c
	inc	ix
	inc	c
	djnz	AB0F0
	pop	de
	pop	hl
	ld	(ix+0),l
	inc	ix
	ld	(ix+0),h
	inc	ix
	ld	(ix+0),e
	inc	ix
	ld	(ix+0),d
	inc	ix
	ld	(ix+0),c
	res	0,(iy+4)
	ret

; hl,ix / bc
AB137:	ld	a,b
	or	c
	ret	z
	ex	de,hl
	ld	hl,0
	ld	a,32
AB140:	add	ix,ix
	ex	de,hl
	adc	hl,hl
	ex	de,hl
	adc	hl,hl
	sbc	hl,bc
	jp	nc,AB151
	add	hl,bc
	dec	a
	jp	nz,AB140
	ret
AB151:	inc	ix
	dec	a
	jp	nz,AB140
	ret


AB157:	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	ret	nz
	ld	hl,AB1CA
	push	hl
	ld	a,100			; 100 %?
	bit	0,(iy+4)
	ret	nz
	ld	ix,TADEB
	ld	hl,(DA109)
	ld	de,(DA10B)
	call	AB1AD
	jr	c,AB1A2
	ld	a,(ix+4)
	ret	z
	ld	ix,TAE68
	call	AB1AD
	jr	c,AB191
AB17F:	ld	a,(ix+4)
	ret	z
	ret	c
	cp	100			; 100%
	ret	z
	ld	bc,5
	add	ix,bc
	call	AB1AD
	jr	AB17F
	;
AB191:	ld	a,(ix+4)
	ret	z
	ret	nc
	or	a
	ret	z
	ld	bc,-5
	add	ix,bc
	call	AB1AD
	jr	AB191
	;
AB1A2:	ld	ix,TAD6E
	call	AB1AD
	jr	c,AB191
	jr	AB17F

AB1AD:	push	hl
	push	de
	push	bc
	ld	c,(ix+0)
	ld	b,(ix+1)
	and	a
	sbc	hl,bc
	ex	de,hl
	ld	c,(ix+2)
	ld	b,(ix+3)
	sbc	hl,bc
	jr	nz,AB1C6
	ld	a,d
	or	e
AB1C6:	pop	bc
	pop	de
	pop	hl
	ret


; Вывод на экран номера колонки
; и процентовки
AB1CA:	res	0,(iy+0)		; сбр. бит
	; номер колонки
	push	af
	ld	a,(iy+5)		; номер тек. колонки
	ld	l,a
	ld	h,0
	ld	de,TB1C7		; куда
	call	LB230			; "a" в дес.формате -> (de)
	pop	af
	; процентовка "...%"
	res	0,(iy+0)		; с вед. пробелами
	ld	l,a
	ld	h,0
	ld	de,TAEEA		; куда
	call	AB230			; "a" в дес.формате -> (de)
	;
	ld	de,003Fh		; Y/X полож.
	ld	c,84h			; уст. курсор
	rst	08h
	ld	hl,TB1C7		; откуда
	ld	a,(enable_clock)	; флаг вывода часов
	or	a
	jr	z,AB1CB			; нет часов
	ld	bc,0A86h		;&& вывод строки из 10 симв. без атрибутов
	rst	08h
	ret
	;
AB1CB:	ld	de,TB1C8		; куда
	ldi
	ldi
	ldi
	ld	hl,TAEEA		; откуда
	ld	de,TB1C8+13		; куда
	ldi
	ldi
	ldi
	ld	hl,TB1C8		; строка
	ld	bc,1186h		;&& вывод строки из 10 симв. без атрибутов
	rst	08h
	ret


; строка с часами
TB1C7:	db	"   "			; номер колонки
	db	"   "
TAEEA:	db	"   %"			; 0..100% просмотра текста

; строка без часов
TB1C8:	db	"   "
	db	"          "
	db	"   %"




AB1E4:	res	0,(iy+0)
	ld	bc,0CA00h		; 1.000.000.000
	exx
	ld	bc,3B9Ah
	exx
	call	AB242
	ld	bc,0E100h		; 100.000.000
	exx
	ld	bc,05F5h
	exx
	call	AB242
	ld	bc,9680h		; 10.000.000
	exx
	ld	bc,0098h
	exx
	call	AB242
	ld	bc,4240h		; 1.000.000
	exx
	ld	bc,15
	exx
	call	AB242
	ld	bc,86A0h		; 100.000
	exx
	ld	bc,1
	exx
	call	AB242
	ld	bc,10000		; 10.000
	exx
	ld	bc,0
	exx
	call	AB242
	ld	bc,1000			; 1000
	call	AB266
AB230:	ld	bc,100			; 100
	call	AB266
	ld	bc,10			; 10
	call	AB266
	ld	a,l
	add	a,"0"
	ld	(de),a
	inc	de
	ret
	;
AB242:	ld	a,2Fh
	or	a
AB245:	inc	a
	sbc	hl,bc
	exx
	sbc	hl,bc
	exx
	jp	nc,AB245
	add	hl,bc
	exx
	adc	hl,bc
	exx
	cp	"0"
	jp	z,AB25B
	set	0,(iy+0)
AB25B:	bit	0,(iy+0)
	jp	nz,AB263
	ld	a," "
AB263:	ld	(de),a
	inc	de
	ret
	;
AB266:	ld	a,2Fh
	or	a
AB269:	inc	a
	sbc	hl,bc
	jp	nc,AB269
	add	hl,bc
	cp	"0"
	jp	z,AB277
	set	0,(iy+0)
AB277:	bit	0,(iy+0)
	jp	nz,AB27F
	ld	a," "
AB27F:	ld	(de),a
	inc	de
	ret


; вывод без вед. нулей
; вход: hl=число
LB230:	ld	bc,100			; 100
	call	LB266
	ld	bc,10			; 10
	call	LB266
	ld	a,l
	add	a,"0"
	ld	(de),a
	inc	de
	ld	a," "
	ld	(de),a			; затереть посл. разряд
	ret
	;
LB266:	ld	a,2Fh
	or	a
LB269:	inc	a
	sbc	hl,bc
	jp	nc,LB269
	add	hl,bc
	cp	"0"
	jp	z,LB277
	set	0,(iy+0)
LB277:	bit	0,(iy+0)
	ret	z
	ld	(de),a
	inc	de
	ret




;-------------------------------------------------
; Скопировать блок данных файла из буфера
; вход: bc=размер блока
;-------------------------------------------------
AB282:	in	a,(SLOT3)
	push	af
	push	bc
	ld	(AB2C3+1),hl
	ld	(AB2C6+1),de
	add	hl,bc
	jr	nc,$+3
	inc	de
	ld	c,l
	ld	b,h
	ld	hl,(D9F04)		; мл.разряд размера файла
	and	a
	sbc	hl,bc
	push	hl
	ld	hl,(D9F06)		; ст.разряд размера файла
	sbc	hl,de
	pop	de
	pop	bc
	jr	nc,AB2B7
	ld	hl,0
	and	a
	sbc	hl,de
	ld	e,l
	ld	d,h
	ld	l,c
	ld	h,b
	and	a
	sbc	hl,de
	jr	nc,AB2B5
	ld	hl,0
AB2B5:	ld	c,l
	ld	b,h
AB2B7:	ld	(DAF06),bc
	ld	a,b
	or	c
	jr	z,AB313
	ld	ix,list_pages		; 256 байт, массив списка выдел. страниц
AB2C3:	ld	hl,0
AB2C6:	ld	de,0
	ld	a,h
	rla
	rl	e
	rla
	rl	e
	ld	a,e
	db	0DDh
	add	a,l
	db	0DDh
	ld	l,a
	jr	nc,AB2D9
	db	0DDh
	inc	h
AB2D9:	ld	a,(ix+0)
	out	(SLOT3),a
	ld	a,h
	or	0C0h			; ст. байт начала буфера
	ld	h,a
	push	hl
	adc	hl,bc
	pop	hl
	jr	z,AB2EA
	jr	c,AB2F1
AB2EA:	ld	de,AA355
	ldir
	jr	AB313
	;
AB2F1:	push	bc
	ex	de,hl
	ld	hl,0
	and	a
	sbc	hl,de
	ld	c,l
	ld	b,h
	push	bc
	ex	de,hl
	ld	de,AA355
	ldir
	pop	bc
	pop	hl
	and	a
	sbc	hl,bc
	ld	c,l
	ld	b,h
	ld	hl,LC000
	ld	a,(ix+1)
	out	(SLOT3),a
	ldir
AB313:	pop	af
	out	(SLOT3),a
	ret



;-------------------------------------------------
;  ASCII-режим статусной строки
;-------------------------------------------------
AB317:	xor	a			; ascii-окно
	ld	(cur_mode_dump),a	; флаг
	ld	de,TA265		; стат. строка ascii-режима
	ld	a,(viewer_mode)		; 0/1 режим работы вьюера (норм./панельный)
	or	a
	call	z,print_keybar1		; вывод нижней стат. строки
	ld	a,(UnWrap)		; 0/1 признак переноса строки
	call	DUMP			; вывести дамп
	ld	hl,AA355
	ld	de,AA356
const01:ld	bc,(len_string+2)*num_strings	; 82*30
	ld	(hl),0
	ldir
	ld	hl,TA115		; ds 63
	ld	a," "
	ld	(hl),a
	inc	hl
	djnz	$-2
	ld	(iy+5),b		; сбр. номер колонки
	call	AB390			; вывести страницу текста
	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	jr	nz,AB33C
	; вывод "DOS" в стат. строке
	ld	de,0023h		; Y/X полож.
	ld	c,84h			; уст. курсор
	rst	08h
	ld	a,(code_page)		; 0/1/2 (Dos/Win/Koi)
	ld	l,a
	add	a,a
	add	a,l
	ld	l,a
	ld	h,0
	ld	de,TAE02		; "DOSWINKOI"
	add	hl,de			; откуда
	ld	bc,0386h		; вывести строку в 3 символа
	rst	08h
AB33C:	ld	hl,half_mode_fview	; флаг выхода из гляделки
	xor	a			; false
	cp	(hl)
	ld	(hl),a			; сбр. флаг
	ret	nz			; не оставаться в гляделке после ее отработки
; ждем событий от мышки/клавы
AB33F:	push	ix
	push	iy
	call	handle_event		; читаем событие
	pop	iy
	pop	ix
	ld	a,(what)		; список событий
	cp	evNothing
	jr	z,AB33F			; нет событий
	cp	evMouseFr
	jp	z,fview_mouse_ascii	; бутоны нажаты (msfview.asm)
	cp	evKeyboard		; обычные клавиши
	jr	nz,AB350
	ld	a,e
;	cp	9			; Tab
;	jp	z,AB375
	cp	1Bh
	jr	nz,AB350
AB348:	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	ret	z			; норм. режим
	ld	hl,AB33F
	push	hl
	ret;
	;jp	fm_event		; панельный режим (на обработчик ФМ)
	;
AB350:	cp	evCombKey		; комб. или курс. клавиши
	jr	nz,AB33F		; не служ. клавиши
	res	7,d
	ld	a,d
	cp	3Dh			; F3 Quit
	jr	z,AB348
	cp	44h			; F10 Quit
	jr	z,AB348
	cp	3Eh			; F4  Hex-режим
	jp	z,ABB1C
	ld	hl,AB33F
	push	hl
;	cp	43h			; F9
;	jp	z,fm_event
	cp	3Ch			; F2  Wrap/UnWrap
	jp	z,AB5C8
	cp	42h			; F8  Win/Koi/Dos
	jp	z,change_code_page
	cp	54h			; курсор влево
	jp	z,AB5FE
	cp	56h			; курсор вправо
	jp	z,AB610
	cp	58h			;  курсор
	jp	z,AB81D
	cp	52h			;  курсор
	jp	z,AB987
	cp	59h			; PgUp
	jp	z,AB704
	cp	53h			; PgDwn
	jp	z,AB79B
	cp	57h			; Home "в начало файла"
	jp	z,AB648
	cp	51h			; End "в конец файла"
	jp	z,AB661
	bit	5,b			; Ctrl ?
	ret	z			; нет
;	jr	z,AB370			; проверить Alt, Shift
	cp	59h			; Ctrl+PgUp  в начало файла
	jp	z,AB648
	cp	53h			; Ctrl+PgDwn  в конец файла
	jp	z,AB661
	cp	54h			; Ctrl+<-  "в начало строки"
	jp	z,AB623
	cp	56h			; Ctrl+->  "на 26 символов вправо"
	jp	z,AB635
	cp	58h			; Ctrl+ курсор, PgUp
	jp	z,AB704
	cp	52h			; Ctrl+ курсор, PgDwn
	jp	z,AB79B
	ret
	; проверить Alt, Shift, др. Ctrl
;AB370:	ld	a,(viewer_mode)
;	or	a
;	jp	nz,fm_event_comb	; панельный режим (fview.inc)
;	ret				; норм. режим вьюера

; Tab
;AB375:	ld	a,(viewer_mode)		; режим гляделки (норм./панельный)
;	or	a
;	jp	nz,fm_event_tab		; панельный режим (fview.inc)
;	ret				; норм. режим




;-------------------------------------------------
; Вывод страницы текста
;-------------------------------------------------
AB390:	ld	hl,AB157
	push	hl
	ld	(iy+6),0
	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	jp	nz,AB49C
	; Режим "Wrap"
	ld	hl,(DA109)
	ld	(DA111),hl
	ld	de,(DA10B)
	ld	(DA113),de
const02:ld	bc,(len_string+2)*num_strings	; 82*30  сколько
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,(DAF06)
	ld	a,h
	or	l
	ret	z
	ld	hl,AA355
	ld	de,(coord)		; строка/колонка
AB3BF:	ld	(AB3D3+1),de
	push	hl
	ld	c,84h			; уст. курсор
	rst	08h
	pop	hl
	call	AB3FC			; вывести одну строку
	ld	de,(DAF06)
	ld	a,d
	or	e
	jr	z,AB3DE
AB3D3:	ld	de,0
	inc	d
	ld	a,d
metk06:	cp	num_strings+1		; 31
	jr	nz,AB3BF
	ret
	;
AB3DE:	ld	de,(AB3D3+1)
	inc	d
metk07:	ld	a,num_strings+1		; 31
	sub	d
	ret	z
	ld	(iy+6),a
	ld	b,a			; число строк стирания
AB3EB:	push	de			; строка/колонка
	push	bc
	ld	c,84h			; уст. курсор
	rst	08h
loc06:	ld	b,len_string		; 80 длина строки
	ld	a," "			; символ
	ld	c,82h			;&& вывод строки один. символов без атрибутов
	rst	08h
	pop	bc
	pop	de
	inc	d
	djnz	AB3EB
	ret

; Вывод одной строки в режиме "Wrap"
AB3FC:	ld	de,TA115		; ds 63
	db	0DDh
	ld	l,0
	push	hl
	push	hl
loc07:	ld	b,len_string		; 80
	ld	hl,(DAF06)
	ld	a,h
	or	a
	jp	nz,AB413
	ld	a,l
loc08:	cp	len_string		; 80
	jp	nc,AB413
	ld	b,l
AB413:	pop	hl
AB414:	ld	a,(hl)
	inc	hl
	cp	0Dh
	jp	nz,AB422
	ld	a,(hl)
	cp	0Ah
	jp	nz,AB450
	inc	hl
	jp	AB450
	;
AB422:	cp	0Ah
	jp	z,AB450
	cp	9
	jp	nz,AB444
	db	0DDh
	ld	a,l
	and	0F8h
	add	a,8			; ближ. полож. табуляции
	db	0DDh
	sub	l
	ld	c,a
AB433:	ld	a," "
	ld	(de),a			; заполнить шаг табуляции
	inc	de
	db	0DDh
	inc	l
	db	0DDh
	ld	a,l
loc09:	cp	len_string		; 80
	jp	z,AB450
	dec	c
	jp	nz,AB433
	jp	AB414
	;
AB444:	call	char_code_page		; взять символ из кодовой страницы
	ld	(de),a
	inc	de
	db	0DDh
	inc	l
	db	0DDh
	ld	a,l
loc10:	cp	len_string		; 80
	jp	z,AB450
	djnz	AB414
AB450:	ld	a,len_string		; 80
	db	0DDh
	sub	l
	jp	z,AB45D
	ld	b,a
	ld	a," "
	ld	(de),a
	inc	de
	djnz	$-2
AB45D:	pop	de
	push	hl
	and	a
	sbc	hl,de
	ex	de,hl
	ld	hl,(DAF06)
	and	a
	sbc	hl,de
	ld	(DAF06),hl
	ld	hl,(DA111)
	add	hl,de
	ld	(DA111),hl
	jp	nc,AB47C
	ld	hl,(DA113)
	inc	hl
	ld	(DA113),hl
AB47C:	ld	hl,TA115		; ds 63
	ld	a,(color_array+39)	; 1Bh атрибут
	ld	e,a
	ld	a,(hl)			; символ
	inc	hl
	push	hl
	ld	bc,0181h		; вывести 1 символ с атрибутом
	rst	08h
	pop	hl
loc20:	ld	b,len_string-2		; 78 число символов
	push	hl
	ld	c,86h			; вывести символы без атрибутов
	rst	08h
	pop	hl
loc21:	ld	bc,len_string-2		; 78
	add	hl,bc
	ld	a,(color_array+39)	; 1Bh атрибут
	ld	e,a
	ld	a,(hl)
	ld	bc,0181h		; вывести 1 символ с атрибутом
	rst	08h
	pop	hl
	ret
	;
; Режим "UnWrap"
AB49C:	ld	hl,(DA109)
	ld	(DA10D),hl
	ld	(DA111),hl
	ld	hl,(DA10B)
	ld	(DA10F),hl
	ld	(DA113),hl
	ld	de,(coord)		; строка/колонка
AB4B1:	ld	(AB4D0+1),de
	ld	c,84h			; уст. курсор
	rst	08h
	ld	hl,(DA10D)
	ld	de,(DA10F)
	ld	bc,255			; сколько (макс. длина строки)
	call	AB282			; скопир. блок данных файла из буфера
	ld	de,(DAF06)
	ld	a,d
	or	e
	jr	z,AB4DB
	call	AB4F8			; вывести одну строку
AB4D0:	ld	de,0
	inc	d
	ld	a,d
metk08:	cp	num_strings+1		; 31
	jp	nz,AB4B1
	ret
	;
AB4DB:	ld	de,(AB4D0+1)
metk09:	ld	a,num_strings+1		; 31
	sub	d
	ret	z
	ld	(iy+6),a
	ld	b,a			; высота окна вывода
AB4E7:	push	de			; строка/колонка
	push	bc
	ld	c,84h			; уст. курсор
	rst	08h
loc11:	ld	b,len_string		; 80 длина строки
	ld	a," "			; символ
	ld	c,82h			; вывод символов без атрибута
	rst	08h
	pop	bc
	pop	de
	inc	d
	djnz	AB4E7
	ret

; Вывод одной строки в режиме "UnWrap"
AB4F8:	ld	hl,AA355
AB4FB:	push	hl
	push	hl
	db	0DDh
	ld	l,0
	ld	hl,(DAF06)
	ld	a,h
	or	a
	ld	b,255			; счетчик (макс. длина строки)
	jp	nz,AB50A
	ld	b,l
AB50A:	ld	de,TA115		; ds 63
	pop	hl
AB50E:	ld	a,(hl)
	inc	hl
	cp	0Dh
	jp	nz,AB51C
	ld	a,(hl)
	cp	0Ah
	jp	nz,AB548
	inc	hl
	jp	AB548
	;
AB51C:	cp	0Ah
	jp	z,AB548
	cp	9
	jp	nz,AB53D
	db	0DDh
	ld	a,l
	and	0F8h
	add	a,8
	db	0DDh
	sub	l
	ld	c,a
AB52D:	ld	a," "
	ld	(de),a
	inc	de
	db	0DDh
	inc	l
	db	0DDh
	ld	a,l
	inc	a
	jp	z,AB548
	dec	c
	jp	nz,AB52D
	jp	AB50E
	;
AB53D:	call	char_code_page		; взять символ из кодовой страницы
	ld	(de),a
	inc	de
	db	0DDh
	inc	l
	db	0DDh
	ld	a,l
	inc	a
	jp	z,AB548
	djnz	AB50E
AB548:	pop	bc
	and	a
	sbc	hl,bc
	ld	bc,(DA10D)
	add	hl,bc
	ld	(DA10D),hl
	ld	(DA111),hl
	jp	nc,AB563
	ld	hl,(DA10F)
	inc	hl
	ld	(DA10F),hl
	ld	(DA113),hl
AB563:	db	0DDh
	ld	a,l
	push	af
	push	de
	ex	de,hl
	ld	de,TA115		; ds 63
	and	a
	sbc	hl,de
loc12:	ld	a,len_string		; 80
	add	a,(iy+5)
	ld	e,a
	ld	a,0
	adc	a,a
	ld	d,a
	or	a
	ex	de,hl
	sbc	hl,de
	pop	de
	jp	z,AB588
	jp	c,AB588
	ld	b,l
	ld	a," "
	ld	(de),a
	inc	de
	djnz	$-2
AB588:	ld	hl,TA115		; ds 63
	ld	a,l
	add	a,(iy+5)
	ld	l,a
	jp	nc,AB593
	inc	h
AB593:	ld	a,(iy+5)
	or	a
	ld	a,(color_array+39)	; 1Bh атрибут
	ld	e,a
	ld	a,(hl)
	jp	z,AB5A0
	ld	a,(color_array+42)	; 1Eh атрибут
	ld	e,a
	ld	a,""			; "<"
AB5A0:	inc	hl
	push	hl
	ld	bc,0181h		; вывести 1 символ с атрибутом
	rst	08h
	pop	hl
loc22:	ld	b,len_string-2		; 78 число символов
	ld	c,86h			; вывести символы без атрибута
	push	hl
	rst	08h
	pop	hl
loc23:	ld	bc,len_string-2		; 78
	add	hl,bc
	ld	a,(color_array+39)	; 1Bh атрибут
	ld	e,a
	ld	c,(hl)
	pop	af
	sub	(iy+5)
	jp	c,AB5C2
loc30:	cp	len_string+1		; 80+1
	jp	c,AB5C2
	ld	a,(color_array+42)	; 1Eh атрибут
	ld	e,a
	ld	c,1Ah			; "->"
AB5C2:	ld	a,c
	ld	bc,0181h		; вывести 1 символ с атрибутом
	rst	08h
	ret



; Режим переноса строки Wrap/UnWrap (ascii-режим)
AB5C8:	ld	a,(UnWrap)		; признак режима
	xor	1
	ld	(UnWrap),a
	ld	c,a
	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	jr	nz,AB5F1
	ld	a,c
	add	a,a
	ld	c,a
	add	a,a
	add	a,c
	ld	hl,TAEEF
	add	a,l
	ld	l,a
	jr	nc,AB5DC
	inc	h
AB5DC:	ld	de,TA26D+1
	push	de
	ld	bc,6			; длина "UnWrap" или "Wrap  "
	ldir
metk10:	ld	d,num_strings+1		; 31 строка
	ld	e,9			; колонка
	ld	c,84h			; уст. курсор
	rst	08h
	ld	bc,0686h		; вывести строку без атрибутов (b=длина строки)
	pop	hl
	rst	08h
AB5F1:	ld	(iy+5),0		; сбр. номер колонки
	ld	a,(UnWrap)		; 1/0 признак переноса строки
	call	DUMP			; вывести дамп
	jp	AB390			; вывести страницу текста


; Курсор влево
AB5FE:	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	ret	z
	ld	a,(iy+5)
	or	a
	ret	z
	dec	a
	ld	(iy+5),a
	jp	AB390			; вывести страницу текста


; Курсор вправо
AB610:	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	ret	z
	ld	a,(iy+5)
AB618:	cp	175			; 255-80 макс. полож. левой стороны окна
	ret	nc
	inc	a
	ld	(iy+5),a
	jp	AB390			; вывести страницу текста


; Ctrl+"<-"  на 26 символов влево (ascii-режим)
AB623:	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	ret	z
	; перенос строки выключен
	ld	a,(iy+5)
	or	a
	ret	z
	sub	26			; (26 кратно 78-ми)
	jr	nc,$+3
	xor	a
	ld	(iy+5),a
	jp	AB390			; вывести страницу текста


; Ctrl+"->"  на 26 символов вправо (ascii-режим)
AB635:	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	ret	z
	; перенос строки выключен
AB63A:	ld	h,175			; 255-80
	ld	a,(iy+5)
	add	a,26			; (26 кратно 78-ми)
AB63F:	cp	h			; макс. полож. левой стороны окна
	jr	nc,$+3
	ld	h,a
	ld	(iy+5),h
	jp	AB390			; вывести страницу текста


; Home "в начало файла"
AB648:	ld	hl,(DA109)
	ld	de,(DA10B)
	ld	a,h
	or	d
	or	l
	or	e
	ret	z
	ld	hl,0
	ld	(DA109),hl
	ld	(DA10B),hl
	jp	AB390			; вывести страницу текста

; End "в конец файла"
AB661:	ld	hl,(DA111)
	ld	de,(DA113)
	ld	bc,(D9F04)		; мл.разряд размера файла
	and	a
	sbc	hl,bc
	ld	bc,(D9F06)		; ст.разряд размера файла
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	ret	nc
	ld	hl,(D9F04)		; мл.разряд размера файла
	ld	(DA10D),hl
	ld	hl,(D9F06)		; ст.разряд размера файла
	ld	(DA10F),hl
	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	jr	nz,AB6C7
mt01:	ld	a,num_strings-1		; 29 счетчик
	call	AB02B
	ld	hl,(DA10D)
	ld	(DA109),hl
	ld	hl,(DA10F)
	ld	(DA10B),hl
	jp	AB390			; вывести страницу текста


AB6C7:	ld	a,num_strings		; 30
AB6C9:	ld	hl,(DA10D)
	ld	de,(DA10F)
	ld	bc,255
	push	bc
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	pop	bc			; сколько
	ret	c
	push	af
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,AA355
	ld	bc,(DAF06)
	add	hl,bc
	ld	b,c
	call	ABA43
	pop	af
	dec	a
	jr	nz,AB6C9
	ld	hl,(DA10D)
	ld	(DA109),hl
	ld	hl,(DA10F)
	ld	(DA10B),hl
	jp	AB390			; вывести страницу текста

; PgUp
AB704:	ld	hl,(DA109)
	ld	de,(DA10B)
	ld	a,h
	or	d
	or	l
	or	e
	ret	z
	ld	(DA10D),hl
	ld	(DA10F),de
	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	jr	nz,AB75C
met03:	ld	a,num_strings		; 30
AB71F:	ld	hl,(DA10D)
	ld	de,(DA10F)
loc41:	ld	bc,len_string+2
	push	bc
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	pop	bc			; сколько
	jp	c,AB648
	push	af
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,AA355
	ld	bc,(DAF06)
	add	hl,bc
	ld	b,c
	call	ABA43
	pop	af
	dec	a
	jr	nz,AB71F
	ld	hl,(DA10D)
	ld	(DA109),hl
	ld	hl,(DA10F)
	ld	(DA10B),hl
	jp	AB390			; вывести страницу текста
	;
	; строка развернута
AB75C:	ld	a,num_strings		; 30
AB75E:	ld	hl,(DA10D)
	ld	de,(DA10F)
	ld	bc,255
	push	bc
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	pop	bc			; сколько
	jp	c,AB648
	push	af
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,AA355
	ld	bc,(DAF06)
	add	hl,bc
	ld	b,c
	call	ABA43
	pop	af
	dec	a
	jr	nz,AB75E
	ld	hl,(DA10D)
	ld	(DA109),hl
	ld	hl,(DA10F)
	ld	(DA10B),hl
	jp	AB390			; вывести страницу текста

; PgDw
AB79B:	ld	hl,(DA109)
	ld	(DA10D),hl
	ld	de,(DA10B)
	ld	(DA10F),de
	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	jr	nz,AB7E5
const03:ld	bc,(len_string+2)*num_strings	; 82*30 сколько
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,AA355
metk11:	ld	b,num_strings+1		; 31
AB7BA:	ex	de,hl
	ld	hl,(DAF06)
	ld	a,h
	or	l
	ret	z
	push	bc
	ld	a,h
	or	a
loc13:	ld	b,len_string		; 80
	jr	nz,AB7CE
	ld	a,l
loc14:	cp	len_string		; 80
	jr	nc,AB7CE
	ld	b,l
AB7CE:	ex	de,hl
	call	ABAC5
	pop	bc
	djnz	AB7BA
	ld	hl,(DA10D)
	ld	(DA109),hl
	ld	hl,(DA10F)
	ld	(DA10B),hl
	jp	AB390			; вывести страницу текста
	;
AB7E5:	ld	b,num_strings		; 30
AB7E7:	ld	hl,(DA10D)
	ld	de,(DA10F)
	push	bc
	ld	bc,256			; сколько
	call	AB282			; скопир. блок данных файла из буфера
	pop	bc
	ld	hl,(DAF06)
	ld	a,h
	or	l
	ret	z
	push	bc
	ld	b,255
	ld	a,h
	or	a
	jr	nz,$+3
	ld	b,l
	ld	hl,AA355
	call	ABAC5
	pop	bc
	djnz	AB7E7			; цикл 30
	ld	hl,(DA10D)
	ld	(DA109),hl
	ld	hl,(DA10F)
	ld	(DA10B),hl
	jp	AB390			; вывести страницу текста

; курсор вверх
AB81D:	ld	hl,(DA109)
	ld	de,(DA10B)
	ld	a,h
	or	d
	or	l
	or	e
	ret	z
	ld	(DA10D),hl
	ld	(DA10F),de
	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	jp	nz,AB8DF
loc42:	ld	bc,len_string+2
	push	bc
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	pop	bc
	jr	nc,AB850
	add	hl,bc
	ld	c,l
	ld	b,h
	ld	hl,0
	ld	e,l
	ld	d,h
AB850:	push	bc			; сколько
	call	AB282			; скопир. блок данных файла из буфера
	pop	bc
	ld	hl,(DAF06)
	push	hl
	ld	hl,AA355
	add	hl,bc
	ld	(hl),0Ah
	ld	b,c
	call	ABA43
	ld	(AB895+1),hl
	pop	hl
	ld	(DAF06),hl
	ld	hl,(DA10D)
	ld	de,(DA10F)
	ld	a,h
	or	d
	or	l
	or	e
	jp	z,AB648			; Home "в начало файла"
	ld	(DA109),hl
	ld	(DA10B),de
	;
	ld	de,(winpos)		; Y/X левого угла
	ld	hl,(winsize)		; Y/X размеры окна
	ld	a,1			; не очищать строку
	ld	bc,0255h		; скролл. вниз
	call	Func_55
	ld	de,(coord)
	ld	c,84h			; уст. курсор
	rst	08h
	;
	ld	hl,(DA111)
	ld	de,(DA113)
	push	hl
	push	de
AB895:	ld	hl,0
	call	AB3FC			; вывод одной строки
	pop	de
	pop	hl
	ld	(DA10D),hl
	ld	(DA111),hl
	ld	(DA10F),de
	ld	(DA113),de
	ld	a,(iy+6)
	or	a
	jr	z,AB8B5
	dec	(iy+6)
	ret
	;
AB8B5:	ld	bc,len_string+2		; 82
	push	bc
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	pop	bc			; сколько
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,AA3A7
loc43:	ld	b,len_string+2		; 82
	call	ABA43
	ld	hl,(DA10D)
	ld	(DA111),hl
	ld	hl,(DA10F)
	ld	(DA113),hl
	jp	AB157
	;
; строка развернута
AB8DF:	ld	bc,255
	push	bc
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	pop	bc
	jr	nc,AB8F8
	add	hl,bc
	ld	c,l
	ld	b,h
	ld	hl,0
	ld	e,l
	ld	d,h
AB8F8:	push	bc			; сколько
	call	AB282			; скопир. блок данных файла из буфера
	pop	bc
	ld	hl,(DAF06)
	push	hl
	ld	hl,AA355
	add	hl,bc
	ld	(hl),0Ah
	ld	b,c
	call	ABA43
	ld	(AB93D+1),hl
	pop	hl
	ld	(DAF06),hl
	ld	hl,(DA10D)
	ld	de,(DA10F)
	ld	a,h
	or	d
	or	l
	or	e
	jp	z,AB648
	ld	(DA109),hl
	ld	(DA10B),de
	;
	ld	de,(winpos)		; Y/X левого угла
	ld	hl,(winsize)		; Y/X размеры окна
	ld	a,1			; не очищать строку
	ld	bc,0255h		; скролл. вниз
	call	Func_55
	ld	de,(coord)
	ld	c,84h			; уст. курсор
	rst	08h
	;
	ld	hl,(DA111)
	ld	de,(DA113)
	push	hl
	push	de
AB93D:	ld	hl,0
	call	AB4FB
	pop	de
	pop	hl
	ld	(DA10D),hl
	ld	(DA111),hl
	ld	(DA10F),de
	ld	(DA113),de
	ld	a,(iy+6)
	or	a
	jr	z,AB95D
	dec	(iy+6)
	ret

AB95D:	ld	bc,255
	push	bc
	and	a
	sbc	hl,bc
	ld	bc,0
	ex	de,hl
	sbc	hl,bc
	ex	de,hl
	pop	bc			; сколько
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,AA454
	ld	b,255
	call	ABA43
	ld	hl,(DA10D)
	ld	(DA111),hl
	ld	hl,(DA10F)
	ld	(DA113),hl
	jp	AB157

; Курсор вниз
AB987:	ld	hl,(DA111)
	ld	(DA10D),hl
	ld	de,(DA113)
	ld	(DA10F),de
	ld	a,(UnWrap)		; 0/1 признак переноса строки
	or	a
	jr	nz,AB9F3
loc44:	ld	bc,len_string+2		; 82 сколько
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,(DAF06)
	ld	a,h
	or	l
	ret	z
	;
	ld	de,(winpos)		; Y/X левого угла
	ld	hl,(winsize)		; Y/X размеры окна
	ld	a,1			; не очищать строку
	ld	bc,0155h		; скролл. вверх
	call	Func_55
	ld	de,(coord)
met07:	ld	d,num_strings		; 30 строка
	ld	c,84h			; уст. курсор
	rst	08h
	;
	ld	hl,AA355
	call	AB3FC			; вывод одной строки
	ld	hl,(DA109)
	ld	(DA10D),hl
	ld	de,(DA10B)
	ld	(DA10F),de
loc45:	ld	bc,len_string+2		; 82 сколько
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,(DAF06)
	ld	a,h
	or	a
loc15:	ld	b,len_string		; 80
	jr	nz,AB9DD
	ld	a,l
loc16:	cp	len_string		; 80
	jr	nc,AB9DD
	ld	b,l
AB9DD:	ld	hl,AA355
	call	ABAC5
	ld	hl,(DA10D)
	ld	(DA109),hl
	ld	hl,(DA10F)
	ld	(DA10B),hl
	jp	AB157
	;
	; строка развернута
AB9F3:	ld	bc,255			; сколько
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,(DAF06)
	ld	a,h
	or	l
	ret	z
	;
	ld	de,(winpos)		; Y/X левого угла
	ld	hl,(winsize)		; Y/X размеры окна
	ld	a,1			; не очищать строку
	ld	bc,0155h		; скролл. вверх
	call	Func_55
	ld	de,(coord)
met09:	ld	d,num_strings		; 30 строка
	ld	c,84h			; уст. курсор
	rst	08h
	;
	call	AB4F8
	ld	hl,(DA109)
	ld	(DA10D),hl
	ld	de,(DA10B)
	ld	(DA10F),de
	ld	bc,255			; сколько
	call	AB282			; скопир. блок данных файла из буфера
	ld	hl,(DAF06)
	ld	b,255
	ld	a,h
	or	a
	jr	nz,$+3
	ld	b,l
	ld	hl,AA355
	call	ABAC5
	ld	hl,(DA10D)
	ld	(DA109),hl
	ld	hl,(DA10F)
	ld	(DA10B),hl
	jp	AB157


ABA43:	ld	(iy+1),b
	ld	e,l
	ld	d,h
	dec	hl
	ld	a,(hl)
	cp	0Dh
	jr	z,ABA5E
	cp	0Ah
	jr	nz,ABA66
	dec	(iy+1)
	dec	b
	jr	z,ABAA2
	dec	hl
	ld	a,(hl)
	cp	0Dh
	jr	nz,ABA66
ABA5E:	dec	(iy+1)
	dec	b
	jr	z,ABAA2
ABA64:	dec	hl
	ld	a,(hl)
ABA66:	dec	(iy+1)
	cp	0Ah
	jr	nz,ABA77
	dec	hl
	ld	a,(hl)
	inc	hl
	cp	0Dh
	jr	nz,ABA96
	dec	hl
	jr	ABA96
	;
ABA77:	cp	0Dh
	jr	z,ABA96
	cp	9
	jr	nz,ABA94
	ld	a,(iy+1)
	and	7
	sub	8
	neg
	ld	c,a
ABA89:	dec	b
	jr	z,ABA96
	dec	(iy+1)
	dec	c
	jr	nz,ABA89
	jr	ABA64
	;
ABA94:	djnz	ABA64
ABA96:	ld	a,(hl)
	cp	0Dh
	jr	nz,ABA9D
	inc	hl
	ld	a,(hl)
ABA9D:	cp	0Ah
	jr	nz,ABAA2
	inc	hl
ABAA2:	push	hl
	ex	de,hl
	and	a
	sbc	hl,de
	ex	de,hl
	ld	hl,(DAF06)
	and	a
	sbc	hl,de
	ld	(DAF06),hl
	ld	hl,(DA10D)
	and	a
	sbc	hl,de
	ld	(DA10D),hl
	jr	nc,ABAC3
	ld	hl,(DA10F)
	dec	hl
	ld	(DA10F),hl
ABAC3:	pop	hl
	ret


ABAC5:	ld	(iy+1),0
	ld	e,l
	ld	d,h
ABACB:	ld	a,(hl)
	inc	hl
	cp	0Dh
	jr	nz,ABAD9
	ld	a,(hl)
	cp	0Ah
	jr	nz,ABAFC
	inc	hl
	jr	ABAFC
	;
ABAD9:	cp	0Ah
	jr	z,ABAFC
	cp	9
	jr	nz,ABAF7
	ld	a,(iy+1)
	and	0F8h			; получить ближ. положение Tab
	add	a,8
	sub	(iy+1)
	ld	c,a
ABAEC:	inc	(iy+1)
	dec	b
	jr	z,ABAFC
	dec	c
	jr	nz,ABAEC
	jr	ABACB
	;
ABAF7:	inc	(iy+1)
	djnz	ABACB
ABAFC:	push	hl
	and	a
	sbc	hl,de
	ex	de,hl
	ld	hl,(DAF06)
	and	a
	sbc	hl,de
	ld	(DAF06),hl
	ld	hl,(DA10D)
	add	hl,de
	ld	(DA10D),hl
	jr	nc,ABB1A
	ld	hl,(DA10F)
	inc	hl
	ld	(DA10F),hl
ABB1A:	pop	hl
	ret


;=================================================
;   HEX-режим статусной строки
;=================================================
ABB1C:	ld	a,1			; hex-окно
	ld	(cur_mode_dump),a	; флаг
	ld	a,(DA109)
	and	0F0h			; выделить старший ниббл
	ld	(DA109),a
	ld	de,TA2B5		; стат. строка hex-режима
	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	call	z,print_keybar1		; вывод нижней стат. строки
	ld	a,2			; уст. hex-режим вывода
	call	DUMP			; вывести дамп
	ld	hl,AA355
	ld	de,AA356
const04:ld	bc,(len_string+2)*num_strings	; 82*30
	ld	(hl),0
	ldir
	ld	hl,TA115		; ds 63
loc17:	ld	b,len_string		; 80
	ld	a," "
	ld	(hl),a
	inc	hl
	djnz	$-2
	ld	(iy+5),b		; сбр. номер колонки
	call	ABB87			; вывести страницу hex-дампа
	ld	hl,half_mode_fview	; флаг выхода из гляделки
	xor	a			; false
	cp	(hl)
	ld	(hl),a			; сбр. флаг
	ret	nz			; не оставаться в гляделке после ее отработки
; ждем событий от мышки/клавы
ABB4A:	push	ix
	push	iy
	call	handle_event		; читаем событие
	pop	iy
	pop	ix
	ld	a,(what)		; список событий
	cp	evNothing
	jr	z,ABB4A			; нет событий
	cp	evMouseFr
	jp	z,fview_mouse_hex	; бутоны нажаты (msfview.asm)
	cp	evKeyboard		; обычные клавиши
	jr	nz,ABB60
	ld	a,e
;	cp	9			; Tab
;	jp	z,AB375
	cp	1Bh
	jr	nz,ABB60
ABB58:	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	ret	z			; норм. режим
	ld	hl,ABB4A
	push	hl
	ret;
	;jp	fm_event		; панельный режим (на обработчик ФМ)
	;
ABB60:	cp	evCombKey		; комб. или курс. клавиши
	jr	nz,ABB4A		; не служ. клавиши
	res	7,d
	ld	a,d
	cp	3Dh			; F3 Quit
	jr	z,ABB58
	cp	44h			; F10 Quit
	jr	z,ABB58
	cp	3Eh			; F4 Ascii-режим
	jp	z,AB317
	ld	hl,ABB4A
	push	hl
;	cp	43h			; F9
;	jp	z,fm_event		; на обработчик ФМ
	cp	3Fh			; F5  Goto  перейти на адрес...
	jp	z,ABDF3
	cp	42h			; F8  Win/Koi/Dos
	jp	z,change_code_page1
	cp	58h			;  курсор
	jp	z,ABC9A
	cp	52h			;  курсор
	jp	z,ABCDB
	cp	59h			; PgUp
	jp	z,ABD9D
	cp	53h			; PgDwn
	jp	z,ABDC3
	cp	57h			; Home  в начало файла
	jp	z,ABD3B
	cp	51h			; End  в конец файла
	jp	z,ABD54
	bit	5,b			; Ctrl ?
	ret	z			; нет
;	jp	z,AB370			; проверить Alt, Shift
	cp	59h			; Ctrl+PgUp  в начало файла
	jp	z,ABD3B
	cp	53h			; Ctrl+PgDwn  в конец файла
	jp	z,ABD54
	cp	58h			; Ctrl+ курсор, PgUp
	jp	z,ABD9D
	cp	52h			; Ctrl+ курсор, PgDwn
	jp	z,ABDC3
	ret
;	jp	AB370			; проверить Alt, Shift, др. Ctrl



ABB87:	ld	hl,AB157
	push	hl
	ld	hl,(DA109)
	ld	(DA10D),hl
	ld	de,(DA10B)
	ld	(DA10F),de
const21:ld	bc,16 * num_strings	; "байт в строке дампа" * "число строк"
	call	AB282			; скопир. блок данных файла из буфера
	ld	ix,AA355
	ld	de,(coord)		; строка/колонка
ABBA6:	ld	(ABBC9+1),de
	push	ix
	ld	c,84h			; уст. курсор
	rst	08h
	pop	ix
	call	ABBEF
	jr	c,ABBD4
	ld	hl,(DA10D)
	ld	de,16
	add	hl,de
	ld	(DA10D),hl
	jr	nc,ABBC9
	ld	hl,(DA10F)
	inc	hl
	ld	(DA10F),hl
ABBC9:	ld	de,0
	inc	d
	ld	a,d
metk12:	cp	num_strings+1		; 31 число строк дампа
	jp	nz,ABBA6
	ret
	;
ABBD4:	ld	de,(ABBC9+1)
	inc	d
metk13:	ld	a,num_strings+1		; 31 число строк дампа
	sub	d
	ret	z
	ld	b,a
ABBDE:	push	de			; строка/колонка
	push	bc
	ld	c,84h			; уст. курсор
	rst	08h
loc18:	ld	b,len_string		; 80 длина строки
	ld	a," "			; символ
	ld	c,82h			;&& вывод один. символов без атрибута
	rst	08h
	pop	bc
	pop	de
	inc	d
	djnz	ABBDE
	ret


ABBEF:	ld	(iy+1),0
	ld	hl,(DAF06)
	ld	a,h
	or	a
	ld	c,16			; число байт hex-строки
	jr	nz,ABC02
	ld	a,l
	cp	c
	jr	nc,ABC02
	ld	c,l
ABC02:	xor	a
	ld	b,a
	sbc	hl,bc
	ld	(DAF06),hl
	push	hl
	ld	hl,TA115		; hex-буфер  ds 63
	ld	de,TA154		; ascii буфер
	ld	(hl),"0"		; вед. нуль (просто для выравн. дампа)
	inc	hl
	ld	a,(DA110)		; ст.разряд тек. адреса
	call	HEXA			; a -> (hl)
	ld	a,(DA10F)
	call	HEXA
	ld	a,(DA10E)
	call	HEXA
	ld	a,(DA10D)		; мл.разряд
	call	HEXA
	ld	(hl),":"		; разделитель адреса
	inc	hl
	inc	hl
	inc	de			; доп. разделитель hex - ascii полей
	ld	b,c
ABC2F:	ld	a,(ix+0)
	inc	ix
	push	af
	call	char_code_page		; взять символ из кодовой страницы
	ld	(de),a			; ascii-поле
	pop	af
	call	HEXA			; a -> (hl)
	inc	hl
	inc	de
	inc	(iy+1)
	ld	a,(iy+1)
	cp	4
	jr	z,ABC4C
	cp	8
	jr	nz,ABC48		; jr  z,ABC4C
	ld	(hl),"│"		; разделитель середины hex-строки
	inc	hl
	jr	ABC4C
ABC48:	cp	12
	jr	nz,$+3
ABC4C:	inc	hl
	djnz	ABC2F
	; тест на допись не полной hex-строки
	ld	a,16			; число байт hex-строки
	sub	(iy+1)
	jr	z,ABC75			; строка полная
	ld	b,a
ABC57:	ld	a," "			; символ заполнения
	ld	(hl),a
	inc	hl
	ld	(hl),a
	inc	hl
	inc	hl
	ld	(de),a
	inc	de
	inc	(iy+1)
	ld	a,(iy+1)
	cp	4
	jr	z,ABC72
	cp	8
	jr	nz,ABC6E
	ld	(hl),"│"		; разделитель середины hex-строки
	inc	hl
	jr	ABC72
ABC6E:	cp	12
	jr	nz,$+3
ABC72:	inc	hl
	djnz	ABC57
ABC75:	push	ix
	ld	hl,TA115		; ds 63   адрес строки
loc19:	ld	b,len_string		; 80 длина строки
	ld	a,(color_array+39)	; 1Bh атрибут
	ld	e,a
	ld	a,(viewer_mode)		; режим работы вьюера
	or	a
	jr	z,$+4
	ld	b,38			; длина строки панели
	ld	c,85h			;&& вывод строки с атрибутом
	rst	08h
	pop	ix
	pop	hl
	ld	a,h
	or	l
	ret	nz
	scf
	ret


; "a" в hex-формате -> (hl)
HEXA:	push	af
	rrca
	rrca
	rrca
	rrca
	call	$+4
	pop	af
	and	0Fh
	add	a,90h
	daa
	adc	a,40h
	daa
	ld	(hl),a
	inc	hl
	ret


ABC9A:	ld	hl,(DA109)
	ld	de,(DA10B)
	ld	a,h
	or	d
	or	l
	or	e
	ret	z
	ld	bc,16
	and	a
	sbc	hl,bc
	ld	(DA109),hl
	ld	(DA10D),hl
	jr	nc,ABCB5
	dec	de
ABCB5:	ld	(DA10B),de
	ld	(DA10F),de
	ld	bc,16			; сколько
	call	AB282			; скопир. блок данных файла из буфера
	;
	ld	de,(winpos)		; Y/X левого угла
	ld	hl,(winsize)		; Y/X размеры окна
	ld	a,1			; не очищать строку
	ld	bc,0255h		; скролл. вниз
	call	Func_55
	ld	de,(coord)
	ld	c,84h			; уст. курсор
	rst	08h
	;
	ld	ix,AA355
	call	ABBEF
	jp	AB157


ABCDB:	ld	hl,(DA109)
	ld	bc,(DA10B)
const22:ld	de,16 * num_strings	; "байт в строке дампа" * "число строк"
	add	hl,de
	push	hl
	jr	nc,$+3
	inc	bc
	push	bc
	ex	de,hl
	ld	hl,(D9F04)		; мл.разряд размера файла
	and	a
	sbc	hl,de
	ex	de,hl
	ld	hl,(D9F06)		; ст.разряд размера файла
	sbc	hl,bc
	pop	bc
	pop	hl
	ret	c
	jr	nz,ABD00
	ld	a,d
	or	e
	ret	z
ABD00:	push	hl
	push	bc
	ld	hl,(DA109)
	ld	de,(DA10B)
	ld	bc,16			; сколько
	add	hl,bc
	jr	nc,$+3
	inc	de
	ld	(DA109),hl
	ld	(DA10B),de
	pop	de
	pop	hl
	ld	(DA10D),hl
	ld	(DA10F),de
	call	AB282			; скопир. блок данных файла из буфера
	;
	ld	de,(winpos)		; Y/X левого угла
	ld	hl,(winsize)		; Y/X размеры окна
	ld	a,1			; не очищать строку
	ld	bc,0155h		; скролл. вверх
	call	Func_55
	ld	de,(coord)
met12:	ld	d,num_strings		; 30 строка
	ld	c,84h			; уст. курсор
	rst	08h
	;
	ld	ix,AA355
	call	ABBEF
	jp	AB157


ABD3B:	ld	hl,(DA109)
	ld	bc,(DA10B)
	ld	a,h
	or	b
	or	l
	or	c
	ret	z
	ld	hl,0
	ld	(DA109),hl
	ld	(DA10B),hl
	jp	ABB87


ABD54:	ld	hl,(DA109)
	ld	bc,(DA10B)
const23:ld	de,16 * num_strings	; "байт в строке дампа" * "число строк"
	add	hl,de
	jr	nc,$+3
	inc	bc
	ex	de,hl
	ld	hl,(D9F04)		; мл.разряд размера файла
	push	hl
	and	a
	sbc	hl,de
	ex	de,hl
	ld	hl,(D9F06)		; ст.разряд размера файла
	push	hl
	sbc	hl,bc
	pop	bc
	pop	hl
	ret	c
	jr	nz,ABD79
	ld	a,d
	or	e
	ret	z
ABD79:	ld	de,16 * num_strings	; "байт в строке дампа" * "число строк"
	and	a
	sbc	hl,de
	jr	nc,$+3
	dec	bc
	ld	a,l
	and	0Fh
	jr	z,ABD92
	ld	a,l
	and	0F0h
	ld	l,a
	ld	de,16
	add	hl,de
	jr	nc,$+3
	inc	bc
ABD92:	ld	(DA109),hl
	ld	(DA10B),bc
	jp	ABB87


ABD9D:	ld	hl,(DA109)
	ld	bc,(DA10B)
	ld	a,h
	or	b
	or	l
	or	c
	ret	z
const25:ld	de,16 * num_strings	; "байт в строке дампа" * "число строк"
	sbc	hl,de
	jr	nc,ABDB8
	ld	a,b
	or	c
	dec	bc
	jr	nz,ABDB8
	inc	bc
	ld	l,c
	ld	h,b
ABDB8:	ld	(DA109),hl
	ld	(DA10B),bc
	jp	ABB87


ABDC3:	ld	hl,(DA109)
	ld	bc,(DA10B)
const26:ld	de,16 * num_strings	; "байт в строке дампа" * "число строк"
	add	hl,de
	push	hl
	jr	nc,$+3
	inc	bc
	push	bc
	ex	de,hl
	ld	hl,(D9F04)		; мл.разряд размера файла
	and	a
	sbc	hl,de
	ex	de,hl
	ld	hl,(D9F06)		; ст.разряд размера файла
	sbc	hl,bc
	pop	bc
	pop	hl
	ret	c
	jr	nz,ABDE8
	ld	a,d
	or	e
	ret	z
ABDE8:	ld	(DA109),hl
	ld	(DA10B),bc
	jp	ABB87


;-------------------------------------------------
;  Goto "перейти на адрес..."
;-------------------------------------------------
ABDF3:	ld	hl,(D9F04)		; мл.разряд размера файла
	ld	de,(D9F06)		; ст.разряд размера файла
	ld	a,h
	or	d
	or	e
	jr	nz,ABE03
	ld	a,l
	cp	11h
	ret	c
ABE03:	ld	hl,TAEFB
	xor	a
	ld	(ABE4E+1),a
	inc	a
	ld	(ABE48+1),a
	ld	a,(DA10C)
	call	HEXA			; a -> (hl)
	ld	a,(DA10B)
	call	HEXA
	ld	a,(DA10A)
	call	HEXA
	ld	a,(DA109)
	call	HEXA
ABE26:	call	ABEBE
ABE29:	halt
	call	ABEE6
	call	get_mouse_info
	jp	nz,fview_mouse_goto	; бутоны нажаты
; ввод адреса перехода
	ld	a,2			; опрос без ожидания
	rst	20h
	jr	z,ABE29
	or	a
	jr	z,ABE8F			; нажаты курс. клавиши
	cp	0Dh			; Enter
	jp	z,ABF17
	cp	8			; Backspace
	jr	z,ABE75
	cp	1Bh			; Esc
	jp	z,ABF5C
	cp	" "
	jr	c,ABE29
	ld	c,a
ABE48:	ld	a,0
	or	a
	call	nz,ABE65
ABE4E:	ld	a,0
	ld	b,a
	ld	hl,TAEFB
	add	a,l
	ld	l,a
	jr	nc,ABE59
	inc	h
ABE59:	ld	(hl),c
	ld	a,b
	cp	7
	jr	z,ABE26
	inc	a
	ld	(ABE4E+1),a
	jr	ABE26
	
ABE65:	ld	hl,TAEFB		; "        ",0
	ld	b,8
	ld	a," "			; стереть пункт стат. строки
	ld	(hl),a
	inc	hl
	djnz	$-2
	xor	a
	ld	(ABE48+1),a
	ret

ABE75:	xor	a
	ld	(ABE48+1),a
	ld	a,(ABE4E+1)
	or	a
	jr	z,ABE29
	dec	a
	ld	(ABE4E+1),a
	ld	hl,TAEFB
	add	a,l
	ld	l,a
	jr	nc,$+3
	inc	h
	ld	(hl)," "
	jr	ABE26

ABE8F:	ld	a,d
	cp	54h			; курсор влево
	jr	z,ABE9A
	cp	56h			; курсор вправо
	jr	z,ABEAB
	jr	ABE29

; Курсор влево 
ABE9A:	xor	a
	ld	(ABE48+1),a
	ld	a,(ABE4E+1)
	or	a
	jp	z,ABE29
	dec	a
	ld	(ABE4E+1),a
	jp	ABE26

; Курсор право
ABEAB:	xor	a
	ld	(ABE48+1),a
	ld	a,(ABE4E+1)
	cp	7
	jp	z,ABE29
	inc	a
	ld	(ABE4E+1),a
	jp	ABE26


ABEBE:	ld	de,(coord)		; строка/колонка ввода адреса
	inc	e
	ld	c,84h			; уст. курсор
	rst	08h
	ld	hl,TAEFB		; "        ",0
	ld	bc,0886h		; выв. строку без атрибутов (b=длина строки)
	rst	08h
	ld	a,(ABE4E+1)
	inc	a
	ld	e,a			; колонка
	ld	d,1			; строка
	ld	c,84h			; уст. курсор
	rst	08h
	ld	a,"█"			; нач. курсор в режиме ввода адреса перехода
	ld	bc,0182h		; вывод 1-го символа без атрибута
	rst	08h
	ld	a,1
	ld	(ABF04+1),a
	ld	a,6			; автоповтор ?
	ld	(ABEE6+1),a
	ret


ABEE6:	ld	a,0
	dec	a
	ld	(ABEE6+1),a
	ret	nz
	ld	hl,TAEFB
	ld	a,(ABE4E+1)
	ld	e,a			; колонка
	inc	e
	ld	d,1			; строка редакт. адреса перехода
	add	a,l
	ld	l,a
	jr	nc,ABEFC
	inc	h
ABEFC:	push	hl
	ld	c,84h			; уст. курсор
	rst	08h
	pop	hl
	ld	bc,0182h		; вывод 1-го символа без атрибута
ABF04:	ld	a,0
	xor	1
	ld	(ABF04+1),a
	ld	a,(hl)
	jr	z,ABF10
	ld	a,"█"			; осн. курсор в режиме ввода адреса
ABF10:	rst	08h
	ld	a,12			; частота мигания
	ld	(ABEE6+1),a
	ret


ABF17:	xor	a
	ld	(ABE4E+1),a
	ld	bc,TAEFB		; "        ",0
	call	ABF84
	jp	c,ABE26
	ld	c,e
	ld	b,d
	ld	a,l
	and	0F0h
	ld	l,a
	ex	de,hl
	ld	hl,(D9F04)		; мл.разряд размера файла
	and	a
	sbc	hl,de
	ld	hl,(D9F06)		; ст.разряд размера файла
	sbc	hl,bc
	jr	c,ABF3E
	jr	nz,ABF50
	ld	a,d
	or	e
	jr	nz,ABF50
ABF3E:	ld	hl,(D9F04)		; мл.разряд размера файла
	ld	bc,16
	and	a
	sbc	hl,bc
	ex	de,hl
	ld	hl,(D9F06)		; ст.разряд размера файла
	jr	nc,ABF4E
	dec	hl
ABF4E:	ld	c,l
	ld	b,h
ABF50:	ld	(DA109),de
	ld	(DA10B),bc
	jp	ABB87

; Esc
ABF5C:	ld	hl,TAEFB		; буфер вводимого адреса перехода
	push	hl
	ld	a,(DA10C)		; ст.разряд тек.адреса
	call	HEXA			; в hex-формате сохр. в буфере
	ld	a,(DA10B)
	call	HEXA
	ld	a,(DA10A)
	call	HEXA
	ld	a,(DA109)		; мл.разряд тек.адреса
	call	HEXA
	ld	de,(coord)		; строка/колонка начала адреса
	inc	e
	ld	c,84h			; уст. курсор
	rst	08h
	pop	hl
	ld	bc,0886h		; вывод строки без атриб. (b=длина)
	rst	08h
	ret


ABF84:	ld	hl,0
	ld	e,l
	ld	d,h
ABF89:	ld	a,(bc)
	inc	bc
	or	a
	ret	z
	cp	" "
	jr	z,ABF89
	cp	"a"
	jr	c,ABF97
	sub	20h
ABF97:	cp	"0"
	ret	c
	cp	"F"+1
	ccf
	ret	c
	sub	"0"
	cp	9+1
	jr	c,ABFA9
	sub	7
	cp	9+1
	ret	c
ABFA9:	add	hl,hl
	ex	de,hl
	adc	hl,hl
	ex	de,hl
	add	hl,hl
	ex	de,hl
	adc	hl,hl
	ex	de,hl
	add	hl,hl
	ex	de,hl
	adc	hl,hl
	ex	de,hl
	add	hl,hl
	ex	de,hl
	adc	hl,hl
	ex	de,hl
	or	l
	ld	l,a
	jr	ABF89



;-------------------------------------------------
; Скроллинг окна
; вход: b=1 вверх
;       b=2 вниз
;-------------------------------------------------
Func_55:djnz	fnc_551
	ld	c,h
	db	0DDh
	ld	h,d
	db	0DDh
	ld	l,e
	inc	d
	dec	h
	ld	c,0B7h			; перемещ. окна
	jp	scrn5__
	;
; скроллинг вниз
fnc_551:ld	c,l
	db	0DDh
	ld	h,d
	db	0DDh
	ld	l,e
	db	0DDh
	inc	h
	dec	h
	ld	c,0B7h
	jp	scrn5__
