diff --git a/docs/fn_api_0.5.txt b/docs/fn_api_0.5.txt index db053bf..8c8d2da 100644 --- a/docs/fn_api_0.5.txt +++ b/docs/fn_api_0.5.txt @@ -1,7 +1,7 @@ []========================================================================[] * * * Описание Flex Navigator API v1.xx для разработчиков Flx-Plugins * -* doc v0.5 от 31.03.2025 (в процессе) * +* doc v0.5 от 26.07.2025 (в процессе) * * * []========================================================================[] @@ -57,7 +57,7 @@ далее идут об'екты окна в формате: +00 (1) тип объекта - +01 ... описатели обекта + +01 ... описатели объекта об'екты окна: 0. +00 (1) == 0 - конец списка об'ектов. после этого оконная @@ -128,6 +128,13 @@ +01 (2) смещение x от начала окна (0 - 639) +03 (2) смещение y от начала окна (0 - 255) + 12. +00 (2) == 12 - текстовая строка + +01 (2) смещение x от начала окна (0 - 639) + +03 (2) смещение y от начала окна (0 - 255) + +05 (1) цвет печати + (d7-d4 цвет background, d3-d0 цвет foreground) + +06 (2) адрес текстовой строки (конец строки - 0) + []------------------------------------------------------------------------[] JUMPS.InvertRectan - процедура замены цвета прямоугольной плоскости @@ -271,17 +278,9 @@ +0C ... сама строка процедуры для таблицы элементов экрана: - InpLnExtN - процедура нормального выхода из редакции - InpLnExtC - процедура выхода из редакции по cancel - (восстанавливает изначальную строку) - -[]------------------------------------------------------------------------[] - - JUMPS.InpLnExtN - -[]------------------------------------------------------------------------[] - - JUMPS.InpLnExtC + JUMPS.InpLnExtN - процедура нормального выхода из редакции + JUMPS.InpLnExtC - процедура выхода из редакции по cancel + (восстанавливает изначальную строку) []------------------------------------------------------------------------[] @@ -294,7 +293,7 @@ []------------------------------------------------------------------------[] - JUMPS.InitScrBar - процедура инициализации описателя скроллбара + JUMPS.InitScrollBar - процедура инициализации описателя скроллбара на вход: IX - адрес описателя скроллбара @@ -305,7 +304,7 @@ +00 (2) X позиция скролбара (0-639) +02 (2) Y позиция скролбара (0-255) +04 (2) длина скролбара - +06 (2) текущая длина скролбара (инициализируется в InitScrBar) + +06 (2) текущая длина скролбара (инициализируется в InitScrollBar) +08 (2) адрес ячейки, куда запишется начальная координата бара если 0, то не используется (используется для таблицы элементов экрана) @@ -365,15 +364,7 @@ []------------------------------------------------------------------------[] - JUMPS.InitScrollBar - -[]------------------------------------------------------------------------[] - - JUMPS.MenuWork - -[]------------------------------------------------------------------------[] - - 3 команд перехода (12 байт) зарезервированы и заполнены + 5 команд перехода (12 байт) зарезервированы и заполнены командой RET (12 байт 0xC9) []------------------------------------------------------------------------[] @@ -408,7 +399,7 @@ если +00 == 0x8000 это считается концом таблицы элементов зкрана - флаги элемента: + флаги элемента (номер бита): d00 - элемент кнопка d01 - рабочая кнопка d02 - инверт @@ -483,7 +474,13 @@ []------------------------------------------------------------------------[] - JUMPS.ConvNumTxt40 + JUMPS.ConvNumTxt40 - процедура конвертации беззнакового числа + 40 bit в текст + + на входе: + ABCHL - число + DE - адрес буфера + на выходе: []------------------------------------------------------------------------[] @@ -662,10 +659,14 @@ []------------------------------------------------------------------------[] - JUMPS.Resident + JUMPS.Resident - вызов процедур в странице + + на входе: + DE - адрес вызова + C - адрес порта окна страницы + A - номер страницы + на выходе: + портится регистр BС (используется при вызове для хранения + старого значения номера страницы для восстановления) []------------------------------------------------------------------------[] - -13 july 2002 -Anton Enin (C) Copyright 2002 R-lab -если есть вопросы e-mail: r-lab@mail.ru или на спринтер форуме. diff --git a/docs/history.txt b/docs/history.txt index c274bbc..ce19b20 100644 --- a/docs/history.txt +++ b/docs/history.txt @@ -1,15 +1,20 @@ -FN - FlexNavigator -FV - FileViewer -FE - FileEditor +29.07.2025 +FileEditor.flx 1.10 +- устранено перепутанные кнопки для нажатий мышью для F7 и F9. +FileViewer.flx 1.06 +- добавлено переключение кодировки в режиме HEX просмотра. +FlexNavigaror 1.16.01 +- исправлен вылет при создании нового файла по Shift+F4 или просмотр с + вводом имени по Shift+F3, плагин был не загружен. 25.07.2025 CDplayer.flx 1.1: - плагин доделан, описание/history в cdplayer.txt рядом с плагином. -FE 1.09 +FileEditor.flx 1.09 - исправлено: при выходе из редактора с несохраненным файлом и запросе на сохранение клавиша Enter теперь работает как подтверждение сохранения. -FN 1.16 +FlexNavigator 1.16 - исправлен возрат текущей директории после загрузки плагина. - встроенный editor переехал в плагин откуда и запускается по F4, из FN удален. - встроенный viewer переехал в плагин откуда и запускается по F3, из FN удален. @@ -25,9 +30,13 @@ FN 1.16 - исправлена потеря цвета при печати текста по указанному адресу. - текстовым файлам вернул кодировку CP866, readme.md оставлен в кодировке UTF8. +FN - FlexNavigator +FV - FileViewer +FE - FileEditor + 27.06.2025 FN 1.15.01 -- в паре мест испралена data на date. +- в паре мест исправлена data на date. 25.06.2025 FN 1.15 diff --git a/fn/flx/fneditor.flx b/fn/flx/fneditor.flx index 2a81c37..3827b03 100644 Binary files a/fn/flx/fneditor.flx and b/fn/flx/fneditor.flx differ diff --git a/fn/flx/fnviewer.flx b/fn/flx/fnviewer.flx index 73e93fd..e1a623f 100644 Binary files a/fn/flx/fnviewer.flx and b/fn/flx/fnviewer.flx differ diff --git a/fn/flx/help.flx b/fn/flx/help.flx index 59d4ee3..f66d557 100644 Binary files a/fn/flx/help.flx and b/fn/flx/help.flx differ diff --git a/fn/fn.exe b/fn/fn.exe index 7e5619a..edcbf2b 100644 Binary files a/fn/fn.exe and b/fn/fn.exe differ diff --git a/fn/history.txt b/fn/history.txt index c274bbc..ce19b20 100644 --- a/fn/history.txt +++ b/fn/history.txt @@ -1,15 +1,20 @@ -FN - FlexNavigator -FV - FileViewer -FE - FileEditor +29.07.2025 +FileEditor.flx 1.10 +- устранено перепутанные кнопки для нажатий мышью для F7 и F9. +FileViewer.flx 1.06 +- добавлено переключение кодировки в режиме HEX просмотра. +FlexNavigaror 1.16.01 +- исправлен вылет при создании нового файла по Shift+F4 или просмотр с + вводом имени по Shift+F3, плагин был не загружен. 25.07.2025 CDplayer.flx 1.1: - плагин доделан, описание/history в cdplayer.txt рядом с плагином. -FE 1.09 +FileEditor.flx 1.09 - исправлено: при выходе из редактора с несохраненным файлом и запросе на сохранение клавиша Enter теперь работает как подтверждение сохранения. -FN 1.16 +FlexNavigator 1.16 - исправлен возрат текущей директории после загрузки плагина. - встроенный editor переехал в плагин откуда и запускается по F4, из FN удален. - встроенный viewer переехал в плагин откуда и запускается по F3, из FN удален. @@ -25,9 +30,13 @@ FN 1.16 - исправлена потеря цвета при печати текста по указанному адресу. - текстовым файлам вернул кодировку CP866, readme.md оставлен в кодировке UTF8. +FN - FlexNavigator +FV - FileViewer +FE - FileEditor + 27.06.2025 FN 1.15.01 -- в паре мест испралена data на date. +- в паре мест исправлена data на date. 25.06.2025 FN 1.15 diff --git a/fn_const.a80 b/fn_const.a80 index f8a3656..0c24ef0 100644 --- a/fn_const.a80 +++ b/fn_const.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 25.07.2025 savelij +; LAST UPDATE: 26.07.2025 savelij INIT_VAR 0x8000 SETVAR WorkBuffer, 0x400 ; рабочий буфер @@ -174,13 +174,15 @@ BAR _INIT_VAR _SETVAR .X, WORD _SETVAR .Y, WORD - _SETVAR .MAX_LEN, WORD ; размер бара - _SETVAR .LEN_FILES, WORD ; количество файлов - _SETVAR .LEFT_FILES, WORD - _SETVAR .RIGHT_FILES, WORD - _SETVAR .PAGE_FILES, WORD ; количество файлов на страницу - _SETVAR .MAX_FILES, WORD ; максимальное количество файлов - _SETVAR .FIRST_FILE, WORD ; первый файл + _SETVAR .MAX_LEN, WORD ; длина скролбара + _SETVAR .LEN_FILES, WORD ; текущая длина скролбара + _SETVAR .LEFT_FILES, WORD ; адрес ячейки, куда запишется начальная координата бара + ; если 0, то не используется + _SETVAR .RIGHT_FILES, WORD ; адрес ячейки, куда запишется конечная координата бара + ; если 0, то не используется + _SETVAR .PAGE_FILES, WORD ; количество видимых элементов + _SETVAR .MAX_FILES, WORD ; общее количество элементов + _SETVAR .FIRST_FILE, WORD ; первая видимый элемент ;[]----------------------------------------------------------[] ; Прогресс бар @@ -188,12 +190,12 @@ PROC _INIT_VAR _SETVAR .X, WORD _SETVAR .Y, WORD - _SETVAR .MAX_LEN, WORD ; максимальная длина процесса - _SETVAR .INDEX, WORD ; Коэффициент для процесса - _SETVAR .CORR_INDEX, WORD ; Коррекция коэфициента - _SETVAR .MAX_PAGES, DWORD ; Максимум страниц - _SETVAR .CURR_PAGE, DWORD ; Текущая страница - _SETVAR .COLOR, BYTE ; Цвет прогресса + _SETVAR .MAX_LEN, WORD ; длина процессбара + _SETVAR .INDEX, WORD ; коэффициент для процесса + _SETVAR .CORR_INDEX, WORD ; коррекция коэфициента + _SETVAR .MAX_PAGES, DWORD ; максимум страниц + _SETVAR .CURR_PAGE, DWORD ; текущая страница + _SETVAR .COLOR, BYTE ; цвет прогресса ; Формат таблицы ; +00 2 Xmin @@ -268,13 +270,12 @@ JUMPS _SETVAR .InpLnExtN, .JUMPSIZE _SETVAR .InpLnExtC, .JUMPSIZE _SETVAR .DOSError, .JUMPSIZE - _SETVAR .InitScrBar, .JUMPSIZE + _SETVAR .InitScrollBar, .JUMPSIZE _SETVAR .PrnHScrBar, .JUMPSIZE _SETVAR .PrnVScrBar, .JUMPSIZE _SETVAR .InitProcess, .JUMPSIZE _SETVAR .PrnProcess, .JUMPSIZE - _SETVAR .InitScrollBar, .JUMPSIZE - _ADDVAR .JUMPSIZE * 4 ; DUPL 15,0xC9 + _ADDVAR .JUMPSIZE * 5 ; DUPL 15,0xC9 _SETVAR .ResFire, .JUMPSIZE _SETVAR .TestCoords, .JUMPSIZE _SETVAR .SetCMOSPrint, .JUMPSIZE diff --git a/fn_version.a80 b/fn_version.a80 index 8f8b787..aa608d5 100644 --- a/fn_version.a80 +++ b/fn_version.a80 @@ -1,7 +1,7 @@ -; LAST UPDATE: 18.07.2025 savelij +; LAST UPDATE: 29.07.2025 savelij FLEX_VERS -.NAVIGATOR EQU "1.16" -.EDITOR EQU "1.09" -.VIEWER EQU "1.05" +.NAVIGATOR EQU "1.16.01" +.EDITOR EQU "1.10" +.VIEWER EQU "1.06" diff --git a/fnmain.a80 b/fnmain.a80 index ec51a11..9658630 100644 --- a/fnmain.a80 +++ b/fnmain.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 24.07.2025 savelij +; LAST UPDATE: 25.07.2025 savelij ;[]=======================================================================[] ; FLEX NAVIGATOR ; @@ -54,9 +54,8 @@ START_BLOCK_1 JP PrnVScrBar ; 8630->9882 JP InitProcess ; 8633->99DA JP PrnProcess ; 8636->9A39 - JP InitScrollBar - DB JUMPS.JUMPSIZE * 4 DUP 0xC9 + DB JUMPS.JUMPSIZE * 5 DUP 0xC9 JP ResFire ; 8648->9B01 JP TestCoords ; 864B->9B10 diff --git a/fnwork.a80 b/fnwork.a80 index d2ad17e..948e32d 100644 --- a/fnwork.a80 +++ b/fnwork.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 25.07.2025 savelij +; LAST UPDATE: 29.07.2025 savelij ;[]===========================================================[] CursUp LD A,(IY + PANEL.FILES_ALL) @@ -2001,6 +2001,21 @@ View1: CALL ResInvert PUSH IY LD HL,PrevFile LD DE,(RunFLX.FLXexec) + LD A,D + OR E + JR NZ,.L1 +; если плагин не загружен, загружаем + PUSH HL + CALL LOADFLX4RUN + DZ FILENAME.VIEW_FLX + POP HL + JR NC,.L1 +; если плагин не загружен/не найден + POP IY + LD A,FNinternal.PlugNotFound + JP DOSError + +.L1 LD DE,(RunFLX.FLXexec) LD A,(RunFLX.FLXmode) AND FLXMODES.M_ADRORG LD C,WINSP.CPU1 ; окно запуска с адреса 0x4000 @@ -2013,6 +2028,8 @@ View1: CALL ResInvert LD A,(RAMPAGES.FLX) ENDIF CALL Resident + LD HL,0 + LD (RunFLX.FLXexec),HL ; при выходе из плагина глушим адрес загрузки POP IY RET C SETPORT BORDER,0 @@ -2151,6 +2168,21 @@ Edit1: CALL ResInvert PUSH IY LD HL,PrevFile LD DE,(RunFLX.FLXexec) + LD A,D + OR E + JR NZ,.L1 +; если плагин не загружен, загружаем + PUSH HL + CALL LOADFLX4RUN + DZ FILENAME.EDIT_FLX + POP HL + JR NC,.L1 +; если плагин не загружен/не найден + POP IY + LD A,FNinternal.PlugNotFound + JP DOSError + +.L1 LD DE,(RunFLX.FLXexec) LD A,(RunFLX.FLXmode) AND FLXMODES.M_ADRORG LD C,WINSP.CPU1 ; окно запуска с адреса 0x4000 @@ -2163,6 +2195,8 @@ Edit1: CALL ResInvert LD A,(RAMPAGES.FLX) ENDIF CALL Resident + LD HL,0 + LD (RunFLX.FLXexec),HL ; при выходе из плагина глушим адрес загрузки POP IY RET C SETPORT BORDER,0 diff --git a/plugins/fneditor/femain.a80 b/plugins/fneditor/build.a80 similarity index 78% rename from plugins/fneditor/femain.a80 rename to plugins/fneditor/build.a80 index b975033..13d1710 100644 --- a/plugins/fneditor/femain.a80 +++ b/plugins/fneditor/build.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 18.07.2025 savelij +; LAST UPDATE: 26.07.2025 savelij include macros.a80 include fn_const.a80 @@ -12,7 +12,8 @@ include dss_sp.a80 include bios_sp.a80 include mouse_sp.a80 + include errors_sp.a80 - HDR_FLX "-EDIT",,,;FLXMODES.M_ADRORG + HDR_FLX "-EDIT" include feditor.a80 diff --git a/plugins/fneditor/build.bat b/plugins/fneditor/build.bat index 8d12807..5df0239 100644 --- a/plugins/fneditor/build.bat +++ b/plugins/fneditor/build.bat @@ -6,8 +6,8 @@ set path=d:\yad\svn\pentevo\tools\asl\bin\;d:\yad\svn\pentevo\tools\mhmt\;d:\yad call ..\..\setpath_includes set includes=%includes%;..\..\ -asl -U -L -C -x -olist tmp\fneditor.lst -i %includes% femain.a80 || goto error -p2bin femain.p ..\fneditor.flx -r $-$ -k +asl -U -L -C -x -olist tmp\fneditor.lst -i %includes% build.a80 || goto error +p2bin build.p ..\fneditor.flx -r $-$ -k echo ######################## echo # -= End Compile Ok =- # diff --git a/plugins/fneditor/feditor.a80 b/plugins/fneditor/feditor.a80 index 435ec51..1c692da 100644 --- a/plugins/fneditor/feditor.a80 +++ b/plugins/fneditor/feditor.a80 @@ -1,37 +1,35 @@ -; LAST UPDATE: 18.07.2025 savelij +; LAST UPDATE: 29.07.2025 savelij + +ENABLE_CODEPAGE EQU 0 INIT_VAR - SETVAR CursorX ;EQU 0x00 - SETVAR StringX ;EQU 0x01 - SETVAR CursAddX ;EQU 0x02 - SETVAR CursorY ;EQU 0x03 - SETVAR LenString ;EQU 0x04 - SETVAR PrvLenStr ;EQU 0x05 - SETVAR ReadyStr ;EQU 0x06 - SETVAR ReadyFile ;EQU 0x07 + SETVAR CursorX + SETVAR StringX + SETVAR CursAddX + SETVAR CursorY + SETVAR LenString + SETVAR PrvLenStr + SETVAR ReadyStr + SETVAR ReadyFile LineBuffer := WorkBuffer+0x200 TempBuffer := WorkBuffer+0x300 ;[]==========================================================[] - JP FileEditor - - DZ FLEX_VERS.EDITOR - -FileEditor CALL FELoadFile + CALL FELoadFile RET C call ReadEditorIni LD IY,EditData SUB A LD (EditMode),A LD (HEXmode),A - LD (IY+CursorX),A - LD (IY+StringX),A - LD (IY+CursAddX),A - LD (IY+CursorY),A - LD (IY+ReadyStr),A - LD (IY+ReadyFile),A + LD (IY + EDBUF_.CursorX),A + LD (IY + EDBUF_.StringX),A + LD (IY + EDBUF_.CursAddX),A + LD (IY + EDBUF_.CursorY),A + LD (IY + EDBUF_.ReadyStr),A + LD (IY + EDBUF_.ReadyFile),A INC A LD (FECrTimer),A LD HL,0x0000 @@ -43,185 +41,167 @@ EditorBegin CALL InitStatus CALL InitFile CALL PrintPage EditorLoop CALL FEChCursor - LD A,(EditMode) + LD A,(EditMode) ; режим редактирования OR A JP NZ,HEditLoop +; режим редактирования текст TEditLoop LD IX,FEASCIItab CALL JUMPS.TestCoords - SPDSS DSSF.SCANKEY ;Ожидаем нажатия клавиш + SPDSS DSSF.SCANKEY ; Ожидаем нажатия клавиш JR Z,EditorLoop LD A,D - CP 0x44 + CP SC.F10 JP Z,EditorExit - LD A,E ;Е-ASCII код - CP 0x1B ;Esc + LD A,E ; Е-ASCII код + CP 0x1B ; Esc JP Z,EditorExit LD HL,EditorLoop PUSH HL OR A - JP NZ,TInsertSymbol + JP NZ,TInsertSymbol ; какой то печатный символ? LD A,D - CP 0x3B + CP SC.F1 JP Z,FEAbout - CP 0x3C + CP SC.F2 JP Z,SaveFile - CP 0x3E - JP Z,ChEditor ;Просмотр в HEX - CP 0x41 + CP SC.F4 + JP Z,ChEditor ; Просмотр в HEX + CP SC.F7 JP Z,FEPrintFile - CP 0x43 + IF ENABLE_CODEPAGE + CP SC.F8 + JP Z,ChCodePage + ENDIF + CP SC.F9 JP Z,EditorSetup - CP 0x4F + CP SC.XDEL JP Z,TDeleteSymbol - CP 0x54 + CP SC.X4 JP Z,TCursorLeft - CP 0x56 + CP SC.X6 JP Z,TCursorRight - CP 0x58 + CP SC.X8 JP Z,TCursorUp - CP 0x52 + CP SC.X2 JP Z,TCursorDown - CP 0x57 ;Home + CP SC.X7 ; Home JP Z,THomeString - CP 0x51 ;End + CP SC.X1 ; End JP Z,TEndString - CP 0x59 ;PageUp + CP SC.X9 ; PageUp JP Z,FETPageUp - CP 0x53 ;PageDown + CP SC.X3 ; PageDown JP Z,TPageDown LD A,B - AND 0x30 - CP 0x30 + AND KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL + CP KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL RET Z - bit 4,b ;При нажатом Alt + bit KEYBSTAT.B_ALT,B ; При нажатом Alt jr z,.ctrl ld a,d - and 0x7f - CP 0x54 ;Alt+< + and %01111111 + CP SC.X4 ; Alt+< JP Z,THomeString - CP 0x56 ;Alt+> + CP SC.X6 ; Alt+> JP Z,TEndString ret -.ctrl: BIT 5,B ;При нажатом Ctrl +.ctrl: BIT KEYBSTAT.B_CTRL,B ; При нажатом Ctrl RET Z LD A,D - AND 0x7F - CP 0x0E + AND %01111111 + CP SC.BKSP JP Z,TDeleteWord - CP 0x15 ;Ctrl+Y - Delete String + CP SC.Y ; Ctrl+Y - Delete String JP Z,TDeleteString - CP 0x1E ;Ctrl+S + CP SC.S ; Ctrl+S JP Z,SaveFile - CP 0x1F ;Ctrl+D + CP SC.D ; Ctrl+D JP Z,TDoubleString - CP 0x19 ;Ctrl+P + CP SC.P ; Ctrl+P JP Z,FEPrintFile - cp 0x2a ;Ctrl+Z + cp SC.Z ; Ctrl+Z jp z,Undo - CP 0x54 + CP SC.X4 JP Z,TWordLeft - CP 0x56 + CP SC.X6 JP Z,TWordRight - CP 0x58 + CP SC.X8 JP Z,TScrollUp - CP 0x52 + CP SC.X2 JP Z,TScrollDown - CP 0x57 ;Ctrl+Home - JP Z,FETBegFile ;в начало файла - CP 0x51 ;Ctrl+PageEnd - JP Z,FETEndFile ;в конец файла + CP SC.X7 ; Ctrl+Home + JP Z,FETBegFile ; в начало файла + CP SC.X1 ; Ctrl+PageEnd + JP Z,FETEndFile ; в конец файла RET +; режим редактирования HEX HEditLoop LD IX,FEHEXtab CALL JUMPS.TestCoords - SPDSS DSSF.SCANKEY ;Ожидаем нажатия клавиш + SPDSS DSSF.SCANKEY ; Ожидаем нажатия клавиш JP Z,EditorLoop - LD A,D ; - CP 0x44 ;F10 + LD A,D + CP SC.F10 ; F10 JP Z,EditorExit - LD A,E ;Е-ASCII код - CP 0x1B ;Esc + LD A,E ; Е-ASCII код + CP 0x1B ; Esc JP Z,EditorExit LD HL,EditorLoop PUSH HL OR A JP NZ,HPutSymbol LD A,D - CP 0x3B + CP SC.F1 JP Z,FEAbout - CP 0x3C + CP SC.F2 JP Z,SaveFile - CP 0x9E ;Ctrl+S + CP SC.S + 0x80 ; Ctrl+S JP Z,SaveFile - CP 0x3E ;F4 - JP Z,ChEditor ;Просмотр в тексте - CP 0x3F ;F5 - JP Z,FEHGoTo ;Переход на адрес пользователя - CP 0x41 + CP SC.F4 ; F4 + JP Z,ChEditor ; Просмотр в тексте + CP SC.F5 ; F5 + JP Z,FEHGoTo ; Переход на адрес пользователя + CP SC.F7 JP Z,FEPrintFile - CP 0x43 + CP SC.F9 JP Z,EditorSetup - CP 0x54 + CP SC.X4 JP Z,HCursorLeft - CP 0x56 + CP SC.X6 JP Z,HCursorRight - CP 0x57 ;Home + CP SC.X7 ; Home JP Z,HHomeString - CP 0x51 ;End + CP SC.X1 ; End JP Z,HEndString - CP 0x58 ;Стрелка вверх + CP SC.X8 ; Стрелка вверх JP Z,HCursorUp - CP 0x52 ;Стрелка вниз + CP SC.X2 ; Стрелка вниз JP Z,HCursorDown - CP 0x59 ;PageUp + CP SC.X9 ; PageUp JP Z,FEHPageUp - CP 0x53 ;PageDown + CP SC.X3 ; PageDown JP Z,FEHPageDown LD A,B - AND 0x30 - CP 0x30 + AND KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL + CP KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL RET Z - BIT 5,B + BIT KEYBSTAT.B_CTRL,B RET Z LD A,D - AND 0x7F - CP 0x58 + AND %01111111 + CP SC.X8 JP Z,HScrollUp - CP 0x52 + CP SC.X2 JP Z,HScrollDown - CP 0x57 ;Ctrl+PageUp - JP Z,FEHBegFile ;в начало файла - CP 0x51 ;Ctrl+PageDown - JP Z,FEHEndFile ;в конец файла - CP 0x19 ;Ctrl+P + CP SC.X7 ; Ctrl+PageUp + JP Z,FEHBegFile ; в начало файла + CP SC.X1 ; Ctrl+PageDown + JP Z,FEHEndFile ; в конец файла + CP SC.P ; Ctrl+P JP Z,FEPrintFile RET -;[]==========================================================[] -EditingFile DUPL 0x30,0 -EditMode DEFB 0x00 -HEXmode DEFB 0x00 -EditData DEFB 0x00 ;Cursor X - DEFB 0x00 ;String X - DEFB 0x00 ;Cursor add X - DEFB 0x00 ;Cursor Y - DEFB 0x00 ;Len String - DEFB 0x00 ;Previos Len String - DEFB 0x00 ;Ready String - DEFB 0x00 ;Ready File -CurLine DEFW 0x0000 -EquipLines DEFW 0x0000 -LineShift DEFW 0x0000 -FEPageShift DEFW 0x0000 -FETempShift DEFW 0x0000 -FEFileLenght DEFW 0x0000 ;Длина файла (16бит) -FEEmptyLines DEFB 0x00 -FEMemIndef DEFB 0x00 -FEFHandle DEFB 0x00 -FEReadLen -SaveLen DEFW 0x0000 - ;[]==========================================================[] ChEditor LD HL,EditorBegin EX (SP),HL @@ -230,7 +210,7 @@ ChEditor LD HL,EditorBegin LD (EditMode),A JR NZ,HEXEdit ASCIIEdit LD HL,(LineShift) - LD E,(IY+CursorX) + LD E,(IY + EDBUF_.CursorX) SRL E LD D,0x00 ADD HL,DE @@ -240,8 +220,8 @@ ASCIIEdit LD HL,(LineShift) LD (LineShift),HL LD (FEPageShift),HL SUB A - LD (IY+StringX),A - LD (IY+CursorY),A + LD (IY + EDBUF_.StringX),A + LD (IY + EDBUF_.CursorY),A PUSH HL CALL GetString POP DE @@ -249,39 +229,39 @@ ASCIIEdit LD HL,(LineShift) OR A SBC HL,DE LD A,L - CP (IY+LenString) + CP (IY + EDBUF_.LenString) JR C,.L1 - LD A,(IY+LenString) + LD A,(IY + EDBUF_.LenString) .L1 DEC A - LD (IY+StringX),A + LD (IY + EDBUF_.StringX),A JP TCursorRight HEXEdit CALL PutString LD HL,(LineShift) - LD A,(IY+StringX) - CP (IY+LenString) + LD A,(IY + EDBUF_.StringX) + CP (IY + EDBUF_.LenString) JR C,.L1 - LD A,(IY+LenString) + LD A,(IY + EDBUF_.LenString) .L1 LD E,A LD D,0x00 ADD HL,DE LD A,L AND 0x0F ADD A,A - LD (IY+CursorX),A + LD (IY + EDBUF_.CursorX),A LD A,L AND 0xF0 LD L,A LD (LineShift),HL LD (FEPageShift),HL SUB A - LD (IY+CursorY),A + LD (IY + EDBUF_.CursorY),A RET ;[]==========================================================[] EditorExit CALL PutString CALL FEResCursor - LD A,(IY+ReadyFile) + LD A,(IY + EDBUF_.ReadyFile) OR A JP Z,QuitAsk;EditorE MAKEWINDOW WINSUBOBJ.STORE @@ -392,7 +372,7 @@ FEInitScreen CP (HL) JR NZ,.L1 DEC HL - LD A,0x5C + LD A,'\\' CP (HL) INC HL JR Z,.L2 @@ -420,11 +400,14 @@ FEInitScreen LD B,0x08 EXX LD A,0x02 - CALL JUMPS.SetCMOSPrint - RET + JP JUMPS.SetCMOSPrint ;[]==========================================================[] -InitStatus LD A,(EditMode) +InitStatus + IF ENABLE_CODEPAGE + CALL InitCodePage + ENDIF + LD A,(EditMode) OR A JP NZ,InitHEXStatus MAKEWINDOW WINSUBOBJ.WOBIND @@ -442,8 +425,16 @@ InitStatus LD A,(EditMode) W_TEXT 100,245,COLORP.HIGHGRAY,"F2 Save" W_BUTTON 160,242,80,14 W_TEXT 184,245,COLORP.HIGHGRAY,"F4 Hex" + IF ENABLE_CODEPAGE + W_BUTTON 340,242,80,14 + W_TEXT 362,245,COLORP.HIGHGRAY,"F7 Print" + W_BUTTON 420,242,60,14 + W_ADRTEXT 432,245,COLORP.HIGHGRAY,0 +ASCIIenc1 EQU $ - 2 + ELSE W_BUTTON 400,242,80,14 W_TEXT 422,245,COLORP.HIGHGRAY,"F7 Print" + ENDIF W_BUTTON 480,242,80,14 W_TEXT 492,245,COLORP.HIGHGRAY,"F9 Settings" W_BUTTON 560,242,80,14 @@ -466,8 +457,16 @@ InitHEXStatus W_TEXT 182,245,COLORP.HIGHGRAY,"F4 ASCII" W_BUTTON 240,242,80,14 W_TEXT 258,245,COLORP.HIGHGRAY,"F5 Go to" + IF ENABLE_CODEPAGE + W_BUTTON 340,242,80,14 + W_TEXT 362,245,COLORP.HIGHGRAY,"F7 Print" + W_BUTTON 420,242,60,14 + W_ADRTEXT 432,245,COLORP.HIGHGRAY,0 +ASCIIenc2 EQU $ - 2 + ELSE W_BUTTON 400,242,80,14 W_TEXT 422,245,COLORP.HIGHGRAY,"F7 Print" + ENDIF W_BUTTON 480,242,80,14 W_TEXT 492,245,COLORP.HIGHGRAY,"F9 Settings" W_BUTTON 560,242,80,14 @@ -503,17 +502,16 @@ InitAlp PUSH HL LD HL,TBarD LD (BarPgD),HL LD IX,EditVBar - CALL JUMPS.InitScrBar + CALL JUMPS.InitScrollBar LD HL,0x00F0 LD (CScrnX),HL LD IX,EditHBar - CALL JUMPS.InitScrBar + CALL JUMPS.InitScrollBar LD HL,0xFFFF LD (CLine),HL LD H,0x00 LD (CAddX),HL - CALL JUMPS.SetMouse - RET + JP JUMPS.SetMouse InitFileHex LD HL,(FEFileLenght) LD A,L @@ -545,29 +543,29 @@ InitFileHex LD HL,(FEFileLenght) LD HL,HBarD LD (BarPgD),HL LD IX,EditVBar - CALL JUMPS.InitScrBar + CALL JUMPS.InitScrollBar LD HL,0xFFFF LD (CLine),HL RET -EditVBar DEFW 0x0270 ;X позиция скролбара - DEFW 0x0024 ;Y позиция скролбара - DEFW 0x00B8 ;Max длина скролбара - DEFW 0x0000 ;тек.длина скролбара -BarPgU DEFW 0x0000 ;Адрес ячейки BarLeft -BarPgD DEFW 0x0000 ;Адрес ячейки BarRight - DEFW 0x0019 ;Кол-во строк на странице -ELines DEFW 0x0000 ;Общее кол-во строк -CLine DEFW 0x0000 ;Первая строка на странице -EditHBar DEFW 0x0010 ;X позиция скролбара - DEFW 0x00E4 ;Y позиция скролбара - DEFW 0x0250 ;Max длина скролбара - DEFW 0x0000 ;тек.длина скролбара - DEFW TBarL ;Адрес ячейки BarLeft - DEFW TBarR ;Адрес ячейки BarRight - DEFW 0x004E ;Кол-во строк на странице -CScrnX DEFW 0x0000 ;Общее кол-во строк -CAddX DEFW 0x0000 ;Первая строка на странице +EditVBar DW 624 ; X позиция скролбара + DW 36 ; Y позиция скролбара + DW 184 ; Max длина скролбара + DW 0 ; тек.длина скролбара +BarPgU DW 0 ; Адрес ячейки BarLeft +BarPgD DW 0 ; Адрес ячейки BarRight + DW 25 ; Кол-во строк на странице +ELines DW 0 ; Общее кол-во строк +CLine DW 0 ; Первая строка на странице +EditHBar DW 16 ; X позиция скролбара + DW 228 ; Y позиция скролбара + DW 592 ; Max длина скролбара + DW 0 ; тек.длина скролбара + DW TBarL ; Адрес ячейки BarLeft + DW TBarR ; Адрес ячейки BarRight + DW 78 ; Кол-во строк на странице +CScrnX DW 0 ; Общее кол-во строк +CAddX DW 0 ; Первая строка на странице ;[]==========================================================[] PrintPage LD A,(EditMode) @@ -692,11 +690,6 @@ ResCurs SETPORT WINSP.CPU1,,0 RET -FECrTimer DEFB 0x01 -FECurCursor DEFB 0x00 -CursorPos DEFW 0x0000 -FECursBuffer DUPL 8,0 - ;[]==========================================================[] FEAbout CALL FEResCursor MAKEWINDOW WINSUBOBJ.STORE @@ -766,6 +759,46 @@ FEScrlSCRDnUp DI EI RET + IF ENABLE_CODEPAGE +InitCodePage: LD A,0 +CodePage EQU $-1 + LD L,A + ADD A,A ; *2 + ADD A,L ; *3 + ADD A,A ; *6 + ADD A,L ; *7 + LD HL,EncDos + ADD A,L + LD L,A + ADC A,H + SUB L + LD H,A + LD (ASCIIenc1),HL + LD (ASCIIenc2),HL + LD A, (CodePage) + AND A + JR NZ,.next + LD HL,0 +.call: LD (PutLineA2),A + LD (PutLineA2 + 1),HL + LD (InsSymbol),A + LD (InsSymbol + 1),HL + RET + +.next: DEC A + LD HL,Table866 + JR Z,.next1 + LD HL,TableKoi +.next1: LD (DecodeSymbol.table),HL + LD HL,DecodeSymbol + LD A,0xCD + JR .call + +EncDos: DZ "F8 DOS" +EncWin: DZ "F8 WIN" +EncKoi: DZ "F8 KOI" + ENDIF + ;[]==========================================================[] include fedos.a80 include fetext.a80 @@ -774,76 +807,118 @@ FEScrlSCRDnUp DI include fesetup.a80 ;[]==========================================================[] -FEASCIItab: DW 0x0000,0x0270,0x001C,0x00E4,0x00,0x0000, TNewCrPos, 0x0000 - DW 0x0000,0x0050,0x00F2,0x0100,0x01,0x0000, FEAbout, 0x0000 - DW 0x0050,0x00A0,0x00F2,0x0100,0x01,0x0000, SaveFile, 0x0000 - DW 0x00A0,0x00F0,0x00F2,0x0100,0x01,0x0000, ChEditor, 0x0000 - DW 0x0190,0x01E0,0x00F2,0x0100,0x01,0x0000, EditorSetup, 0x0000 - DW 0x01E0,0x0230,0x00F2,0x0100,0x01,0x0000, FEPrintFile, 0x0000 - DW 0x0230,0x0280,0x00F2,0x0100,0x21,0x0000, EditorExit, 0x0000 - DW 0x0270,0x0280,0x001C,0x0024,0x03,0x0000, TCursorUp, 0x0000 - DW 0x0270,0x0280,0x00DC,0x00E4,0x03,0x0000, TCursorDown, 0x0000 +FEASCIItab: DW 0,624, 28,228,%0000000000000000,%0000000000000000,TNewCrPos,0 + DW 0, 80,242,256,%0000000000000001,%0000000000000000,FEAbout,0 ; F1 + DW 80,160,242,256,%0000000000000001,%0000000000000000,SaveFile,0 ; F2 + DW 160,240,242,256,%0000000000000001,%0000000000000000,ChEditor,0 ; F4 + IF ENABLE_CODEPAGE + DW 340,420,242,256,%0000000000000001,%0000000000000000,FEPrintFile,0 ; F7 + DW 420,480,242,256,%0000000000000001,%0000000000000000,ChCodePage,0 ; F8 + ELSE + DW 400,480,242,256,%0000000000000001,%0000000000000000,FEPrintFile,0 + ENDIF + DW 480,560,242,256,%0000000000000001,%0000000000000000,EditorSetup,0 ; F9 + DW 560,640,242,256,%0000000000100001,%0000000000000000,EditorExit,0 ; F10 + DW 624,640, 28, 36,%0000000000000011,%0000000000000000,TCursorUp,0 + DW 624,640,220,228,%0000000000000011,%0000000000000000,TCursorDown,0 TBarU EQU $+6 - DW 0x0270,0x0280,0x001C,0x0000,0x00,0x0000, FETPageUp, 0x0000 + DW 624,640, 28, 0,%0000000000000000,%0000000000000000,FETPageUp,0 TBarD EQU $+4 - DW 0x0270,0x0280,0x0000,0x00E4,0x00,0x0000, TPageDown, 0x0000 - DW 0x0000,0x0010,0x00E4,0x00EC,0x03,0x0000, TCursorLeft, 0x0000 - DW 0x0260,0x0270,0x00E4,0x00EC,0x03,0x0000, TCursorRight, 0x0000 + DW 624,640, 0,228,%0000000000000000,%0000000000000000,TPageDown,0 + DW 0, 16,228,236,%0000000000000011,%0000000000000000,TCursorLeft,0 + DW 608,624,228,236,%0000000000000011,%0000000000000000,TCursorRight,0 TBarL EQU $+2 - DW 0x0010,0x0000,0x00E4,0x00EC,0x00,0x0000, TCursorLeft, 0x0000 -TBarR: DW 0x0000,0x0260,0x00E4,0x00EC,0x00,0x0000, TCursorRight, 0x0000 - DEFW 0x8000 + DW 16, 0,228,236,%0000000000000000,%0000000000000000,TCursorLeft,0 +TBarR: DW 0,608,228,236,%0000000000000000,%0000000000000000,TCursorRight,0 + DW 0x8000 -FEHEXtab: DW 0x0000,0x0050,0x00F2,0x0100,0x01,0x0000, FEAbout, 0x0000 - DW 0x0050,0x00A0,0x00F2,0x0100,0x01,0x0000, SaveFile, 0x0000 - DW 0x00A0,0x00F0,0x00F2,0x0100,0x01,0x0000, ChEditor, 0x0000 - DW 0x00F0,0x0140,0x00F2,0x0100,0x01,0x0000, FEHGoTo, 0x0000 - DW 0x0190,0x01E0,0x00F2,0x0100,0x01,0x0000, EditorSetup, 0x0000 - DW 0x01E0,0x0230,0x00F2,0x0100,0x01,0x0000, FEPrintFile, 0x0000 - DW 0x0230,0x0280,0x00F2,0x0100,0x21,0x0000, EditorExit, 0x0000 +FEHEXtab: DW 0, 80,242,256,%0000000000000001,%0000000000000000,FEAbout,0 ; F1 + DW 80,160,242,256,%0000000000000001,%0000000000000000,SaveFile,0 ; F2 + DW 160,240,242,256,%0000000000000001,%0000000000000000,ChEditor,0 ; F4 + DW 240,320,242,256,%0000000000000001,%0000000000000000,FEHGoTo,0 ; F5 + IF ENABLE_CODEPAGE + DW 340,420,242,256,%0000000000000001,%0000000000000000,FEPrintFile,0 ; F7 + DW 420,480,242,256,%0000000000000001,%0000000000000000,ChCodePage,0 ; F8 + ELSE + DW 400,480,242,256,%0000000000000001,%0000000000000000,FEPrintFile,0 + ENDIF + DW 480,560,242,256,%0000000000000001,%0000000000000000,EditorSetup,0 ; F9 + DW 560,640,242,256,%0000000000100001,%0000000000000000,EditorExit,0 ; F10 - DW 0x0270,0x0280,0x001C,0x0024,0x03,0x0000, HCursorUp, 0x0000 - DW 0x0270,0x0280,0x00DC,0x00E4,0x03,0x0000, HCursorDown, 0x0000 - DW 0x0048,0x01D8,0x001C,0x00E4,0x00,0x0000, HNewHEXPos, 0x0000 - DW 0x01E8,0x0268,0x001C,0x00E4,0x00,0x0000, HNewASCPos, 0x0000 + DW 624,640, 28, 36,%0000000000000011,%0000000000000000,HCursorUp,0 + DW 624,640,220,228,%0000000000000011,%0000000000000000,HCursorDown,0 + DW 72,472, 28,228,%0000000000000000,%0000000000000000,HNewHEXPos,0 + DW 488,616, 28,228,%0000000000000000,%0000000000000000,HNewASCPos,0 HBarU EQU $+6 - DW 0x0270,0x0280,0x001C,0x0000,0x00,0x0000, FEHPageUp, 0x0000 + DW 624,640, 28, 0,%0000000000000000,%0000000000000000,FEHPageUp,0 HBarD EQU $+4 - DW 0x0270,0x0280,0x0000,0x00E4,0x00,0x0000, FEHPageDown, 0x0000 - DEFW 0x8000 + DW 624,640, 0,228,%0000000000000000,%0000000000000000,FEHPageDown,0 + DW 0x8000 -FEAboutTab: DEFW 0x011C,0x0164,0x008A,0x0098,0x21,0x0000, FEAboutExt, 0x0000 - DEFW 0x0000,0x00A0,0x0000,0x0100,0x20,0x0000, FEAboutExt, 0x0000 - DEFW 0x01E0,0x0280,0x0000,0x0100,0x20,0x0000, FEAboutExt, 0x0000 - DEFW 0x0000,0x0280,0x0000,0x0048,0x20,0x0000, FEAboutExt, 0x0000 - DEFW 0x0000,0x0280,0x009D,0x0100,0x20,0x0000, FEAboutExt, 0x0000 - DEFW 0x8000 +FEAboutTab: DW 284,356,138,152,%0000000000100001,%0000000000000000,FEAboutExt,0 + DW 0,160, 0,256,%0000000000100000,%0000000000000000,FEAboutExt,0 + DW 480,640, 0,256,%0000000000100000,%0000000000000000,FEAboutExt,0 + DW 0,640, 0, 72,%0000000000100000,%0000000000000000,FEAboutExt,0 + DW 0,640,157,256,%0000000000100000,%0000000000000000,FEAboutExt,0 + DW 0x8000 -SureTab: DEFW 0x00F0,0x0138,0x007A,0x0088,0x021,0x0000, SureOkey, 0x0000 - DEFW 0x0148,0x0190,0x007A,0x0088,0x021,0x0000, SureExit, 0x0000 - DEFW 0x0000,0x00D0,0x0000,0x0100,0x120,0x0000, EditorLoop, 0x0000 - DEFW 0x01B0,0x0280,0x0000,0x0100,0x120,0x0000, EditorLoop, 0x0000 - DEFW 0x0000,0x0280,0x0000,0x0050,0x120,0x0000, EditorLoop, 0x0000 - DEFW 0x0000,0x0280,0x008C,0x0100,0x120,0x0000, EditorLoop, 0x0000 - DEFW 0x8000 +SureTab: DW 240,312,122,136,%0000000000100001,%0000000000000000,SureOkey,0 + DW 328,400,122,136,%0000000000100001,%0000000000000000,SureExit,0 + DW 0,208, 0,256,%0000000100100000,%0000000000000000,EditorLoop,0 + DW 432,640, 0,256,%0000000100100000,%0000000000000000,EditorLoop,0 + DW 0,640, 0, 80,%0000000100100000,%0000000000000000,EditorLoop,0 + DW 0,640,140,256,%0000000100100000,%0000000000000000,EditorLoop,0 + DW 0x8000 -NewFileTab: DEFW 0x00F0,0x0138,0x0082,0x0090,0x021,0x0000, NewFExitO, 0x0000 - DEFW 0x0148,0x0190,0x0082,0x0090,0x021,0x0000, NewFExitC, 0x0000 - DEFW 0x0000,0x00C0,0x0000,0x0100,0x020,0x0000, NewFExitC, 0x0000 - DEFW 0x01C0,0x0280,0x0000,0x0100,0x020,0x0000, NewFExitC, 0x0000 - DEFW 0x0000,0x0280,0x0000,0x0058,0x020,0x0000, NewFExitC, 0x0000 - DEFW 0x0000,0x0280,0x0094,0x0100,0x020,0x0000, NewFExitC, 0x0000 - DEFW 0x8000 +NewFileTab: DW 240,312,130,144,%0000000000100001,%0000000000000000,NewFExitO,0 + DW 328,400,130,144,%0000000000100001,%0000000000000000,NewFExitC,0 + DW 0,192, 0,256,%0000000000100000,%0000000000000000,NewFExitC,0 + DW 448,640, 0,256,%0000000000100000,%0000000000000000,NewFExitC,0 + DW 0,640, 0, 88,%0000000000100000,%0000000000000000,NewFExitC,0 + DW 0,640,148,256,%0000000000100000,%0000000000000000,NewFExitC,0 + DW 0x8000 -FEQuitTab: DW 0x00F0,0x0138,0x0078,0x0086,0x21,0x0000, SureExit, 0x0000 - DW 0x0148,0x0190,0x0078,0x0086,0x21,0x0000, FEQuitAbort, 0x0000 - DW 0x0000,0x00D0,0x0000,0x0100,0x20,0x0000, FEQuitAbort, 0x0000 - DW 0x01B0,0x0280,0x0000,0x0100,0x20,0x0000, FEQuitAbort, 0x0000 - DW 0x0000,0x0280,0x0000,0x0058,0x20,0x0000, FEQuitAbort, 0x0000 - DW 0x0000,0x0280,0x008A,0x0100,0x20,0x0000, FEQuitAbort, 0x0000 +FEQuitTab: DW 240,312,120,134,%0000000000100001,%0000000000000000,SureExit,0 + DW 328,400,120,134,%0000000000100001,%0000000000000000,FEQuitAbort,0 + DW 0,208, 0,256,%0000000000100000,%0000000000000000,FEQuitAbort,0 + DW 432,640, 0,256,%0000000000100000,%0000000000000000,FEQuitAbort,0 + DW 0,640, 0, 88,%0000000000100000,%0000000000000000,FEQuitAbort,0 + DW 0,640,138,256,%0000000000100000,%0000000000000000,FEQuitAbort,0 DW 0x8000 SettingsFileName: DZ FILENAME.FNEDIT_INI ;[]==========================================================[] +FECrTimer DB 1 + +EDBUF STRUCT +.CursorX DB ? ; Cursor X +.StringX DB ? ; String X +.CursAddX DB ? ; Cursor add X +.CursorY DB ? ; Cursor Y +.LenString DB ? ; Len String +.PrevLenString DB ? ; Previos Len String +.ReadyStr DB ? ; Ready String +.ReadyFile DB ? ; Ready File +EDBUF ENDSTRUCT + +EditData EDBUF + INIT_VAR $ + SETVAR CurLine, WORD + SETVAR EquipLines, WORD + SETVAR LineShift, WORD + SETVAR FEPageShift, WORD + SETVAR FETempShift, WORD + SETVAR FEFileLenght, WORD ; Длина файла (16бит) + SETVAR FEEmptyLines, BYTE + SETVAR FEMemIndef, BYTE + SETVAR FEFHandle, BYTE + SETVAR FEReadLen, 0 + SETVAR SaveLen, WORD + SETVAR EditMode, BYTE + SETVAR HEXmode, BYTE + SETVAR FECurCursor, BYTE + SETVAR CursorPos, WORD + SETVAR FECursBuffer, 8 + SETVAR EditingFile, 0x30 diff --git a/plugins/fneditor/fedos.a80 b/plugins/fneditor/fedos.a80 index ae65e91..34da050 100644 --- a/plugins/fneditor/fedos.a80 +++ b/plugins/fneditor/fedos.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 27.05.2025 savelij +; LAST UPDATE: 29.07.2025 savelij ;[]==========================================================[] FELoadFile CALL JUMPS.SetClock @@ -22,7 +22,7 @@ FELoadFile CALL JUMPS.SetClock LD A,H AND 0xC0 CP 0xC0 - LD A,0x1E + LD A,ERR_DSS.NOT_ENOUGH_MEMORY PUSH AF CALL Z,JUMPS.DOSError ;!!!!!!!!!!!! Нет памяти POP AF @@ -31,7 +31,7 @@ FELoadFile CALL JUMPS.SetClock LD (FEFileLenght),HL LD A,(IX+30) OR (IX+31) - LD A,0x1E + LD A,ERR_DSS.NOT_ENOUGH_MEMORY PUSH AF CALL NZ,JUMPS.DOSError ;!!!!!!!!!!!! Нет памяти POP AF @@ -51,11 +51,11 @@ FELoadFile CALL JUMPS.SetClock AND 0xC0 RLCA RLCA - LD (IX+PROC.MAXL1),A + LD (IX+PROC.MAX_PAGES),A SUB A - LD (IX+PROC.MAXH1),A - LD (IX+PROC.MAXL2),A - LD (IX+PROC.MAXH2),A + LD (IX+PROC.MAX_PAGES + 1),A + LD (IX+PROC.MAX_PAGES + 2),A + LD (IX+PROC.MAX_PAGES + 3),A CALL JUMPS.InitProcess MAKEWINDOW WINSUBOBJ.STORE W_MAIN 160,88,320,48 @@ -320,11 +320,11 @@ SaveFile CALL PutString OR L JR Z,.L1 INC B -.L1 LD (IX+PROC.MAXL1),B +.L1 LD (IX+PROC.MAX_PAGES),B SUB A - LD (IX+PROC.MAXH1),A - LD (IX+PROC.MAXL2),A - LD (IX+PROC.MAXH2),A + LD (IX+PROC.MAX_PAGES + 1),A + LD (IX+PROC.MAX_PAGES + 2),A + LD (IX+PROC.MAX_PAGES + 3),A CALL JUMPS.InitProcess MAKEWINDOW WINSUBOBJ.STORE W_MAIN 160,88,320,48 @@ -448,32 +448,32 @@ SaveAbort POP HL ;[]----------------------------------------------------------[] FENextProcess LD IX,ProcessEdit - LD L,(IX+PROC.CURL1) - LD H,(IX+PROC.CURH1) + LD L,(IX+PROC.CURR_PAGE) + LD H,(IX+PROC.CURR_PAGE + 1) INC HL - LD (IX+PROC.CURL1),L - LD (IX+PROC.CURH1),H + LD (IX+PROC.CURR_PAGE),L + LD (IX+PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.NextPr1 - LD L,(IX+PROC.CURL2) - LD H,(IX+PROC.CURH2) + LD L,(IX+PROC.CURR_PAGE + 2) + LD H,(IX+PROC.CURR_PAGE + 3) INC HL - LD (IX+PROC.CURL2),L - LD (IX+PROC.CURH2),H + LD (IX+PROC.CURR_PAGE + 2),L + LD (IX+PROC.CURR_PAGE + 3),H .NextPr1 CALL JUMPS.PrnProcess RET -ProcessEdit DEFW 0x00B2 - DEFW 0x0075 - DEFW 0x011C - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFB 0x4F +ProcessEdit DW 178 + DW 117 + DW 284 + DW 0 + DW 0 + DW 0 + DW 0 + DW 0 + DW 0 + DB COLORP.BLUE + COLORI.WHITE ;FECorrBigChar CP 0x41 ; RET C diff --git a/plugins/fneditor/fehex.a80 b/plugins/fneditor/fehex.a80 index 9614b07..b4cafe8 100644 --- a/plugins/fneditor/fehex.a80 +++ b/plugins/fneditor/fehex.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 20.03.2025 savelij +; LAST UPDATE: 26.07.2025 savelij ;[]==========================================================[] ;Процедура печати страницы дампа с тек.смещ. от начала файла @@ -265,7 +265,7 @@ PrnHEXinfo LD HL,LineH SBC HL,DE JR Z,TstLinH LD (ELines),DE - CALL JUMPS.InitScrBar + CALL JUMPS.InitScrollBar LD HL,(CurLine) LD (CLine),HL CALL JUMPS.PrnVScrBar diff --git a/plugins/fneditor/feprn.a80 b/plugins/fneditor/feprn.a80 index e38224d..592eef7 100644 --- a/plugins/fneditor/feprn.a80 +++ b/plugins/fneditor/feprn.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 20.03.2025 savelij +; LAST UPDATE: 26.07.2025 savelij ;[]==========================================================[] FEPrintFile CALL FEResCursor @@ -22,10 +22,10 @@ FEPrintFile CALL FEResCursor OR A JR Z,.InitPrn INC HL -.InitPrn LD (IX+PROC.MAXL1),L - LD (IX+PROC.MAXH1),H - LD (IX+PROC.MAXL2),0X00 - LD (IX+PROC.MAXH2),0x00 +.InitPrn LD (IX+PROC.MAX_PAGES),L + LD (IX+PROC.MAX_PAGES + 1),H + LD (IX+PROC.MAX_PAGES + 2),0x00 + LD (IX+PROC.MAX_PAGES + 3),0x00 CALL JUMPS.InitProcess LD A,(EditMode) OR A @@ -278,19 +278,19 @@ FENxtPrnProc LD A,E EXX PUSH DE LD IX,FEProcessPrn - LD L,(IX+PROC.CURL1) - LD H,(IX+PROC.CURH1) + LD L,(IX+PROC.CURR_PAGE) + LD H,(IX+PROC.CURR_PAGE + 1) INC HL - LD (IX+PROC.CURL1),L - LD (IX+PROC.CURH1),H + LD (IX+PROC.CURR_PAGE),L + LD (IX+PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.NxtProc - LD L,(IX+PROC.CURL2) - LD H,(IX+PROC.CURH2) + LD L,(IX+PROC.CURR_PAGE + 2) + LD H,(IX+PROC.CURR_PAGE + 3) INC HL - LD (IX+PROC.CURL2),L - LD (IX+PROC.CURH2),H + LD (IX+PROC.CURR_PAGE + 2),L + LD (IX+PROC.CURR_PAGE + 3),H .NxtProc CALL JUMPS.PrnProcess POP DE EXX diff --git a/plugins/fneditor/fesetup.a80 b/plugins/fneditor/fesetup.a80 index d835197..5588899 100644 --- a/plugins/fneditor/fesetup.a80 +++ b/plugins/fneditor/fesetup.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 16.07.2025 savelij +; LAST UPDATE: 26.07.2025 savelij FECSign: DB "FEC" HomeKeyFlag: DB 0 @@ -30,7 +30,7 @@ ReadEditorIni: ld a,0 PUSH AF LD A,(JUMPS.FNREZ2) SETPORT WINSP.CPU1,,0 - LD HL,ADDR.FlexDIRECTORY + LD HL,BUF_REZ2.FlexDIRECTORY PUSH IY SPDSS DSSF.CHDIR POP IY @@ -246,7 +246,7 @@ FESetupOkey: ld a,(ExitDlgFlag) PUSH AF LD A,(JUMPS.FNREZ2) SETPORT WINSP.CPU1,,0 - LD HL,ADDR.FlexDIRECTORY + LD HL,BUF_REZ2.FlexDIRECTORY SPDSS DSSF.CHDIR EX AF,AF' POP AF diff --git a/plugins/fneditor/fetext.a80 b/plugins/fneditor/fetext.a80 index 4d30f77..0784f82 100644 --- a/plugins/fneditor/fetext.a80 +++ b/plugins/fneditor/fetext.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 20.03.2025 savelij +; LAST UPDATE: 29.07.2025 savelij ;[]==========================================================[] FEPrnASCIIpage LD HL,PrnASCIIinfo @@ -8,9 +8,9 @@ FEPrnASCIIpage LD HL,PrnASCIIinfo LD (FETempShift),HL LD B,0x1C FEPrnASCIIlp PUSH BC - CALL PrnASCIIline ;Выводим строку в буф и на экран + CALL PrnASCIIline ; Выводим строку в буф и на экран POP BC - JR C,FillASCII ;CY-Закончились байты для печати + JR C,FillASCII ; CY-Закончились байты для печати LD A,B ADD A,0x08 LD B,A @@ -21,14 +21,13 @@ FEPrnASCIIlp PUSH BC LD E,(IY+CursorX) LD D,(IY+CursorY) CALL FESetCursor - CALL GetString - RET + JP GetString -;Процедура отчистки нижней области экрана +; Процедура очистки нижней области экрана FillASCII LD A,0xE4 SUB B LD (FEFLenASC),A - JR Z,FEFASCIIe ;Z-нет отчистки + JR Z,FEFASCIIe ; Z-нет отчистки LD A,B LD (FEFPosASC),A MAKEWINDOW WINSUBOBJ.WOBIND @@ -66,9 +65,9 @@ RefrASCIIpage LD HL,PrnASCIIinfo LD (FETempShift),HL JR .L1 -.RfASCII CALL PrnASCIIline ;Выводим строку в буф и на экран +.RfASCII CALL PrnASCIIline ; Выводим строку в буф и на экран .L1 POP BC - RET C ;CY-Закончились байты для печати + RET C ; CY-Закончились байты для печати DEC C LD A,B ADD A,0x08 @@ -78,7 +77,7 @@ RefrASCIIpage LD HL,PrnASCIIinfo RET ;[]----------------------------------------------------------[] -;Процедура печати тек.строки в буфер и на экран +; Процедура печати тек.строки в буфер и на экран PrnASCIIline LD IXH,B LD C,0xF0 LD HL,(FEFileLenght) @@ -98,25 +97,25 @@ PutASCIIln LD HL,TempBuffer GETPORT WINSP.CPU1 PUSH AF LD DE,(FETempShift) - LD A,D ;Выделяем номер страницы + LD A,D ; Выделяем номер страницы AND 0xC0 RLCA RLCA EXX - LD E,A ;DE - Адрес страницы в списке + LD E,A ; DE - Адрес страницы в списке LD D,HIGH (PagesList) - LD A,(DE) ;Тек.страница + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX - RES 7,D ;Вкл.с 0x4000 + RES 7,D ; Вкл.с 0x4000 SET 6,D PutASCIIlnLp BIT 7,D JR Z,PutLnA1 RES 7,D SET 6,D EXX - INC E ;DE - Адрес страницы в списке - LD A,(DE) ;Тек.страница + INC E ; DE - Адрес страницы в списке + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX PutLnA1 LD A,(DE) @@ -127,9 +126,9 @@ PutLnA1 LD A,(DE) JR Z,PutLnA2 RES 7,D SET 6,D - EXX - INC E ;DE - Адрес страницы в списке - LD A,(DE) ;Тек.страница + EXX + INC E ; DE - Адрес страницы в списке + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX PutLnA2 LD A,(DE) @@ -156,8 +155,8 @@ PutLnEA0 BIT 7,D RES 7,D SET 6,D EXX - INC E ;DE - Адрес страницы в списке - LD A,(DE) ;Тек.страница + INC E ; DE - Адрес страницы в списке + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX PutLEA1 LD A,(DE) @@ -169,7 +168,11 @@ PutLEA1 LD A,(DE) PutLnEA1 DJNZ PutLnEA0 JR PutLineA3 -PutLineA2 LD (HL),A +PutLineA2 + IF ENABLE_CODEPAGE + CALL DecodeSymbol + ENDIF + LD (HL),A INC L LD A,L CP C @@ -180,8 +183,8 @@ PutLineA3 BIT 7,D RES 7,D SET 6,D EXX - INC E ;DE - Адрес страницы в списке - LD A,(DE) ;Тек.страница + INC E ; DE - Адрес страницы в списке + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX PutLnA3 LD A,(DE) @@ -285,8 +288,7 @@ PrASCIIex1 CALL FEResCursor CALL JUMPS.PrnTxtLnNormC LD E,(IY+CursorX) LD D,(IY+CursorY) - CALL FESetCursor - RET + JP FESetCursor ;[]==========================================================[] FESearchUp LD B,0xF0 @@ -300,14 +302,14 @@ FESearchUp LD B,0xF0 .SearchUpBeg PUSH HL GETPORT WINSP.CPU1 PUSH AF - LD A,H ;Выделяем номер страницы + LD A,H ; Выделяем номер страницы AND 0xC0 RLCA RLCA LD E,A LD D,HIGH (PagesList) - LD A,(DE) ;Тек.страница - SETPORT WINSP.CPU1,,0 + LD A,(DE) ; Тек.страница + SETPORT WINSP.CPU1,,0 RES 7,H SET 6,H LD C,0x00 @@ -323,7 +325,7 @@ FESearchUp LD B,0xF0 SET 6,H .SrchUp0 LD A,(HL) CP 0x0A - JR NZ,FESrchUp1+1 + JR NZ,FESrchUp1 + 1 LD A,B OR A JR Z,FESrchUpEx @@ -395,13 +397,13 @@ FESearchDown LD B,0xF0 .SearchDnBeg PUSH HL GETPORT WINSP.CPU1 PUSH AF - LD A,H ;Выделяем номер страницы + LD A,H ; Выделяем номер страницы AND 0xC0 RLCA RLCA LD E,A LD D,HIGH (PagesList) - LD A,(DE) ;Тек.страница + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 RES 7,H SET 6,H @@ -485,25 +487,25 @@ GetLine LD HL,LineBuffer JR Z,GetLnE1 GETPORT WINSP.CPU1 PUSH AF - LD A,D ;Выделяем номер страницы + LD A,D ; Выделяем номер страницы AND 0xC0 RLCA RLCA EXX - LD E,A ;DE - Адрес страницы в списке + LD E,A ; DE - Адрес страницы в списке LD D,HIGH (PagesList) - LD A,(DE) ;Тек.страница + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX - RES 7,D ;Вкл.с 0x4000 + RES 7,D ; Вкл.с 0x4000 SET 6,D GetLnLoop BIT 7,D JR Z,GetLn1 RES 7,D SET 6,D EXX - INC E ;DE - Адрес страницы в списке - LD A,(DE) ;Тек.страница + INC E ; DE - Адрес страницы в списке + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX GetLn1 LD A,(DE) @@ -569,25 +571,25 @@ PutStrN SUB A GETPORT WINSP.CPU1 PUSH AF LD DE,(LineShift) - LD A,D ;Выделяем номер страницы + LD A,D ; Выделяем номер страницы AND 0xC0 RLCA RLCA EXX - LD E,A ;DE - Адрес страницы в списке + LD E,A ; DE - Адрес страницы в списке LD D,HIGH (PagesList) - LD A,(DE) ;Тек.страница + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX - RES 7,D ;Вкл.с 0x4000 + RES 7,D ; Вкл.с 0x4000 SET 6,D PutStringLp BIT 7,D JR Z,PutStr3 RES 7,D SET 6,D EXX - INC E ;DE - Адрес страницы в списке - LD A,(DE) ;Тек.страница + INC E ; DE - Адрес страницы в списке + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX PutStr3 LD A,(HL) @@ -754,7 +756,7 @@ PrnASCIIinfo LD HL,LineT LD DE,ColT LD BC,FreeT LD A,0x01 - REPT 0x04 + REPT 4 LD (HL),A INC HL LD (DE),A @@ -811,7 +813,7 @@ PrnASCIIinfo LD HL,LineT SBC HL,DE JR Z,TstLine LD (ELines),DE - CALL JUMPS.InitScrBar + CALL JUMPS.InitScrollBar LD HL,(CurLine) LD (CLine),HL CALL JUMPS.PrnVScrBar @@ -832,8 +834,7 @@ TstAddX LD A,(CAddX) ADD A,(IY+CursAddX) LD (CAddX),A LD IX,EditHBar - CALL JUMPS.PrnHScrBar - RET + JP JUMPS.PrnHScrBar ReadyNo DEFB 0x01,0 ReadyYes DEFB "*",0 @@ -850,7 +851,11 @@ TInsertSymbol CP 0x20 JP Z,Enter CP 0x09 RET NZ -InsSymbol: push af +InsSymbol: + IF ENABLE_CODEPAGE + CALL DecodeSymbol + ENDIF + push af call Insert call TCursorRight pop bc @@ -872,13 +877,13 @@ AutoBrackets EQU $-1 db "(){}[]<>" cp b jr nz,Insert - cp '\"' ; #22 + cp '\"' ret nz jp Insert CanInsertBrackets: - LD A,(IY+LenString) ;InpytSymb - CP 240 ;Max len + LD A,(IY+LenString) ; InpytSymb + CP 240 ; Max len RET Z LD H,HIGH (LineBuffer) LD L,(IY+StringX) @@ -893,13 +898,13 @@ CanInsertBrackets: ret Insert EX AF,AF' - LD A,(IY+LenString) ;InpytSymb - CP 240 ;Max len + LD A,(IY+LenString) ; InpytSymb + CP 240 ; Max len RET Z SUB (IY+StringX) JR C,.NotInsert JR Z,.NotInsert -;Ввод в середину текста +; Ввод в середину текста LD C,A LD B,0x00 LD L,(IY+LenString) @@ -922,10 +927,10 @@ Insert EX AF,AF' ret ;[]----------------------------------------------------------[] -;Подстановка a по списку за call. -;первый байт списка содержит число -;следующих далее пар образец-заменитель. -;Вход: a. Выход: a +; Подстановка a по списку за call. +; первый байт списка содержит число +; следующих далее пар образец-заменитель. +; Вход: a. Выход: a ; BXOД: A,List ; BЫXOД: A Subst: ex (sp),hl @@ -945,11 +950,11 @@ Subst2: inc hl ret ;[]----------------------------------------------------------[] -;DoubleString +; DoubleString TDoubleString: ld l,(iy+LenString) ld a,l and a - adc a,a ;будет превышен буфер в 256 символов + adc a,a ; будет превышен буфер в 256 символов ret c adc a,2 ret c @@ -984,7 +989,7 @@ TDoubleString: ld l,(iy+LenString) jp TCursorDown ;[]----------------------------------------------------------[] -;Enter +; Enter Enter LD A,(IY+LenString) SUB (IY+StringX) jr nc,.less @@ -1080,7 +1085,7 @@ Undo: xor a jp PrnASCIIinfo ;[]----------------------------------------------------------[] -;BackSpace +; BackSpace BackSpace LD A,(IY+StringX) OR A RET Z @@ -1137,8 +1142,7 @@ TDeleteSymbol LD A,(IY+LenString) LD (IY+ReadyFile),A DEC (IY+LenString) CALL PrnASCIIstring - CALL PrnASCIIinfo - RET + JP PrnASCIIinfo AddString CALL PutStr2 LD A,(IY+StringX) @@ -1153,13 +1157,13 @@ AddString CALL PutStr2 ADD HL,DE GETPORT WINSP.CPU1 PUSH AF - LD A,H ;Выделяем номер страницы + LD A,H ; Выделяем номер страницы AND 0xC0 RLCA RLCA LD E,A LD D,HIGH (PagesList) - LD A,(DE) ;Тек.страница + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 RES 7,H SET 6,H @@ -1199,11 +1203,10 @@ AddStr2 POP AF LD HL,(EquipLines) DEC HL LD (EquipLines),HL - CALL FEPrnASCIIpage - RET + JP FEPrnASCIIpage ;[]----------------------------------------------------------[] -;Delete word +; Delete word TDeleteWord LD A,(IY+StringX) OR A RET Z @@ -1287,7 +1290,7 @@ TDeleteWord LD A,(IY+StringX) JP TCursorLeft ;[]----------------------------------------------------------[] -;Курсор влево на одно место +; Курсор влево на одно место TCursorLeft LD A,(IY+StringX) OR A RET Z @@ -1341,8 +1344,9 @@ CursLf6 DEC HL DEC (IY+LenString) DJNZ CursLf6 RET + ;[]----------------------------------------------------------[] -;Курсор вправо на одно место +; Курсор вправо на одно место TCursorRight LD A,(IY+CursorX) ADD A,(IY+CursAddX) CP 240 @@ -1393,8 +1397,7 @@ CursRg6 CALL FEResCursor LD E,(IY+CursorX) LD D,(IY+CursorY) CALL FESetCursor - CALL PrnASCIIinfo - RET + JP PrnASCIIinfo ;[]----------------------------------------------------------[] ;Word left @@ -1435,6 +1438,7 @@ TWordLeft LD A,(IY+StringX) .skip LD (IY+StringX),C INC (IY+StringX) JP TCursorLeft + ;[]----------------------------------------------------------[] ;Word right TWordRight LD A,(IY+LenString) @@ -1702,8 +1706,7 @@ CursEx5 LD (IY+CursorX),A LD E,(IY+CursorX) LD D,(IY+CursorY) CALL FESetCursor - CALL PrnASCIIinfo - RET + JP PrnASCIIinfo ;[]----------------------------------------------------------[] FETPageUp CALL PutString @@ -1801,8 +1804,8 @@ PagePr4 LD A,C JR PagePr4 PagePr5 LD (IY+CursorX),A - CALL FEPrnASCIIpage - RET + JP FEPrnASCIIpage + ;[]----------------------------------------------------------[] FETBegFile CALL PutString LD HL,(LineShift) @@ -1942,5 +1945,68 @@ NewPos6 LD A,C LD D,(IY+CursorY) CALL FESetCursor CALL PrnASCIIinfo - CALL JUMPS.ResFire - RET + JP JUMPS.ResFire + + IF ENABLE_CODEPAGE +; перекдючение кодировки +ChCodePage: LD HL,EditorBegin + EX (SP),HL + LD A,(CodePage) + INC A + CP 3 + JR C,.L1 + XOR A +.L1 LD (CodePage),A + RET + +; преобразование символа в зависимости от выбранной кодировки +DecodeSymbol: CP 0x80 + RET C + PUSH HL + SUB 0x80 + LD HL,Table866 +.table EQU $-2 + ADD A,L + LD L,A + ADC A,H + SUB L + LD H,A + LD A,(HL) + POP HL + RET + +; CP866 +Table866: db 0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8 + db 0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F + db 0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D + db 0x3F,0x54,0x3F,0x3E,0x3F,0x3F,0x3F,0x3F + db 0xFF,0xF6,0xF7,0x3F,0xFD,0x3F,0xB3,0x15 + db 0xF0,0x63,0xF2,0x3C,0xBF,0x2D,0x52,0xF4 + db 0xF8,0x2B,0x49,0x69,0x3F,0xE7,0x14,0xFA + db 0xF1,0xFC,0xF3,0x3E,0x3F,0x3F,0x3F,0xF5 + db 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87 + db 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F + db 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97 + db 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F + db 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7 + db 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF + db 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7 + db 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF +; KOI8-R +TableKoi: db 0xC4,0xB3,0xDA,0xBF,0xC0,0xD9,0xC3,0xB4 + db 0xC2,0xC1,0xC5,0xDF,0xDC,0xDB,0xDD,0xDE + db 0xB0,0xB1,0xB2,0xF4,0xFE,0xF9,0xFB,0xF7 + db 0xF3,0xF2,0xFF,0xF5,0xF8,0xFD,0xFA,0xF6 + db 0xCD,0xBA,0xD5,0xF1,0xD6,0xC9,0xB8,0xB7 + db 0xBB,0xD4,0xD3,0xC8,0xBE,0xBD,0xBC,0xC6 + db 0xC7,0xCC,0xB5,0xF0,0xB6,0xB9,0xD1,0xD2 + db 0xCB,0xCF,0xD0,0xCA,0xD8,0xD7,0xCE,0xFC + db 0xEE,0xA0,0xA1,0xE6,0xA4,0xA5,0xE4,0xA3 + db 0xE5,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE + db 0xAF,0xEF,0xE0,0xE1,0xE2,0xE3,0xA6,0xA2 + db 0xEC,0xEB,0xA7,0xE8,0xED,0xE9,0xE7,0xEA + db 0x9E,0x80,0x81,0x96,0x84,0x85,0x94,0x83 + db 0x95,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E + db 0x8F,0x9F,0x90,0x91,0x92,0x93,0x86,0x82 + db 0x9C,0x9B,0x87,0x98,0x9D,0x99,0x97,0x9A + ENDIF diff --git a/plugins/fnviewer/fvmain.a80 b/plugins/fnviewer/build.a80 similarity index 80% rename from plugins/fnviewer/fvmain.a80 rename to plugins/fnviewer/build.a80 index 8536e66..f072daf 100644 --- a/plugins/fnviewer/fvmain.a80 +++ b/plugins/fnviewer/build.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 18.07.2025 savelij +; LAST UPDATE: 26.07.2025 savelij include macros.a80 @@ -14,7 +14,8 @@ include mouse_sp.a80 include fat_dir_sp.a80 include macros_sp.a80 + include errors_sp.a80 - HDR_FLX "-VIEW",,,;FLXMODES.M_ADRORG + HDR_FLX "-VIEW" include fviewer.a80 diff --git a/plugins/fnviewer/build.bat b/plugins/fnviewer/build.bat index 82de503..675b0ff 100644 --- a/plugins/fnviewer/build.bat +++ b/plugins/fnviewer/build.bat @@ -6,8 +6,8 @@ set path=d:\yad\svn\pentevo\tools\asl\bin\;d:\yad\svn\pentevo\tools\mhmt\ call ..\..\setpath_includes set includes=%includes%;..\..\ -asl -U -L -C -x -olist tmp\fviewer.lst -i %includes% fvmain.a80 || goto error -p2bin fvmain.p ..\fnviewer.flx -r $-$ -k +asl -U -L -C -x -olist tmp\fviewer.lst -i %includes% build.a80 || goto error +p2bin build.p ..\fnviewer.flx -r $-$ -k echo ######################## echo # -= End Compile Ok =- # diff --git a/plugins/fnviewer/fvhex.a80 b/plugins/fnviewer/fvhex.a80 index f6ed6a8..2ada502 100644 --- a/plugins/fnviewer/fvhex.a80 +++ b/plugins/fnviewer/fvhex.a80 @@ -1,11 +1,11 @@ -; LAST UPDATE: 20.03.2025 savelij +; LAST UPDATE: 28.07.2025 savelij ;-------------------------------------------------------------- -;Процедура печати страницы дампа с тек.смещ. от начала файла -;На вход: +; Процедура печати страницы дампа с тек.смещ. от начала файла +; На вход: ; None -;На выход: +; На выход: ; None PrnHEXpage LD HL,PrintVProc PUSH HL @@ -14,7 +14,7 @@ PrnHEXpage LD HL,PrintVProc AND 0xF0 LD L,A LD (FileShift),HL - LD (TempShift),HL ;Запоминаем тек.смещение + LD (TempShift),HL ; Запоминаем тек.смещение LD HL,(FileShift+2) LD (TempShift+2),HL LD HL,LineBuffer @@ -22,13 +22,13 @@ PrnHEXpage LD HL,PrintVProc .L1 LD (HL),C INC L DJNZ .L1 - LD B,0x1C ;Изнач.позиция печати + LD B,0x1C ; Изнач.позиция печати PrnHEXl PUSH BC - CALL PutHLine ;Выводим строку в буфер и на экран + CALL PutHLine ; Выводим строку в буфер и на экран POP BC - JR C,FillDwnHex ;CY-Закончились байты для печати + JR C,FillDwnHex ; CY-Закончились байты для печати LD HL,(TempShift) - LD DE,0x0010 ;Адрес дампа+16 + LD DE,0x0010 ; Адрес дампа+16 ADD HL,DE LD (TempShift),HL LD HL,(TempShift+2) @@ -42,10 +42,10 @@ PrnHEXl PUSH BC JR NZ,PrnHEXl RET -;Процедура отчистки нижней области экрана +; Процедура отчистки нижней области экрана FillDwnHex LD A,B CP 0xE4 - RET Z ;Z-нет отчистки + RET Z ; Z-нет отчистки LD (FPosHex),A LD A,0xE4 SUB B @@ -57,7 +57,7 @@ FLenHex EQU $ - 3 W_END RET -;Процедура печати тек.строки в буфер и на экран +; Процедура печати тек.строки в буфер и на экран PutHLine LD IXL,0x00 LD IXH,B LD HL,(FileLenght) @@ -85,31 +85,33 @@ PutHLn GETPORT WINSP.CPU1 PUSH AF CALL InitFPages - LD HL,LineBuffer+1 ;буфер строки + LD HL,LineBuffer+1 ; буфер строки EXX - LD HL,LineBuffer+0x3F ;место для ASCII кодов + LD HL,LineBuffer+0x3F ; место для ASCII кодов EXX - LD A,(TempShift+3) ;Кладем смещение - CALL PutHexNumb ;от начала фаила +; 32-х битное смещение + LD A,(TempShift+3) ; Кладем смещение + CALL PutHexNumb ; от начала фаила LD A,(TempShift+2) CALL PutHexNumb LD A,(TempShift+1) CALL PutHexNumb LD A,(TempShift) CALL PutHexNumb - LD (HL),":" + LD (HL),':' INC L INC L PutHLoop CALL TestFPages LD A,(DE) INC DE - EXX - LD (HL),A + EXX +DECODE4HEX CALL DecodeSymbol + LD (HL),A ; символ для отображения INC L EXX - CALL PutHexNumb ;Процедура конверта + CALL PutHexNumb ; Процедура конверта INC L - INC IXL ;Увелич.кол-во введенных байтов + INC IXL ; Увелич.кол-во введенных байтов LD A,IXL CP 0x04 JR Z,.PtHNx1 @@ -121,9 +123,9 @@ PutHLoop CALL TestFPages .L1 DJNZ PutHLoop POP AF SETPORT WINSP.CPU1,,0 -;Процедура очистки закончившихся байтов -FillHex LD A,0x10 ;Макс.байтов - SUB IXL ;Тек.кол-во байтов +; Процедура очистки закончившихся байтов +FillHex LD A,0x10 ; Макс.байтов + SUB IXL ; Тек.кол-во байтов JR Z,.FillE2 LD B,A LD C,0x20 @@ -137,7 +139,7 @@ FillHex LD A,0x10 ; INC L EXX INC IXL - LD A,IXL ;В центре 2 пробела + LD A,IXL ; В центре 2 пробела CP 0x04 JR Z,.FlHNx1 CP 0x08 @@ -153,28 +155,22 @@ FillHex LD A,0x10 ; LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC OR A - RET ;CY-была последняя строка + RET ; CY-была последняя строка -;Процедура преобразования 8битовых чисел в шестнадц. текст -;На вход: +; Процедура преобразования 8битовых чисел в шестнадц. текст +; На вход: ; HL - адрес буфера ; А - байт -;На выход: +; На выход: ; буфер с текст.числом PutHexNumb PUSH AF RRCA RRCA RRCA RRCA - AND 0x0F - ADD A,0x90 - DAA - ADC A,0x40 - DAA - LD (HL),A - INC L + CALL .L1 POP AF - AND 0x0F +.L1 AND 0x0F ADD A,0x90 DAA ADC A,0x40 @@ -184,8 +180,8 @@ PutHexNumb PUSH AF RET ;-------------------------------------------------------------- -;Процедуры обработки View -;На строку вверх +; Процедуры обработки View +; На строку вверх HLineUpMs CALL FVHLineUp RET C LD B,0x0A @@ -205,17 +201,17 @@ HUpMs2 CALL FVHLineUp FVHLineUp LD HL,(FileShift) LD DE,(FileShift+2) - LD A,H ;Проверяем на начало файла + LD A,H ; Проверяем на начало файла OR D OR L OR E SCF - RET Z ;Z-начало файла + RET Z ; Z-начало файла LD BC,0x0010 OR A SBC HL,BC - LD (FileShift),HL ;FileShift-16байт(предид.строка) - LD (TempShift),HL ;Запоминаем тек.смещение + LD (FileShift),HL ; FileShift-16байт(предид.строка) + LD (TempShift),HL ; Запоминаем тек.смещение LD C,B EX DE,HL SBC HL,BC @@ -223,12 +219,12 @@ FVHLineUp LD HL,(FileShift) LD (TempShift+2),HL CALL ScrollSCRdown LD B,0x1C - CALL PutHLine ;Создаем и печатаем строку + CALL PutHLine ; Создаем и печатаем строку CALL PrintVProc OR A RET -;На строку вниз +; На строку вниз HLineDwnMs CALL HLineDwn RET C LD B,0x0A @@ -250,14 +246,14 @@ HLineDwn LD HL,(FileShift) LD BC,(FileShift+2) LD DE,0x0190 ADD HL,DE - LD (TempShift),HL ;Запоминаем тек.смещение - JR NC,.L1 ;Прибавляем к смещению страницу - INC BC ;байтов (480б) + LD (TempShift),HL ; Запоминаем тек.смещение + JR NC,.L1 ; Прибавляем к смещению страницу + INC BC ; байтов (480б) .L1 LD (TempShift+2),BC EX DE,HL LD HL,(FileLenght) OR A - SBC HL,DE ;Проверяем на конец файла + SBC HL,DE ; Проверяем на конец файла EX DE,HL LD HL,(FileLenght+2) SBC HL,BC @@ -266,7 +262,7 @@ HLineDwn LD HL,(FileShift) LD A,D OR E SCF - RET Z ;Z - конец + RET Z ; Z - конец .L2 LD HL,(FileShift) LD DE,(FileShift+2) LD BC,0x0010 @@ -277,12 +273,12 @@ HLineDwn LD HL,(FileShift) LD (FileShift+2),DE CALL ScrollSCRup LD B,0xDC - CALL PutHLine ;Создаем и печатаем строку + CALL PutHLine ; Создаем и печатаем строку CALL PrintVProc OR A RET -;На страницу вверх +; На страницу вверх HPageUpMs CALL FVHPageUp RET C LD B,0x0A @@ -302,30 +298,30 @@ HUpMs2p CALL FVHPageUp FVHPageUp LD HL,(FileShift) LD BC,(FileShift+2) - LD A,H ;Проверяем на начало файла + LD A,H ; Проверяем на начало файла OR B OR L OR C SCF RET Z - LD DE,0x0190 ;Отнимаем от тек.смещ. страницу байтов + LD DE,0x0190 ; Отнимаем от тек.смещ. страницу байтов OR A SBC HL,DE JR NC,.HPgUp1 LD A,B OR C - DEC BC ;Проверяем,что не вывалились за - JR NZ,.HPgUp1 ;начало файла Z - вывалились + DEC BC ; Проверяем,что не вывалились за + JR NZ,.HPgUp1 ; начало файла Z - вывалились INC BC - LD L,C ;Тогда смещение = 0 + LD L,C ; Тогда смещение = 0 LD H,B .HPgUp1 LD (FileShift),HL LD (FileShift+2),BC - CALL PrnHEXpage ;Печатаем страницу + CALL PrnHEXpage ; Печатаем страницу OR A RET -;На страницу вниз +; На страницу вниз HPageDwnMs CALL HPageDwn RET C LD B,0x0A @@ -345,50 +341,49 @@ HDnMs2p CALL HPageDwn HPageDwn LD HL,(FileShift) LD BC,(FileShift+2) - LD DE,0x0190 ;Плюсуем к тек.смещ. - ADD HL,DE ;страницу байтов + LD DE,0x0190 ; Плюсуем к тек.смещ. + ADD HL,DE ; страницу байтов PUSH HL JR NC,.L1 INC BC .L1 PUSH BC EX DE,HL - LD HL,(FileLenght) ;Проверяем,что страница - OR A ;последняя + LD HL,(FileLenght) ; Проверяем,что страница + OR A ; последняя SBC HL,DE EX DE,HL LD HL,(FileLenght+2) SBC HL,BC POP BC POP HL - RET C ;С - нет + RET C ; С - нет JR NZ,.L2 LD A,D OR E SCF - RET Z ;Z - нет + RET Z ; Z - нет .L2 LD (FileShift),HL LD (FileShift+2),BC - CALL PrnHEXpage ;Печатаем страницу + CALL PrnHEXpage ; Печатаем страницу OR A RET -;В начало файла +; В начало файла HBegFile LD HL,JUMPS.ResFire PUSH HL LD HL,(FileShift) LD BC,(FileShift+2) - LD A,H ;Проверяем на начало файла + LD A,H ; Проверяем на начало файла OR B OR L OR C - RET Z ;Z - Начало - LD HL,0x0000 ;Смещение = 0000 + RET Z ; Z - Начало + LD HL,0x0000 ; Смещение = 0000 LD (FileShift),HL LD (FileShift+2),HL - CALL PrnHEXpage ;Печатаем страницу - RET + JP PrnHEXpage ; Печатаем страницу -;В конец файла +; В конец файла HEndFile LD HL,JUMPS.ResFire PUSH HL LD HL,(FileShift) @@ -398,8 +393,8 @@ HEndFile LD HL,JUMPS.ResFire JR NC,.L1 INC BC .L1 EX DE,HL - LD HL,(FileLenght) ;Проверяем,что мы на последней - PUSH HL ;странице + LD HL,(FileLenght) ; Проверяем,что мы на последней + PUSH HL ; странице OR A SBC HL,DE EX DE,HL @@ -408,17 +403,17 @@ HEndFile LD HL,JUMPS.ResFire SBC HL,BC POP BC POP HL - RET C ;С - в конце + RET C ; С - в конце JR NZ,.L2 LD A,D OR E - RET Z ;Z - в конце + RET Z ; Z - в конце .L2 LD DE,0x0190 OR A - SBC HL,DE ;Просчитываем смещение последней страницы + SBC HL,DE ; Просчитываем смещение последней страницы JR NC,.L3 DEC BC -.L3 LD A,L ;Смещение кратно 16 +.L3 LD A,L ; Смещение кратно 16 AND 0x0F JR Z,.HEnd1 LD A,L @@ -430,75 +425,74 @@ HEndFile LD HL,JUMPS.ResFire INC BC .HEnd1 LD (FileShift),HL LD (FileShift+2),BC - CALL PrnHEXpage ;Печатаем страницу - RET + JP PrnHEXpage ; Печатаем страницу ;-------------------------------------------------------------- -;Процедура ввода нового указателя смещения в файле +; Процедура ввода нового указателя смещения в файле HGoTo LD HL,(FileLenght) LD DE,(FileLenght+2) - LD A,H ;Проверяем,что длина - OR D ;файла больше 16 байт + LD A,H ; Проверяем,что длина + OR D ; файла больше 16 байт OR E JR NZ,HGoToOk LD A,L CP 0x11 - RET C ;меньше 16байт -HGoToOk LD HL,NewShift ;Буфер для ввода нового указ. + RET C ; меньше 16байт +HGoToOk LD HL,NewShift ; Буфер для ввода нового указ. SUB A - LD (CursPos+1),A ;Позиция ввода в буфере + LD (CursPos+1),A ; Позиция ввода в буфере INC A LD (BuffFlg),A LD A,(FileShift+3) - CALL PutHexNumb ;Заносим в буфер текущее смещ. - LD A,(FileShift+2) ;в текстовом виде + CALL PutHexNumb ; Заносим в буфер текущее смещ. + LD A,(FileShift+2) ; в текстовом виде CALL PutHexNumb LD A,(FileShift+1) CALL PutHexNumb LD A,(FileShift) CALL PutHexNumb -;Выводим на экран буфер и -HGoToRet CALL PrintHGT ;печатаем курсор -HGoToLp HALT ;Ожидаем прерывание - CALL ChangeCurs ;проверям на смену курсора +; Выводим на экран буфер и +HGoToRet CALL PrintHGT ; печатаем курсор +HGoToLp HALT ; Ожидаем прерывание + CALL ChangeCurs ; проверям на смену курсора SPMOUSE MOUSEF.READ_STATE BIT 0,A JP NZ,HGTescape - SPDSS DSSF.SCANKEY ;Ожидаем нажатия клавиши - JR Z,HGoToLp ;Z - не нажата + SPDSS DSSF.SCANKEY ; Ожидаем нажатия клавиши + JR Z,HGoToLp ; Z - не нажата LD A,B AND 0x3F JR NZ,HGoToLp LD A,E OR A - JR Z,HGoToSys ;A=0 сист.клавиша + JR Z,HGoToSys ; A=0 сист.клавиша CP 0x0D - JP Z,HGTenter ;нажат Enter + JP Z,HGTenter ; нажат Enter CP 0x08 - JR Z,HGTdelete ;нажат BackSpace + JR Z,HGTdelete ; нажат BackSpace CP 0x1B - JP Z,HGTescape ;нажат Esc + JP Z,HGTescape ; нажат Esc CP 0x20 - JR C,HGoToLp ;код<0x20 нам не подходит - LD C,A ;сохр. ASCII код + JR C,HGoToLp ; код<0x20 нам не подходит + LD C,A ; сохр. ASCII код LD A,0x00 BuffFlg EQU $-1 OR A CALL NZ,ClearBuff -CursPos LD A,0x00 ;тек.позиция печати в буфере - LD B,A ;сохр.тек.поз. - LD HL,NewShift ;Смещ.от начала буфера +CursPos LD A,0x00 ; тек.позиция печати в буфере + LD B,A ; сохр.тек.поз. + LD HL,NewShift ; Смещ.от начала буфера ADD A,L LD L,A JR NC,.L1 INC H -.L1 LD (HL),C ;Заносим код в буфер - LD A,B ;тек.поз. - CP 0x07 ;Позиция в буфере (7-последняя) - JR Z,HGoToRet ;печатаем строку и курсор - INC A ;след.позиция +.L1 LD (HL),C ; Заносим код в буфер + LD A,B ; тек.поз. + CP 0x07 ; Позиция в буфере (7-последняя) + JR Z,HGoToRet ; печатаем строку и курсор + INC A ; след.позиция LD (CursPos+1),A - JR HGoToRet ;печатаем строку и курсор + JR HGoToRet ; печатаем строку и курсор ClearBuff LD HL,NewShift LD B,0x08 @@ -510,56 +504,56 @@ ClearBuff LD HL,NewShift LD (BuffFlg),A RET -;Забой +; Забой HGTdelete SUB A LD (BuffFlg),A - LD A,(CursPos+1) ;Тек.позиция в буфере + LD A,(CursPos+1) ; Тек.позиция в буфере OR A - JR Z,HGoToLp ;0 - выходим + JR Z,HGoToLp ; 0 - выходим DEC A - LD (CursPos+1),A ;предид.позиция + LD (CursPos+1),A ; предид.позиция LD HL,NewShift - ADD A,L ;смещ.в буфере + ADD A,L ; смещ.в буфере LD L,A JR NC,.L1 INC H -.L1 LD (HL)," " ;Забиваем пробелом +.L1 LD (HL)," " ; Забиваем пробелом JR HGoToRet -;системная клавиша +; системная клавиша HGoToSys LD A,D - CP 0x54 ;<- + CP 0x54 ; <- JR Z,HGTleft - CP 0x56 ;-> + CP 0x56 ; -> JR Z,HGTright JR HGoToLp -;Курсор влево +; Курсор влево HGTleft SUB A LD (BuffFlg),A - LD A,(CursPos+1) ;Тек.позиция в буфере + LD A,(CursPos+1) ; Тек.позиция в буфере OR A - JP Z,HGoToLp ;0 - выходим + JP Z,HGoToLp ; 0 - выходим DEC A - LD (CursPos+1),A ;Уменьш.поз. + LD (CursPos+1),A ; Уменьш.поз. JP HGoToRet HGTright SUB A LD (BuffFlg),A - LD A,(CursPos+1) ;Тек.позиция в буфере + LD A,(CursPos+1) ; Тек.позиция в буфере CP 0x07 - JP Z,HGoToLp ;7 - последняя + JP Z,HGoToLp ; 7 - последняя INC A - LD (CursPos+1),A ;Увелич.поз. + LD (CursPos+1),A ; Увелич.поз. JP HGoToRet -;Процедура вывода строки и курсора +; Процедура вывода строки и курсора PrintHGT LD HL,NewShift LD DE,0x0008 LD BC,0x081C LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC - LD A,(CursPos+1) ;Позиция вывода курсора + LD A,(CursPos+1) ; Позиция вывода курсора INC A LD L,A LD H,0x00 @@ -572,76 +566,76 @@ PrintHGT LD HL,NewShift LD BC,0x011C LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC - LD A,0x01 ;Номер выведенного курсора + LD A,0x01 ; Номер выведенного курсора LD (CurCurs),A - LD A,0x06 ;Ожидание для смены курсора + LD A,0x06 ; Ожидание для смены курсора LD (CurWait),A RET -;Процедура смены курсора -ChangeCurs LD A,0x00 ;Задержка между сменой курсора +; Процедура смены курсора +ChangeCurs LD A,0x00 ; Задержка между сменой курсора CurWait EQU $-1 DEC A LD (CurWait),A - RET NZ ;еще не время + RET NZ ; еще не время LD A,(CursPos+1) INC A LD L,A - LD H,0x00 ;Тек.знакоместо + LD H,0x00 ; Тек.знакоместо ADD HL,HL ADD HL,HL ADD HL,HL EX DE,HL - LD HL,NewShift ;Смещ.в буфере + LD HL,NewShift ; Смещ.в буфере LD A,(CursPos+1) ADD A,L LD L,A JR NC,.L2 INC H -.L2 LD A,0x00 ;Номер текущего курсора +.L2 LD A,0x00 ; Номер текущего курсора CurCurs EQU $-1 - XOR 0x01 ;Меняем курсор + XOR 0x01 ; Меняем курсор LD (CurCurs),A LD A,(HL) - JR Z,.L1 ;Печатаем + JR Z,.L1 ; Печатаем LD A,0xAB;"<" .L1 LD HL,TCursor LD (HL),A LD BC,0x011C LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC - LD A,0x0C ;Ожидание для смены курсора + LD A,0x0C ; Ожидание для смены курсора LD (CurWait),A RET TCursor DEFB " " -;Клавиша ENTER -HGTenter SUB A ;При ошибке вернемся с курсором - LD (CursPos+1),A ;в нулевой позиции - LD BC,NewShift ;Буфер строки - CALL GetHexNum32 ;Переводим текст в 32бит число - JP C,HGoToRet ;CY - синтакс.ошибка +; Клавиша ENTER +HGTenter SUB A ; При ошибке вернемся с курсором + LD (CursPos+1),A ; в нулевой позиции + LD BC,NewShift ; Буфер строки + CALL GetHexNum32 ; Переводим текст в 32бит число + JP C,HGoToRet ; CY - синтакс.ошибка LD C,E LD B,D - LD A,L ;Адрес кратный 16 + LD A,L ; Адрес кратный 16 AND 0xF0 LD L,A - EX DE,HL ;Смещ.в BC+DE - LD HL,(FileLenght) ;Проверяем,что смещение в - OR A ;пределах файла + EX DE,HL ; Смещ.в BC+DE + LD HL,(FileLenght) ; Проверяем,что смещение в + OR A ; пределах файла SBC HL,DE LD HL,(FileLenght+2) SBC HL,BC - JR C,HGTent ;CY-за пределами - JR NZ,HGTent1 ;NZ-в пределах + JR C,HGTent ; CY-за пределами + JR NZ,HGTent1 ; NZ-в пределах LD A,D OR E - JR NZ,HGTent1 ;NZ-в пределах + JR NZ,HGTent1 ; NZ-в пределах HGTent LD HL,(FileLenght) LD BC,0x0010 OR A - SBC HL,BC ;смещ.=последняя строка файла 16 байт + SBC HL,BC ; смещ.=последняя строка файла 16 байт EX DE,HL LD HL,(FileLenght+2) JR NC,.L1 @@ -650,13 +644,12 @@ HGTent LD HL,(FileLenght) LD B,H HGTent1 LD (FileShift),DE LD (FileShift+2),BC - CALL PrnHEXpage ;Печатаем страницу - RET + JP PrnHEXpage ; Печатаем страницу -;Нажат Escape -HGTescape LD HL,NewShift ;Буфер строки +; Нажат Escape +HGTescape LD HL,NewShift ; Буфер строки PUSH HL - LD A,(FileShift+3) ;Заносим тек.смещение + LD A,(FileShift+3) ; Заносим тек.смещение CALL PutHexNumb LD A,(FileShift+2) CALL PutHexNumb @@ -669,16 +662,15 @@ HGTescape LD HL,NewShift ; LD BC,0x081C LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC - CALL JUMPS.ResFire - RET ;Выходим + JP JUMPS.ResFire ; Выходим NewShift DEFB " ",0 -;Процедура конвертирования 32битового шестн.текстового числа -;На вход: +; Процедура конвертирования 32битового шестн.текстового числа +; На вход: ; BC - Адрес буфера с текстом (0-конец буфера) -;На выход: -; DE+HL - Число 32бит +; На выход: +; DEHL - Число 32бит ; CY - синтаксическая ошибка GetHexNum32 LD HL,0x0000 LD E,L diff --git a/plugins/fnviewer/fviewer.a80 b/plugins/fnviewer/fviewer.a80 index bd94ed7..3c70714 100644 --- a/plugins/fnviewer/fviewer.a80 +++ b/plugins/fnviewer/fviewer.a80 @@ -1,20 +1,17 @@ -; LAST UPDATE: 31.05.2025 savelij +; LAST UPDATE: 28.07.2025 savelij LineBuffer := WorkBuffer+0x300 ;[]==========================================================[] - JP FileViewer - - DZ FLEX_VERS.VIEWER - -FileViewer CALL LoadFile + CALL LoadFile RET C LD IX,ViewingFile SUB A LD (ViewMode),A LD (ASCIIaddX),A - LD HL,0x0000 + LD H,A + LD L,A LD (FileShift),HL LD (FileShift+2),HL LD L,(IX+28) @@ -27,109 +24,113 @@ FileViewer CALL LoadFile ViewerBegin CALL InitStatusLine CALL InitVProc CALL PrintVPage -ViewerLoop LD A,(ViewMode) +ViewerLoop LD A,(ViewMode) ; режим просмотра? OR A JR NZ,HViewLoop +; режим просмотра текст TViewLoop LD IX,ASCIItab CALL JUMPS.TestCoords - SPDSS DSSF.SCANKEY ;Ожидаем нажатия клавиш + SPDSS DSSF.SCANKEY ; Ожидаем нажатия клавиш JR Z,TViewLoop - LD A,E ;Е-ASCII код - CP 0x1B ;Esc + LD A,E ; Е-ASCII код + CP 0x1B ; Esc JP Z,ViewerExit OR A - JR NZ,TViewLoop ;Ждем функцион.клавиши + JR NZ,TViewLoop ; Ждем функцион.клавиши LD A,D - CP 0x44 + CP SC.F10;0x44 JP Z,ViewerExit LD HL,TViewLoop PUSH HL - CP 0x3B + CP SC.F1;0x3B JP Z,About - CP 0x3C + CP SC.F2;0x3C JP Z,ChASCIImode - CP 0x3E - JP Z,ChViewer ;Просмотр в HEX - CP 0x42 - JP Z,ChCodePage ;Смена кодовой страницы WIN/DOS/KOI - CP 0x41 + CP SC.F4;0x3E + JP Z,ChViewer ; Просмотр в HEX + CP SC.F8;0x42 + JP Z,ChCodePage ; Смена кодовой страницы WIN/DOS/KOI + CP SC.F7;0x41 JP Z,FVPrintFile - CP 0x54 + CP SC.X4;0x54 JP Z,ScrollLeft - CP 0x56 + CP SC.X6;0x56 JP Z,ScrollRght - CP 87 ;Home + CP SC.X7;87 ; Home JP Z,THome - CP 81 ;End + CP SC.X1;81 ; End JP Z,TEnd - CP 88 ;Стрелка вверх + CP SC.X8;88 ; Стрелка вверх JP Z,TLineUp - CP 82 ;Стрелка вниз + CP SC.X2;82 ; Стрелка вниз JP Z,TLineDwn - CP 89 ;PageUp + CP SC.X9;89 ; PageUp JP Z,TPageUp - CP 83 ;PageDown + CP SC.X3;83 ; PageDown JP Z,TPageDwn LD A,B - AND 0x30 - CP 0x30 + AND KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL;0x30 + CP KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL;0x30 RET Z - BIT 5,B + BIT KEYBSTAT.B_CTRL,B;5,B RET Z LD A,D - AND 0x7F - CP 0x57 ;Ctrl+PageUp - JP Z,TBegFile ;в начало файла - CP 0x51 ;Ctrl+PageDown - JP Z,TEndFile ;в конец файла - CP 0x19 ;Ctrl+P + AND %01111111;0x7F + CP SC.X7;0x57 ; Ctrl+PageUp + JP Z,TBegFile ; в начало файла + CP SC.X1;0x51 ; Ctrl+PageDown + JP Z,TEndFile ; в конец файла + CP SC.P;0x19 ; Ctrl+P JP Z,FVPrintFile RET ;-------------------------------------------------------------- +; режим просмотра HEX HViewLoop LD IX,HEXtab CALL JUMPS.TestCoords - SPDSS DSSF.SCANKEY ;Ожидаем нажатия клавиш + SPDSS DSSF.SCANKEY ; Ожидаем нажатия клавиш JR Z,HViewLoop - LD A,E ;Е-ASCII код - CP 0x1B ;Esc + LD A,E ; Е-ASCII код + CP 0x1B ; Esc JP Z,ViewerExit OR A - JR NZ,HViewLoop ;Ждем функцион.клавиши - LD A,D ; - CP 0x44 ;F10 + JR NZ,HViewLoop ; Ждем функцион.клавиши + LD A,D + CP SC.F10;0x44 ; F10 JP Z,ViewerExit LD HL,HViewLoop PUSH HL - CP 0x3B + CP SC.F1;0x3B JP Z,About - CP 0x3E ;F4 - JP Z,ChViewer ;Просмотр в тексте - CP 0x3F ;F5 - JP Z,HGoTo ;Переход на адрес пользователя - CP 0x41 + CP SC.F4;0x3E ; F4 + JP Z,ChViewer ; Просмотр в тексте + CP SC.F8;0x42 + JP Z,ChCodePage ; Смена кодовой страницы WIN/DOS/KOI + CP SC.F5;0x3F ; F5 + JP Z,HGoTo ; Переход на адрес пользователя + CP SC.F7;0x41 JP Z,FVPrintFile - CP 88 ;Стрелка вверх + CP SC.X8;88 ; Стрелка вверх JP Z,FVHLineUp - CP 82 ;Стрелка вниз + CP SC.X2;82 ; Стрелка вниз JP Z,HLineDwn - CP 89 ;PageUp + CP SC.X9;89 ; PageUp JP Z,FVHPageUp - CP 83 ;PageDown + CP SC.X3;83 ; PageDown JP Z,HPageDwn LD A,B - AND 0x30 - CP 0x30 + AND KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL;0x30 + CP KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL;0x30 RET Z - BIT 5,B + BIT KEYBSTAT.B_CTRL,B;5,B RET Z LD A,D - AND 0x7F - CP 0x57 ;Ctrl+PageUp - JP Z,HBegFile ;в начало файла - CP 0x51 ;Ctrl+PageDown - JP Z,HEndFile ;в конец файла - CP 0x19 ;Ctrl+P + AND %01111111;0x7F + CP SC.X7;0x57 ; Ctrl+PageUp + JP Z,HBegFile ; в начало файла + CP SC.X1;0x51 ; Ctrl+PageDown + JP Z,HEndFile ; в конец файла + CP SC.P;0x19 ; Ctrl+P JP Z,FVPrintFile RET @@ -160,20 +161,6 @@ PrintVPage LD A,(ViewMode) JP NZ,PrnHEXpage JP PrnASCIIpage -;[]==========================================================[] -ViewingFile DUPL 0x30,0 -ViewMode DEFB 0x00 -ASCIImode DEFB 0x01 -ASCIIaddX DEFB 0x00 -EmptyLines DEFB 0x00 -FileLenght DUPL 4,0 ; Длина файла (32бит) -FileShift DUPL 4,0 ; Смещение от начала файла (32бит) -TempShift DUPL 4,0 ; Временная ячейка смещения (32бит) -FVNextShift DUPL 4,0 ; Следующая страница для ASCII (32бит) -FVMemIndef DEFB 0x00 -FHandle DEFB 0x00 -FVReadLen DUPL 4,0 - ;[]==========================================================[] ViewerExit LD A,(FVMemIndef) SPDSS DSSF.FREEMEM @@ -183,7 +170,6 @@ ViewerExit LD A,(FVMemIndef) ;[]==========================================================[] LoadFile CALL JUMPS.SetClock LD DE,ViewingFile -; SPDSS DSSF.F_FIRST,1,0x37 SPDSS DSSF.F_FIRST,1, DIR.M_Archive + \ DIR.M_Dir + \ DIR.M_System + \ @@ -226,7 +212,7 @@ LoadFile CALL JUMPS.SetClock INC HL LoadFl1 LD A,D OR E - LD A,0x1E + LD A,ERR_DSS.NOT_ENOUGH_MEMORY PUSH AF CALL NZ,JUMPS.DOSError ;!!!!!!!!!!!! Нет памяти POP AF @@ -239,7 +225,7 @@ LoadFl1 LD A,D LD H,B OR A SBC HL,DE - LD A,0x1E + LD A,ERR_DSS.NOT_ENOUGH_MEMORY PUSH DE PUSH AF CALL C,JUMPS.DOSError ;!!!!!!!!!!!! Нет памяти @@ -247,11 +233,11 @@ LoadFl1 LD A,D POP DE JP C,LoadExit LD IX,ProcessView - LD (IX+PROC.MAXL1),E - LD (IX+PROC.MAXH1),D + LD (IX+PROC.MAX_PAGES),E + LD (IX+PROC.MAX_PAGES + 1),D SUB A - LD (IX+PROC.MAXL2),A - LD (IX+PROC.MAXH2),A + LD (IX+PROC.MAX_PAGES + 2),A + LD (IX+PROC.MAX_PAGES + 3),A PUSH DE CALL JUMPS.InitProcess POP DE @@ -270,10 +256,10 @@ LoadFl1 LD A,D W_END SPDSS DSSF.CURDISK LD HL,WorkBuffer - ADD A,"A" + ADD A,'A' LD (HL),A INC HL - LD (HL),":" + LD (HL),':' INC HL PUSH HL SPDSS DSSF.CURDIR @@ -283,7 +269,7 @@ LoadFl1 LD A,D CP (HL) JR NZ,.L2 DEC HL - LD A,0x5C + LD A,'\\' CP (HL) INC HL JR Z,.L3 @@ -385,33 +371,32 @@ NoRead LD A,(FVMemIndef) JR LoadExit FVNextProcess LD IX,ProcessView - LD L,(IX+PROC.CURL1) - LD H,(IX+PROC.CURH1) + LD L,(IX+PROC.CURR_PAGE) + LD H,(IX+PROC.CURR_PAGE + 1) INC HL - LD (IX+PROC.CURL1),L - LD (IX+PROC.CURH1),H + LD (IX+PROC.CURR_PAGE),L + LD (IX+PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.NextPr1 - LD L,(IX+PROC.CURL2) - LD H,(IX+PROC.CURH2) + LD L,(IX+PROC.CURR_PAGE + 2) + LD H,(IX+PROC.CURR_PAGE + 3) INC HL - LD (IX+PROC.CURL2),L - LD (IX+PROC.CURH2),H -.NextPr1 CALL JUMPS.PrnProcess - RET + LD (IX+PROC.CURR_PAGE + 2),L + LD (IX+PROC.CURR_PAGE + 3),H +.NextPr1 JP JUMPS.PrnProcess ;[]----------------------------------------------------------[] -ProcessView DEFW 0x00B2 - DEFW 0x0075 - DEFW 0x011C - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFB 0x4F +ProcessView DW 178 + DW 117 + DW 284 + DW 0 + DW 0 + DW 0 + DW 0 + DW 0 + DW 0 + DB COLORP.BLUE + COLORI.WHITE ;FVCorrBigChar CP 0x41 ; RET C @@ -469,7 +454,7 @@ InitViewScr LD HL,FVFLen LD C,(IX+32) LD B,0x08 InitVS0 RL C - LD A,"-" + LD A,'-' JR NC,.L3 LD A,(HL) .L3 LD (DE),A @@ -514,7 +499,7 @@ FVFAttrib EQU $ - STRLEN(" ") - 1 CP (HL) JR NZ,.L4 DEC HL - LD A,0x5C + LD A,'\\' CP (HL) INC HL JR Z,.L5 @@ -542,12 +527,11 @@ FVFAttrib EQU $ - STRLEN(" ") - 1 LD B,0x08 EXX LD A,0x02 - CALL JUMPS.SetCMOSPrint - RET + JP JUMPS.SetCMOSPrint FVFAtributs DEFB "--ad-shr" -;Дата +; Дата FVGetData EX DE,HL LD A,(IX+24) AND 0x1F @@ -564,19 +548,19 @@ FVGetData EX DE,HL CALL FVGet8Bit LD (HL),"." INC HL - LD A,(IX+25) ;Год + LD A,(IX+25) ; Год SRL A ADD A,80 .L2 SUB 100 JR NC,.L2 - ADD A,100 ;Год + ADD A,100 ; Год CALL FVGet8Bit EX DE,HL RET -;Время +; Время FVGetTime EX DE,HL - LD A,(IX+23) ;Часы + LD A,(IX+23) ; Часы AND 0xF8 RRA RRA @@ -610,21 +594,19 @@ FVGet8Bit LD B,0x2F FVBytes DEFB "bytes" ;[]==========================================================[] -InitStatusLine LD A,(ViewMode) +InitStatusLine CALL InitCodePage + LD A,(ViewMode) OR A JP NZ,HEXstatus ASCIIstatus LD HL,UnWrapT - LD DE,0x005E + LD DE,94 LD A,(ASCIImode) OR A JR Z,.L1 LD HL,WrapT - LD DE,0x0064 -.L1 LD (ASCIIx),DE - LD DE,ASCIIm - LD BC,0x0009 - LDIR - CALL InitCodePage + LD DE,100 +.L1 LD (ASCIIx),DE ; позиция печати по X + LD (ASCIIm),HL ; адрес текста который печатать MAKEWINDOW WINSUBOBJ.WOBIND W_HORIZLINE 0,241,640 W_FILL 2,243,636,12,COLORI.HIGHGRAY @@ -632,26 +614,23 @@ ASCIIstatus LD HL,UnWrapT W_BUTTON 0,242,80,14 W_TEXT 18,245,COLORP.HIGHGRAY,"F1 About" W_BUTTON 80,242,80,14 - W_TEXT 94,245,COLORP.HIGHGRAY,"F2 UnWrap" -ASCIIx: EQU $ - STRLEN("F2 UnWrap") - 6 -ASCIIm: EQU $ - STRLEN("F2 UnWrap") - 1 + W_ADRTEXT 94,245,COLORP.HIGHGRAY,0 +ASCIIx: EQU $ - 7 +ASCIIm: EQU $ - 2 W_BUTTON 160,242,80,14 W_TEXT 184,245,COLORP.HIGHGRAY,"F4 Hex" W_BUTTON 400,242,80,14 W_TEXT 422,245,COLORP.HIGHGRAY,"F7 Print" W_BUTTON 480,242,80,14 - W_TEXT 504,245,COLORP.HIGHGRAY,"F8 DOS" -ASCIIenc: EQU $ - STRLEN("DOS") - 1 + W_ADRTEXT 504,245,COLORP.HIGHGRAY,0 +ASCIIenc1: EQU $ - 2 W_BUTTON 560,242,80,14 W_TEXT 580,245,COLORP.HIGHGRAY,"F10 Quit" W_END RET -UnWrapT DEFB "F2 UnWrap" -WrapT DEFB "F2 Wrap " -EncDos: DEFB "DOS" -EncWin: DEFB "WIN" -EncKoi: DEFB "KOI" +UnWrapT DZ "F2 UnWrap" +WrapT DZ "F2 Wrap " HEXstatus MAKEWINDOW WINSUBOBJ.WOBIND @@ -666,6 +645,9 @@ HEXstatus W_TEXT 258,245,COLORP.HIGHGRAY,"F5 Go to" W_BUTTON 400,242,80,14 W_TEXT 422,245,COLORP.HIGHGRAY,"F7 Print" + W_BUTTON 480,242,80,14 + W_ADRTEXT 504,245,COLORP.HIGHGRAY,0 +ASCIIenc2: EQU $ - 2 W_BUTTON 560,242,80,14 W_TEXT 580,245,COLORP.HIGHGRAY,"F10 Quit" W_END @@ -678,7 +660,7 @@ About W_FILL 4,2,312,10,COLORP.BLACK W_TEXT 144,3,COLORI.WHITE,"About" W_TEXT 96,18,COLORP.HIGHGRAY,"Flex Navigator File Viewer" - W_TEXT 144,28,COLORP.HIGHGRAY,"v\{FLEX_VERS.VIEWER}" + W_TEXT 96,28,COLORP.HIGHGRAY,"v\{FLEX_VERS.VIEWER} build \{BUILDDATE}" W_TEXT 18,40,COLORP.HIGHGRAY,"Programming: (C)2000 Enin Anton" W_TEXT 92,50,COLORP.HIGHGRAY,"(C)2021 Mikhaltchenkov Dmitry" W_BUTTON 124,66,72,14 @@ -697,7 +679,7 @@ AboutLoop LD IX,FVAboutTab CP 0x0D JR Z,AboutExt RES 5,A - CP "O" + CP 'O' JR NZ,AboutLoop AboutExt WINDOWCLOSE @@ -708,7 +690,7 @@ ScrollSCRup LD DE,0x241C JR ScrlSCRDnUp ScrollSCRdown LD DE,0x1C24 -;На вход: +; На вход: ; D - Y откуда ; Е - Y куда ScrlSCRDnUp DI @@ -747,19 +729,19 @@ ScSCRN1 LD A,D InitFPages PUSH HL LD DE,(TempShift) LD HL,(TempShift+2) - LD A,D ;Выделяем номер страницы + LD A,D ; Выделяем номер страницы RLA RL L RLA RL L LD A,L EXX - LD E,A ;DE - Адрес страницы в списке + LD E,A ; DE - Адрес страницы в списке LD D,HIGH (PagesList) - LD A,(DE) ;Тек.страница + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX - RES 7,D ;Вкл.с 0x4000 + RES 7,D ; Вкл.с 0x4000 SET 6,D POP HL RET @@ -769,8 +751,8 @@ TestFPages BIT 7,D RES 7,D SET 6,D EXX - INC E ;DE - Адрес страницы в списке - LD A,(DE) ;Тек.страница + INC E ; DE - Адрес страницы в списке + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX RET @@ -799,13 +781,13 @@ GetFPages PUSH HL RET ;[]==========================================================[] -;Процедура инициализация таблицы процентов +; Процедура инициализация таблицы процентов InitVProc LD A,0x01 - LD (ProcFlag),A ;Флаг вывода процентов + LD (ProcFlag),A ; Флаг вывода процентов LD A,(ViewMode) OR A JR NZ,InProcHex -;Проценты для TextWrap +; Проценты для TextWrap InProcASCII LD HL,(FileLenght) LD DE,(FileLenght+2) LD B,0x19 @@ -816,7 +798,7 @@ InProcA PUSH BC DJNZ InProcA JR InitProc -;Проценты для Hex +; Проценты для Hex InProcHex LD HL,(FileLenght) LD DE,(FileLenght+2) LD BC,0x0190 @@ -832,21 +814,21 @@ InProcHex LD HL,(FileLenght) OR D OR E RET Z -;Процедура инициализации таблицы процентов -;На вход: -; DE+HL - Длина файла-1страница +; Процедура инициализации таблицы процентов +; На вход: +; DEHL - Длина файла - 1 страница InitProc PUSH HL PUSH DE EX DE,HL - LD BC,100 ;Длина файла/100 (%) + LD BC,100 ; Длина файла/100 (%) CALL JUMPS.Divis32 - LD (Coeff1+1),DE ;Получаем кол-во байт на - LD (Coeff2+1),HL ;один процент + LD (Coeff1+1),DE ; Получаем кол-во байт на + LD (Coeff2+1),HL ; один процент LD IX,ProcentTab LD HL,0x0000 LD E,L LD D,H - LD BC,0x6300 ;Генерим таблицу + LD BC,0x6300 ; Генерим таблицу LD (IX+0x00),L INC IX LD (IX+0x00),H @@ -858,7 +840,7 @@ InitProc PUSH HL LD (IX+0x00),C INC IX INC C -;для каждого процента +; для каждого процента CoeffLoop PUSH BC Coeff1 LD BC,0x0000 ADD HL,BC @@ -881,7 +863,7 @@ Coeff2 LD BC,0x0000 DJNZ CoeffLoop POP DE POP HL - LD (IX+0x00),L ;Макс.процент + LD (IX+0x00),L ; Макс.процент INC IX LD (IX+0x00),H INC IX @@ -895,55 +877,55 @@ Coeff2 LD BC,0x0000 RET ;[]----------------------------------------------------------[] -;Процедура просчета и печати проценто +; Процедура просчета и печати проценто PrintVProc LD HL,PutProcent - PUSH HL ;Выходим на печать + PUSH HL ; Выходим на печать LD A,(ProcFlag) OR A LD A,100 - RET NZ ;Уже все 100% - LD IX,ProcentTab+250 ;Серидина таблицы проц.50% - LD HL,(FileShift) ;Текущее смещение + RET NZ ; Уже все 100% + LD IX,ProcentTab+250 ; Серидина таблицы проц.50% + LD HL,(FileShift) ; Текущее смещение LD DE,(FileShift+2) - CALL TestProcent ;В какой половине наход.? - JR C,LowTest ;<50% + CALL TestProcent ; В какой половине наход.? + JR C,LowTest ; <50% LD A,(IX+0x04) - RET Z ;=50% - LD IX,ProcentTab+375 ;Таблица с 75% - CALL TestProcent ;В какой половине наход.? - JR C,Test2 ;50%% +; Процедура поиска процента вниз по таблице +Test2 LD A,(IX+0x04) ; Текущий процент + RET Z ; X=% + RET NC ; X>% OR A RET Z - LD BC,-0x0005 ;Ищем вниз по таблице - ADD IX,BC ;Нужный процент + LD BC,-0x0005 ; Ищем вниз по таблице + ADD IX,BC ; Нужный процент CALL TestProcent JR Test2 -;X<50% -LowTest LD IX,ProcentTab+125 ;Таблица с 25% - CALL TestProcent ;В какой половине наход.? - JR C,Test2 ;01%процент @@ -966,7 +948,7 @@ TestProcent PUSH HL POP HL RET -;Процедура вывода процентов +; Процедура вывода процентов PutProcent LD HL,ProcText PUSH HL LD BC,0x2F00 @@ -976,7 +958,7 @@ PutProcent LD HL,ProcText ADD A,100 EX AF,AF' LD A,B - CP "0" + CP '0' JR Z,.L2 SET 0,C .L2 BIT 0,C @@ -992,7 +974,7 @@ PutProcent LD HL,ProcText ADD A,10 EX AF,AF' LD A,B - CP "0" + CP '0' JR Z,.L5 SET 0,C .L5 BIT 0,C @@ -1001,33 +983,37 @@ PutProcent LD HL,ProcText .L6 LD (HL),A INC HL EX AF,AF' - ADD A,"0" + ADD A,'0' LD (HL),A POP HL LD DE,0x0250 LD BC,0x0011 LD A,0x80 - CALL JUMPS.PrnTxtLnNorm - RET + JP JUMPS.PrnTxtLnNorm InitCodePage: LD A,0 CodePage EQU $-1 LD L,A - LD H,0 - ADD HL,HL - ADD A,L - LD L,A - LD DE,EncDos - ADD HL,DE - LD DE,ASCIIenc - LD BC,3 - LDIR - LD A, (CodePage) + ADD A,A + ADD A,L + ADD A,A + ADD A,L + LD HL,EncDos + ADD A,L + LD L,A + ADC A,H + SUB L + LD H,A + LD (ASCIIenc1),HL + LD (ASCIIenc2),HL + LD A,(CodePage) AND A JR NZ,.next LD HL,0 .call: LD (PutLine2),A - LD (PutLine2 + 1),HL + LD (PutLine2 + 1),HL ; для режима просмотра TEXT + LD (DECODE4HEX),A + LD (DECODE4HEX + 1),HL ; для режима просмотра HEX RET .next: DEC A @@ -1036,12 +1022,16 @@ CodePage EQU $-1 LD HL,TableKoi .next1: LD (DecodeSymbol.table),HL LD HL,DecodeSymbol - LD A, 0xCD + LD A,0xCD JR .call -ProcText DEFB " %",0 -ProcFlag DEFB 0x00 -ProcentTab DUPL 505,0 +EncDos: DZ "F8 DOS" +EncWin: DZ "F8 WIN" +EncKoi: DZ "F8 KOI" + +ProcText DZ " %" +ProcFlag DB 0 +ASCIImode DB 1 ; при запуске режим TEXT ;[]==========================================================[] include fvtext.a80 @@ -1049,33 +1039,48 @@ ProcentTab DUPL 505,0 include fvprn.a80 ;[]==========================================================[] -ASCIItab: DEFW 0x0050,0x0230,0x001C,0x007F,0x00,0x0000,TLineUpMs,TBegFile - DEFW 0x0050,0x0230,0x0080,0x00E4,0x00,0x0000,TLineDwnMs,TEndFile - DEFW 0x0000,0x0050,0x001C,0x00E4,0x00,0x0000,TPageUpMs,ScrollLeft - DEFW 0x0230,0x0280,0x001C,0x00E4,0x00,0x0000,TPageDwnMs,ScrollRght - DEFW 0x0000,0x0050,0x00F2,0x0100,0x01,0x0000,About,0x0000 - DEFW 0x0050,0x00A0,0x00F2,0x0100,0x01,0x0000,ChASCIImode,0x0000 - DEFW 0x00A0,0x00F0,0x00F2,0x0100,0x01,0x0000,ChViewer,0x0000 - DEFW 0x0190,0x01E0,0x00F2,0x0100,0x01,0x0000,ChCodePage,0x0000 - DEFW 0x01E0,0x0230,0x00F2,0x0100,0x01,0x0000,FVPrintFile,0x0000 - DEFW 0x0230,0x0280,0x00F2,0x0100,0x21,0x0000,ViewerExit,0x0000 - DEFW 0x8000 +ASCIItab: DW 80,560, 28,127,%0000000000000000,%0000000000000000,TLineUpMs,TBegFile + DW 80,560,128,228,%0000000000000000,%0000000000000000,TLineDwnMs,TEndFile + DW 0, 80, 28,228,%0000000000000000,%0000000000000000,TPageUpMs,ScrollLeft + DW 560,640, 28,228,%0000000000000000,%0000000000000000,TPageDwnMs,ScrollRght + DW 0, 80,242,256,%0000000000000001,%0000000000000000,About,0 + DW 80,160,242,256,%0000000000000001,%0000000000000000,ChASCIImode,0 + DW 160,240,242,256,%0000000000000001,%0000000000000000,ChViewer,0 + DW 400,480,242,256,%0000000000000001,%0000000000000000,FVPrintFile,0 + DW 480,560,242,256,%0000000000000001,%0000000000000000,ChCodePage,0 + DW 560,640,242,256,%0000000000100001,%0000000000000000,ViewerExit,0 + DW 0x8000 -HEXtab: DEFW 0x0050,0x0230,0x001C,0x007F,0x00,0x0000,HLineUpMs,HBegFile - DEFW 0x0050,0x0230,0x0080,0x00E4,0x00,0x0000,HLineDwnMs,HEndFile - DEFW 0x0000,0x0050,0x001C,0x00E4,0x00,0x0000,HPageUpMs,0x0000 - DEFW 0x0230,0x0280,0x001C,0x00E4,0x00,0x0000,HPageDwnMs,0x0000 - DEFW 0x0000,0x0050,0x00F2,0x0100,0x01,0x0000,About,0x0000 - DEFW 0x00A0,0x00F0,0x00F2,0x0100,0x01,0x0000,ChViewer,0x0000 - DEFW 0x00F0,0x0140,0x00F2,0x0100,0x01,0x0000,HGoTo,0x0000 - DEFW 0x01E0,0x0230,0x00F2,0x0100,0x01,0x0000,FVPrintFile,0x0000 - DEFW 0x0230,0x0280,0x00F2,0x0100,0x21,0x0000,ViewerExit,0x0000 - DEFW 0x8000 +HEXtab: DW 80,560, 28,127,%0000000000000000,%0000000000000000,HLineUpMs,HBegFile + DW 80,560,128,228,%0000000000000000,%0000000000000000,HLineDwnMs,HEndFile + DW 0, 80, 28,228,%0000000000000000,%0000000000000000,HPageUpMs,0 + DW 560,640, 28,228,%0000000000000000,%0000000000000000,HPageDwnMs,0 + DW 0, 80,242,256,%0000000000000001,%0000000000000000,About,0 + DW 160,240,242,256,%0000000000000001,%0000000000000000,ChViewer,0 + DW 240,320,242,256,%0000000000000001,%0000000000000000,HGoTo,0 + DW 400,480,242,256,%0000000000000001,%0000000000000000,FVPrintFile,0 + DW 480,560,242,256,%0000000000000001,%0000000000000000,ChCodePage,0 + DW 560,640,242,256,%0000000000100001,%0000000000000000,ViewerExit,0 + DW 0x8000 -FVAboutTab: DEFW 0x011C,0x0164,0x008A,0x0098,0x21,0x0000,AboutExt,0x0000 - DEFW 0x0000,0x00A0,0x0000,0x0100,0x20,0x0000,AboutExt,0x0000 - DEFW 0x01E0,0x0280,0x0000,0x0100,0x20,0x0000,AboutExt,0x0000 - DEFW 0x0000,0x0280,0x0000,0x0048,0x20,0x0000,AboutExt,0x0000 - DEFW 0x0000,0x0280,0x009D,0x0100,0x20,0x0000,AboutExt,0x0000 - DEFW 0x8000 +FVAboutTab: DW 284,356,138,152,%0000000000100001,%0000000000000000,AboutExt,0 + DW 0,160, 0,256,%0000000000100000,%0000000000000000,AboutExt,0 + DW 480,640, 0,256,%0000000000100000,%0000000000000000,AboutExt,0 + DW 0,640, 0, 72,%0000000000100000,%0000000000000000,AboutExt,0 + DW 0,640,157,256,%0000000000100000,%0000000000000000,AboutExt,0 + DW 0x8000 ;[]==========================================================[] + + INIT_VAR $ + SETVAR ViewingFile, 0x30 + SETVAR ViewMode, BYTE + SETVAR ASCIIaddX, BYTE + SETVAR EmptyLines, BYTE + SETVAR FileLenght, DWORD ; Длина файла (32бит) + SETVAR FileShift, DWORD ; Смещение от начала файла (32бит) + SETVAR TempShift, DWORD ; Временная ячейка смещения (32бит) + SETVAR FVNextShift, DWORD ; Следующая страница для ASCII (32бит) + SETVAR FVMemIndef, BYTE + SETVAR FHandle, BYTE + SETVAR FVReadLen, DWORD + SETVAR ProcentTab, 505 diff --git a/plugins/fnviewer/fvprn.a80 b/plugins/fnviewer/fvprn.a80 index f3c397a..34bceeb 100644 --- a/plugins/fnviewer/fvprn.a80 +++ b/plugins/fnviewer/fvprn.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 24.03.2025 savelij +; LAST UPDATE: 28.07.2025 savelij ;[]==========================================================[] FVPrintFile @@ -28,10 +28,10 @@ FVPrintFile OR L JR NZ,.InitPrn INC E -.InitPrn LD (IX+PROC.MAXL1),L - LD (IX+PROC.MAXH1),H - LD (IX+PROC.MAXL2),E - LD (IX+PROC.MAXH2),0x00 +.InitPrn LD (IX+PROC.MAX_PAGES),L + LD (IX+PROC.MAX_PAGES + 1),H + LD (IX+PROC.MAX_PAGES + 2),E + LD (IX+PROC.MAX_PAGES + 3),0x00 CALL JUMPS.InitProcess LD A,(ViewMode) OR A @@ -82,7 +82,7 @@ PrintHEX LD HL,0x0000 PrintHEXlp CALL PrnHEXline JR C,PrintHEXext LD HL,(TempShift) - LD DE,0x0010 ;Адрес дампа+16 + LD DE,0x0010 ; Адрес дампа+16 ADD HL,DE LD (TempShift),HL LD HL,(TempShift+2) @@ -130,19 +130,19 @@ PrnHLn GETPORT WINSP.CPU1 PUSH AF CALL InitFPages - LD HL,LineBuffer+1 ;буфер строки + LD HL,LineBuffer+1 ; буфер строки EXX - LD HL,LineBuffer+0x3F ;место для ASCII кодов + LD HL,LineBuffer+0x3F ; место для ASCII кодов EXX - LD A,(TempShift+3) ;Кладем смещение - CALL PutHexNumb ;от начала фаила + LD A,(TempShift+3) ; Кладем смещение + CALL PutHexNumb ; от начала фаила LD A,(TempShift+2) CALL PutHexNumb LD A,(TempShift+1) CALL PutHexNumb LD A,(TempShift) CALL PutHexNumb - LD (HL),":" + LD (HL),':' INC L INC L PrnHLoop CALL TestFPages @@ -155,7 +155,7 @@ PrnHLoop CALL TestFPages EXX CP 0x20 JR NC,.L1 - LD A,"." + LD A,'.' .L1 LD (HL),A INC L EXX @@ -186,7 +186,7 @@ PrnHLoop CALL TestFPages INC L EXX INC IXL - LD A,IXL ;В центре 2 пробела + LD A,IXL ; В центре 2 пробела CP 0x04 JR Z,.FlPNx1 CP 0x08 @@ -207,8 +207,7 @@ PrnHEX LD A,(HL) CALL FVPrintCHAR RET C LD A,0x0A - CALL FVPrintCHAR - RET + JP FVPrintCHAR FVPrintCHAR LD IXL,A PUSH IX @@ -260,8 +259,8 @@ FVPrnCHAR PUSH HL HALT JR FVPrintCHAR -PrintTab DEFW 0x011C,0x0164,0x0080,0x008E,0x01,0x0000,FVStopPrint,0x0000 - DEFW 0x8000 +PrintTab DW 284,356,128,142,%0000000000000001,%0000000000000000,FVStopPrint,0 + DW 0x8000 FVNxtPrnProc LD A,E OR A @@ -272,19 +271,19 @@ FVNxtPrnProc LD A,E EXX PUSH DE LD IX,ProcessPrn - LD L,(IX+PROC.CURL1) - LD H,(IX+PROC.CURH1) + LD L,(IX+PROC.CURR_PAGE) + LD H,(IX+PROC.CURR_PAGE + 1) INC HL - LD (IX+PROC.CURL1),L - LD (IX+PROC.CURH1),H + LD (IX+PROC.CURR_PAGE),L + LD (IX+PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.NxtProc - LD L,(IX+PROC.CURL2) - LD H,(IX+PROC.CURH2) + LD L,(IX+PROC.CURR_PAGE + 2) + LD H,(IX+PROC.CURR_PAGE + 3) INC HL - LD (IX+PROC.CURL2),L - LD (IX+PROC.CURH2),H + LD (IX+PROC.CURR_PAGE + 2),L + LD (IX+PROC.CURR_PAGE + 3),H .NxtProc CALL JUMPS.PrnProcess POP DE EXX @@ -322,13 +321,13 @@ EndJob: PUSH AF SCF RET -ProcessPrn DEFW 0x00BA - DEFW 0x0071 - DEFW 0x010C - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFW 0x0000 - DEFB 0x4F +ProcessPrn DW 186 + DW 113 + DW 268 + DW 0 + DW 0 + DW 0 + DW 0 + DW 0 + DW 0 + DB COLORP.BLUE + COLORI.WHITE diff --git a/plugins/fnviewer/fvtext.a80 b/plugins/fnviewer/fvtext.a80 index 154c095..3b87b99 100644 --- a/plugins/fnviewer/fvtext.a80 +++ b/plugins/fnviewer/fvtext.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 25.03.2025 savelij +; LAST UPDATE: 28.07.2025 savelij ;[]---------------------------------------------------------[] PrnASCIIpage LD HL,PrintVProc @@ -10,9 +10,9 @@ PrnASCIIpage LD HL,PrintVProc LD (TempShift+2),HL LD B,0x1C PrnASCIIlp PUSH BC - CALL PutASCIIline ;Выводим строку в буф и на экран + CALL PutASCIIline ; Выводим строку в буф и на экран POP BC - JR C,FillASCIIdn ;CY-Закончились байты для печати + JR C,FillASCIIdn ; CY-Закончились байты для печати LD A,B ADD A,0x08 LD B,A @@ -26,11 +26,11 @@ PrnASCIIlp PUSH BC LD (EmptyLines),A RET -;Процедура отчистки нижней области экрана +; Процедура отчистки нижней области экрана FillASCIIdn LD A,0xE4 SUB B LD (FLenASC),A - JR Z,FASCIIe ;Z-нет отчистки + JR Z,FASCIIe ; Z-нет отчистки LD A,B LD (FPosASC),A MAKEWINDOW WINSUBOBJ.WOBIND @@ -50,7 +50,7 @@ FASCIIe LD HL,(TempShift) LD (EmptyLines),A RET -;Процедура печати тек.строки в буфер и на экран +; Процедура печати тек.строки в буфер и на экран PutASCIIline LD IXH,B LD A,(ASCIImode) OR A @@ -105,7 +105,7 @@ PutTab LD (HL),0x20 JR NZ,PutTab JR PutLine3 -PutLine2 CALL DecodeSymbol ; заменяется на NOP, если не нужна перекодировка +PutLine2 CALL DecodeSymbol ; заменяется на NOP, если не нужна перекодировка LD (HL),A LD A,L CP C @@ -155,9 +155,10 @@ DecodeSymbol: CP 0x80 .table EQU $-2 ADD A,L LD L,A - JR NC,.L1 - INC H -.L1 LD A,(HL) + ADC A,H + SUB L + LD H,A + LD A,(HL) POP HL RET @@ -253,8 +254,7 @@ ScrollLeft LD A,(ASCIImode) RET Z DEC A LD (ASCIIaddX),A - CALL PrnASCIIpage - RET + JP PrnASCIIpage ;[]----------------------------------------------------------[] ScrollRght LD A,(ASCIImode) @@ -265,8 +265,7 @@ ScrollRght LD A,(ASCIImode) RET Z INC A LD (ASCIIaddX),A - CALL PrnASCIIpage - RET + JP PrnASCIIpage ;[]----------------------------------------------------------[] THome LD A,(ASCIImode) @@ -277,8 +276,7 @@ THome LD A,(ASCIImode) RET Z SUB A LD (ASCIIaddX),A - CALL PrnASCIIpage - RET + JP PrnASCIIpage ;[]----------------------------------------------------------[] TEnd LD A,(ASCIImode) @@ -289,8 +287,7 @@ TEnd LD A,(ASCIImode) RET Z LD A,0xA0 LD (ASCIIaddX),A - CALL PrnASCIIpage - RET + JP PrnASCIIpage ;[]----------------------------------------------------------[] TLineUpMs CALL TLineUp @@ -335,7 +332,7 @@ TLineUp LD HL,(FileShift) LD (FVNextShift+2),DE TLineU1 CALL ScrollSCRdown LD B,0x1C - CALL PutASCIIline ;Создаем и печатаем строку + CALL PutASCIIline ; Создаем и печатаем строку CALL PrintVProc OR A RET @@ -379,7 +376,7 @@ TLineDwn LD HL,(FVNextShift) LD (TempShift+2),DE CALL ScrollSCRup LD B,0xDC - CALL PutASCIIline ;Создаем и печатаем строку + CALL PutASCIIline ; Создаем и печатаем строку LD HL,(TempShift) LD DE,(TempShift+2) LD (FVNextShift),HL @@ -475,8 +472,7 @@ TBegFile LD HL,JUMPS.ResFire LD HL,0x0000 LD (FileShift),HL LD (FileShift+2),HL - CALL PrnASCIIpage - RET + JP PrnASCIIpage ;[]----------------------------------------------------------[] TEndFile LD HL,JUMPS.ResFire @@ -500,8 +496,7 @@ TEndFl1 PUSH BC DJNZ TEndFl1 LD (FileShift),HL LD (FileShift+2),DE - CALL PrnASCIIpage - RET + JP PrnASCIIpage ;[]==========================================================[] SearchUp LD B,0xF0 @@ -520,13 +515,13 @@ SearchUp LD B,0xF0 PUSH AF PUSH HL PUSH DE - LD A,H ;Выделяем номер страницы + LD A,H ; Выделяем номер страницы RLA RL E RLA RL E LD D,HIGH (PagesList) - LD A,(DE) ;Тек.страница + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 RES 7,H SET 6,H @@ -667,13 +662,13 @@ SrchDE EQU $-2 PUSH AF PUSH HL PUSH DE - LD A,H ;Выделяем номер страницы + LD A,H ; Выделяем номер страницы RLA RL E RLA RL E LD D,HIGH (PagesList) - LD A,(DE) ;Тек.страница + LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 RES 7,H SET 6,H @@ -745,6 +740,7 @@ SrchEEx POP DE OR A RET +; CP866 Table866: db 0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8 db 0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F db 0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D @@ -761,7 +757,7 @@ Table866: db 0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8 db 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF db 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7 db 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF -; koi8-r +; KOI8-R TableKoi: db 0xC4,0xB3,0xDA,0xBF,0xC0,0xD9,0xC3,0xB4 db 0xC2,0xC1,0xC5,0xDF,0xDC,0xDB,0xDD,0xDE db 0xB0,0xB1,0xB2,0xF4,0xFE,0xF9,0xFB,0xF7 diff --git a/readme.md b/readme.md index 4a542df..df72dbf 100644 --- a/readme.md +++ b/readme.md @@ -3,26 +3,10 @@ Flex Navigator ╨┤╨╗╤П ╨║╨╛╨╝╨┐╤М╤О╤В╨╡╤А╨░ Sprinter ╨б╨╛╨▒╤А╨░╨╜╨╜╤Л╨╡ ╤Д╨░╨╣╨╗╤Л ╨╖╨░╨▒╨╕╤А╨░╤В╤М ╨╕╨╖ ╨┐╨░╨┐╨║╨╕ fn - -`CDplayer.flx 1.1:` -- ╨┐╨╗╨░╨│╨╕╨╜ ╨┤╨╛╨┤╨╡╨╗╨░╨╜, ╨╛╨┐╨╕╤Б╨░╨╜╨╕╨╡/history ╨▓ cdplayer.txt ╤А╤П╨┤╨╛╨╝ ╤Б ╨┐╨╗╨░╨│╨╕╨╜╨╛╨╝. - -`FE 1.09:` -- ╨╕╤Б╨┐╤А╨░╨▓╨╗╨╡╨╜╨╛: ╨┐╤А╨╕ ╨▓╤Л╤Е╨╛╨┤╨╡ ╨╕╨╖ ╤А╨╡╨┤╨░╨║╤В╨╛╤А╨░ ╤Б ╨╜╨╡╤Б╨╛╤Е╤А╨░╨╜╨╡╨╜╨╜╤Л╨╝ ╤Д╨░╨╣╨╗╨╛╨╝ ╨╕ ╨╖╨░╨┐╤А╨╛╤Б╨╡ ╨╜╨░ - ╤Б╨╛╤Е╤А╨░╨╜╨╡╨╜╨╕╨╡ ╨║╨╗╨░╨▓╨╕╤И╨░ Enter ╤В╨╡╨┐╨╡╤А╤М ╤А╨░╨▒╨╛╤В╨░╨╡╤В ╨║╨░╨║ ╨┐╨╛╨┤╤В╨▓╨╡╤А╨╢╨┤╨╡╨╜╨╕╨╡ ╤Б╨╛╤Е╤А╨░╨╜╨╡╨╜╨╕╤П. - -`FN 1.16:` -- ╨╕╤Б╨┐╤А╨░╨▓╨╗╨╡╨╜ ╨▓╨╛╨╖╤А╨░╤В ╤В╨╡╨║╤Г╤Й╨╡╨╣ ╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╨╕ ╨┐╨╛╤Б╨╗╨╡ ╨╖╨░╨│╤А╤Г╨╖╨║╨╕ ╨┐╨╗╨░╨│╨╕╨╜╨░. -- ╨▓╤Б╤В╤А╨╛╨╡╨╜╨╜╤Л╨╣ editor ╨┐╨╡╤А╨╡╨╡╤Е╨░╨╗ ╨▓ ╨┐╨╗╨░╨│╨╕╨╜ ╨╛╤В╨║╤Г╨┤╨░ ╨╕ ╨╖╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╨┐╨╛ F4, ╨╕╨╖ FN ╤Г╨┤╨░╨╗╨╡╨╜. -- ╨▓╤Б╤В╤А╨╛╨╡╨╜╨╜╤Л╨╣ viewer ╨┐╨╡╤А╨╡╨╡╤Е╨░╨╗ ╨▓ ╨┐╨╗╨░╨│╨╕╨╜ ╨╛╤В╨║╤Г╨┤╨░ ╨╕ ╨╖╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╨┐╨╛ F3, ╨╕╨╖ FN ╤Г╨┤╨░╨╗╨╡╨╜. -- ╨▓╤Б╤В╤А╨╛╨╡╨╜╨╜╤Л╨╣ help ╨┐╨╡╤А╨╡╨╡╤Е╨░╨╗ ╨▓ ╨┐╨╗╨░╨│╨╕╨╜ ╨╛╤В╨║╤Г╨┤╨░ ╨╕ ╨╖╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╨┐╤А╨╕ ╨╜╨░╨╢╨░╤В╨╕╨╕ F1, - ╨╕╨╖ FN ╤Г╨┤╨░╨╗╨╡╨╜. -- ╨╖╨░╨│╤А╤Г╨╖╨║╨░ ╨┐╨╗╨░╨│╨╕╨╜╨░ ╨╛╤В╨┤╨╡╨╗╨╡╨╜╨░ ╨╛╤В ╨╖╨░╨┐╤Г╤Б╨║╨░, ╤В╨╡╨┐╨╡╤А╤М ╨╝╨╛╨╢╨╜╨╛ ╨╖╨░╨┐╤Г╤Б╨║╨░╤В╤М ╨┐╨╗╨░╨│╨╕╨╜╤Л ╨╜╨╡ - ╤В╨╛╨╗╤М╨║╨╛ ╨╕╨╖ ╨┐╨░╨╜╨╡╨╗╨╕ FN. -- ╨┤╨╛╨▒╨░╨▓╨╗╨╡╨╜ ╨╝╨░╨║╤А╨╛╤Б ╤Д╨╛╤А╨╝╨╕╤А╨╛╨▓╨░╨╜╨╕╤П ╨╖╨░╨│╨╛╨╗╨╛╨▓╨║╨░ ╨┤╨╗╤П ╨┐╨╗╨░╨│╨╕╨╜╨╛╨▓. -- ╨┤╨╛╨▒╨░╨▓╨╗╨╡╨╜╨░ ╨┐╨╛╨┤╨┤╨╡╤А╨╢╨║╨░ ╤А╨░╨▒╨╛╤В╤Л ╨┐╨╗╨░╨│╨╕╨╜╨╛╨▓ ╨▓ ╨░╨┤╤А╨╡╤Б╨░ 0x4000-0x7FFF (╨╛╨║╨╜╨╛ 1) ╨▓ - ╨┤╨╛╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ ╨║ ╤Б╤В╨░╤А╤Л╨╝ 0xC000-0xBFFF (╨╛╨║╨╜╨╛ 3), ╨┐╨╛╨║╨░ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В╤Б╤П ╨▓ ╨┐╨╗╨░╨│╨╕╨╜╨╡ - cdplayer. -- ╨▓ ╨╛╨║╨╜╨░╤Е ╤Б ╨╛╤И╨╕╨▒╨║╨╛╨╣ ╨┐╨╡╤А╨╡╨┤╨╡╨╗╨░╨╜ ╨╜╨░ 2 ╤В╨╕╨┐╨░ ╨╛╨║╨╛╨╜ ╨▓╨╝╨╡╤Б╤В╨╛ ╨╝╨╜╨╛╨│╨╕╤Е ╨┐╨╛╨┤ ╨║╨░╨╢╨┤╤Г╤О ╨╛╤И╨╕╨▒╨║╤Г. -- ╨╕╤Б╨┐╤А╨░╨▓╨╗╨╡╨╜╨░ ╨┐╨╛╤В╨╡╤А╤П ╤Ж╨▓╨╡╤В╨░ ╨┐╤А╨╕ ╨┐╨╡╤З╨░╤В╨╕ ╤В╨╡╨║╤Б╤В╨░ ╨┐╨╛ ╤Г╨║╨░╨╖╨░╨╜╨╜╨╛╨╝╤Г ╨░╨┤╤А╨╡╤Б╤Г. -- ╤В╨╡╨║╤Б╤В╨╛╨▓╤Л╨╝ ╤Д╨░╨╣╨╗╨░╨╝ ╨▓╨╡╤А╨╜╤Г╨╗ ╨║╨╛╨┤╨╕╤А╨╛╨▓╨║╤Г CP866, readme.md ╨╛╤Б╤В╨░╨▓╨╗╨╡╨╜ ╨▓ ╨║╨╛╨┤╨╕╤А╨╛╨▓╨║╨╡ UTF8. +`FileEditor.flx 1.10:` +- ╤Г╤Б╤В╤А╨░╨╜╨╡╨╜╨╛ ╨┐╨╡╤А╨╡╨┐╤Г╤В╨░╨╜╨╜╤Л╨╡ ╨║╨╜╨╛╨┐╨║╨╕ ╨┤╨╗╤П ╨╜╨░╨╢╨░╤В╨╕╨╣ ╨╝╤Л╤И╤М╤О ╨┤╨╗╤П F7 ╨╕ F9. +`FileViewer.flx 1.06:` +- ╨┤╨╛╨▒╨░╨▓╨╗╨╡╨╜╨╛ ╨┐╨╡╤А╨╡╨║╨╗╤О╤З╨╡╨╜╨╕╨╡ ╨║╨╛╨┤╨╕╤А╨╛╨▓╨║╨╕ ╨▓ ╤А╨╡╨╢╨╕╨╝╨╡ HEX ╨┐╤А╨╛╤Б╨╝╨╛╤В╤А╨░. +`FlexNavigaror 1.16.01:` +- ╨╕╤Б╨┐╤А╨░╨▓╨╗╨╡╨╜ ╨▓╤Л╨╗╨╡╤В ╨┐╤А╨╕ ╤Б╨╛╨╖╨┤╨░╨╜╨╕╨╕ ╨╜╨╛╨▓╨╛╨│╨╛ ╤Д╨░╨╣╨╗╨░ ╨┐╨╛ Shift+F4 ╨╕╨╗╨╕ ╨┐╤А╨╛╤Б╨╝╨╛╤В╤А ╤Б + ╨▓╨▓╨╛╨┤╨╛╨╝ ╨╕╨╝╨╡╨╜╨╕ ╨┐╨╛ Shift+F3, ╨┐╨╗╨░╨│╨╕╨╜ ╨▒╤Л╨╗ ╨╜╨╡ ╨╖╨░╨│╤А╤Г╨╢╨╡╨╜.