From 8f458146bc367bbb8c3cc066f6af9a8f28670347 Mon Sep 17 00:00:00 2001 From: savelij13 Date: Thu, 22 Jan 2026 17:36:03 +0300 Subject: [PATCH] =?UTF-8?q?-=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B1=D0=BE=D0=BA=20=D1=83=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D1=8B=D1=85=20=D0=BD=D0=B5=D1=82=20=D1=82=D0=B5=D0=BA=D1=81?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=B2=D1=8B=D0=B4?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D0=B2=D1=81=D0=B5=D0=B3=D0=B4=D0=B0=20=20?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=20=D0=BE=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BA=D0=B8=20"Unknown=20Error".=20-=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B1=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B8=D0=B2=D0=BE=D0=B4=D1=8F?= =?UTF-8?q?=D1=89=D0=B0=D1=8F=20=D0=BA=20=D0=B2=D1=8B=D0=BB=D0=B5=D1=82?= =?UTF-8?q?=D1=83=20=D0=BF=D1=80=D0=B8=20=D0=BA=D0=BE=D0=BF=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8=20=D0=BD=D0=B5=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=BA=D0=B8=D1=85=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2=20=20=20=D0=BD=D0=B0=20=D1=83=D0=B6=D0=B5=20=D1=81?= =?UTF-8?q?=D1=83=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B8=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B5=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BC=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=82=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B4=D0=BE=D0=BB=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/history.txt | 7 +++ docs/todo.txt | 1 + fn/flx/fneditor.flx | Bin 11673 -> 11673 bytes fn/flx/fnviewer.flx | Bin 6459 -> 6459 bytes fn/flx/help.flx | Bin 6364 -> 6414 bytes fn/fn.exe | Bin 49268 -> 49276 bytes fn/history.txt | 2 +- fnbar.a80 => fn_bar.a80 | 0 fn_const.a80 | 3 +- fndos.a80 => fn_dos.a80 | 0 fndosline.a80 => fn_dosline.a80 | 0 fn_exe_boot.a80 | 4 +- fninit.a80 => fn_init.a80 | 0 fninput.a80 => fn_input.a80 | 0 fn_macros.a80 | 11 +++- fnmain.a80 => fn_main.a80 | 56 ++++++++--------- fnmenu.a80 => fn_menu.a80 | 0 fnmouse.a80 => fn_mouse.a80 | 0 fnpanel.a80 => fn_panel.a80 | 0 fnprint.a80 => fn_print.a80 | 0 fnsort.a80 => fn_sort.a80 | 0 fnsys.a80 => fn_sys.a80 | 0 fntab.a80 => fn_tab.a80 | 0 fntree.a80 => fn_tree.a80 | 0 fn_version.a80 | 4 +- fnwin.a80 => fn_win.a80 | 4 +- fnwork.a80 => fn_work.a80 | 3 +- plugins/help/help_t.a80 | 9 +-- readme.md | 9 +-- rez2_fnconfig.a80 => rez2_fn_config.a80 | 0 rez2_fnerror.a80 => rez2_fn_error.a80 | 23 ++++--- rez2_fnfunct.a80 => rez2_fn_funct.a80 | 72 ++++++++++++++-------- rez2_fnsearch.a80 => rez2_fn_search.a80 | 0 rez2_fntab.a80 => rez2_fn_tab.a80 | 0 rez3_fnnext.a80 => rez3_fn_extensions.a80 | 29 +++++---- rez3_fnmark.a80 => rez3_fn_mark.a80 | 0 rez3_fnmisc.a80 => rez3_fn_misc.a80 | 0 rez3_fntab.a80 => rez3_fn_tab.a80 | 0 38 files changed, 146 insertions(+), 91 deletions(-) rename fnbar.a80 => fn_bar.a80 (100%) rename fndos.a80 => fn_dos.a80 (100%) rename fndosline.a80 => fn_dosline.a80 (100%) rename fninit.a80 => fn_init.a80 (100%) rename fninput.a80 => fn_input.a80 (100%) rename fnmain.a80 => fn_main.a80 (93%) rename fnmenu.a80 => fn_menu.a80 (100%) rename fnmouse.a80 => fn_mouse.a80 (100%) rename fnpanel.a80 => fn_panel.a80 (100%) rename fnprint.a80 => fn_print.a80 (100%) rename fnsort.a80 => fn_sort.a80 (100%) rename fnsys.a80 => fn_sys.a80 (100%) rename fntab.a80 => fn_tab.a80 (100%) rename fntree.a80 => fn_tree.a80 (100%) rename fnwin.a80 => fn_win.a80 (99%) rename fnwork.a80 => fn_work.a80 (99%) rename rez2_fnconfig.a80 => rez2_fn_config.a80 (100%) rename rez2_fnerror.a80 => rez2_fn_error.a80 (96%) rename rez2_fnfunct.a80 => rez2_fn_funct.a80 (97%) rename rez2_fnsearch.a80 => rez2_fn_search.a80 (100%) rename rez2_fntab.a80 => rez2_fn_tab.a80 (100%) rename rez3_fnnext.a80 => rez3_fn_extensions.a80 (76%) rename rez3_fnmark.a80 => rez3_fn_mark.a80 (100%) rename rez3_fnmisc.a80 => rez3_fn_misc.a80 (100%) rename rez3_fntab.a80 => rez3_fn_tab.a80 (100%) diff --git a/docs/history.txt b/docs/history.txt index bf2710e..0031d2d 100644 --- a/docs/history.txt +++ b/docs/history.txt @@ -1,4 +1,11 @@ +22.01.2026 +FlexNavigator 1.16.06 +- для ошибок у которых нет текста описания теперь выдает всегда + текст ошибки "Unknown Error". +- исправлена ошибка приводящая к вылету при копировании нескольких файлов + на уже существующие и выборе отмены от продолжения копирования. + 11.01.2026 FlexNavigator 1.16.05 - в функции текстового ввода заблокирована обработка клавиши diff --git a/docs/todo.txt b/docs/todo.txt index 882ef76..ce2e994 100644 --- a/docs/todo.txt +++ b/docs/todo.txt @@ -1,6 +1,7 @@ Flex navigator TODO: +[] при ошибке записи при копировании файл удаляется без окна об ошибке. [] плагин CD Player исправить смену диска. [] файл с расширением fln по F3 вызывает зависание. [] исправить глобальный индикатор процесса копироования, пока привирает. diff --git a/fn/flx/fneditor.flx b/fn/flx/fneditor.flx index 5822b731cc7f43b87092bf0e271ecb31e788eb41..8e873135527a52316842f4e13050af4cafe241ee 100644 GIT binary patch delta 15 XcmbOkJu`a4cXlQtqs>3r7pMXNHuVN| delta 15 XcmbOkJu`a4cXlR2!_7b07pMXNHs}U( diff --git a/fn/flx/fnviewer.flx b/fn/flx/fnviewer.flx index 8898aede897c0185b79c9d17a79e8a3fe12623ab..64d720b0f3e0e7a569dd87d45f82d5c5e5e26ea9 100644 GIT binary patch delta 15 WcmdmOwA*MyDm#;r(dKmaD}n$n+XZ6) delta 15 WcmdmOwA*MyDm#;*;pTMqD}n$n&IMrr diff --git a/fn/flx/help.flx b/fn/flx/help.flx index c7464feebf6e9692808f17c7b5ce22408f429c5b..5be5e98dcc65a37f12ce5db718fed4638b464205 100644 GIT binary patch delta 121 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 delta 4154 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 bdu87uxFhTv;O@R%Zze@$XLmREj2ZoZEuTsV diff --git a/fn/history.txt b/fn/history.txt index f26e48b..bf2710e 100644 --- a/fn/history.txt +++ b/fn/history.txt @@ -1,5 +1,5 @@ -10.01.2026 +11.01.2026 FlexNavigator 1.16.05 - в функции текстового ввода заблокирована обработка клавиши ALT, вызывало зависание при попытке сделать смену диска (ALT/Fx). diff --git a/fnbar.a80 b/fn_bar.a80 similarity index 100% rename from fnbar.a80 rename to fn_bar.a80 diff --git a/fn_const.a80 b/fn_const.a80 index 70ad378..ce2ac8c 100644 --- a/fn_const.a80 +++ b/fn_const.a80 @@ -1,11 +1,12 @@ -; LAST UPDATE: 11.01.2026 savelij +; LAST UPDATE: 18.01.2026 savelij NUM_FILES_PANEL EQU 17 ; количество файлов в столбце панели NUM_PAGES_FN EQU 7 ; количество страниц памяти для работы FN DateMonthFormat ; формат вывода месяца в дате .Digit EQU 1 ; месяц цифрой 02.08.2025 .Text EQU 2 ; месяц текстом 2 Aug 2025 +EXT_BUF_SIZE EQU 0x400 ; размер буфера для файла ext для распаковки INIT_VAR 0x8000 SETVAR WorkBuffer, 0x400 ; рабочий буфер diff --git a/fndos.a80 b/fn_dos.a80 similarity index 100% rename from fndos.a80 rename to fn_dos.a80 diff --git a/fndosline.a80 b/fn_dosline.a80 similarity index 100% rename from fndosline.a80 rename to fn_dosline.a80 diff --git a/fn_exe_boot.a80 b/fn_exe_boot.a80 index 0f36023..484e67a 100644 --- a/fn_exe_boot.a80 +++ b/fn_exe_boot.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 22.08.2025 savelij +; LAST UPDATE: 18.01.2026 savelij include macros.a80 @@ -182,4 +182,4 @@ MAIN EXEend: - include fnmain.a80 + include fn_main.a80 diff --git a/fninit.a80 b/fn_init.a80 similarity index 100% rename from fninit.a80 rename to fn_init.a80 diff --git a/fninput.a80 b/fn_input.a80 similarity index 100% rename from fninput.a80 rename to fn_input.a80 diff --git a/fn_macros.a80 b/fn_macros.a80 index 3ee5006..c202e2a 100644 --- a/fn_macros.a80 +++ b/fn_macros.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 06.07.2025 savelij +; LAST UPDATE: 21.01.2026 savelij MAKEWINDOW MACRO TYPE CALL JUMPS.MakeWindow @@ -149,3 +149,12 @@ HDR_FLX MACRO STRING,OFFSET,ENTRY,MODES ENDIF DB 3 DUP 0 ENDM + +; подмена LD A,0 на XOR A, иначе вставка как есть +LD_A MACRO NUM + IF NUM = 0 + XOR A + ELSE + LD A,NUM + ENDIF + ENDM diff --git a/fnmain.a80 b/fn_main.a80 similarity index 93% rename from fnmain.a80 rename to fn_main.a80 index 541bfda..d51e90c 100644 --- a/fnmain.a80 +++ b/fn_main.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 07.09.2025 savelij +; LAST UPDATE: 18.01.2026 savelij include fn_const.a80 include fn_macros.a80 @@ -379,12 +379,12 @@ ComExit CALL ResDrivers SPDSS DSSF.FREEMEM SPDSS DSSF.EXIT,0 - include fnwin.a80 - include fnprint.a80 - include fninput.a80 - include fnbar.a80 - include fnmouse.a80 - include fnsys.a80 + include fn_win.a80 + include fn_print.a80 + include fn_input.a80 + include fn_bar.a80 + include fn_mouse.a80 + include fn_sys.a80 ; Старт MainStartFN: DI @@ -463,19 +463,19 @@ MouseOnOff LD A,(MouseFlag) RET START_SORT - include fnsort.a80 + include fn_sort.a80 END_SORT START_TREE - include fntree.a80 + include fn_tree.a80 END_TREE - include fnpanel.a80 - include fndos.a80 + include fn_panel.a80 + include fn_dos.a80 - include fnwork.a80 - include fnmenu.a80 - include fninit.a80 - include fndosline.a80 - include fntab.a80 + include fn_work.a80 + include fn_menu.a80 + include fn_init.a80 + include fn_dosline.a80 + include fn_tab.a80 END_BLOCK_1: DEPHASE ; BASE_ADDR @@ -492,11 +492,11 @@ REZ2_BUFFERS _MINUSVAR .ENDPATHSRC, WORD ; адрес хвоста пути источника _MINUSVAR .CURR_DIRNAME, WORD ; текущий адрес в пути - include rez2_fnfunct.a80 - include rez2_fnsearch.a80 - include rez2_fnconfig.a80 - include rez2_fnerror.a80 - include rez2_fntab.a80 + include rez2_fn_funct.a80 + include rez2_fn_search.a80 + include rez2_fn_config.a80 + include rez2_fn_error.a80 + include rez2_fn_tab.a80 END_BLOCK_2: DEPHASE ; 0x4000 ; ==============resident 2============== @@ -522,14 +522,14 @@ REZ3_BUFFERS _INIT_VAR 0x8000 ; с конца страницы _MINUSVAR .DOShistory, 0x200 ;times 0x200 db 0 - _MINUSVAR .fnedit_ext, WorkBuffer_Size ;times 0x400 db 0 - _MINUSVAR .fnview_ext, WorkBuffer_Size ;times 0x400 db 0 - _MINUSVAR .fn_ext, WorkBuffer_Size ;times 0x400 db 0 + _MINUSVAR .fnedit_ext, EXT_BUF_SIZE ;times 0x400 db 0 + _MINUSVAR .fnview_ext, EXT_BUF_SIZE ;times 0x400 db 0 + _MINUSVAR .fn_ext, EXT_BUF_SIZE ;times 0x400 db 0 - include rez3_fnnext.a80 - include rez3_fnmark.a80 - include rez3_fnmisc.a80 - include rez3_fntab.a80 + include rez3_fn_extensions.a80 + include rez3_fn_mark.a80 + include rez3_fn_misc.a80 + include rez3_fn_tab.a80 END_BLOCK_3: DEPHASE ; 0x4000 ; ==============resident 3============== diff --git a/fnmenu.a80 b/fn_menu.a80 similarity index 100% rename from fnmenu.a80 rename to fn_menu.a80 diff --git a/fnmouse.a80 b/fn_mouse.a80 similarity index 100% rename from fnmouse.a80 rename to fn_mouse.a80 diff --git a/fnpanel.a80 b/fn_panel.a80 similarity index 100% rename from fnpanel.a80 rename to fn_panel.a80 diff --git a/fnprint.a80 b/fn_print.a80 similarity index 100% rename from fnprint.a80 rename to fn_print.a80 diff --git a/fnsort.a80 b/fn_sort.a80 similarity index 100% rename from fnsort.a80 rename to fn_sort.a80 diff --git a/fnsys.a80 b/fn_sys.a80 similarity index 100% rename from fnsys.a80 rename to fn_sys.a80 diff --git a/fntab.a80 b/fn_tab.a80 similarity index 100% rename from fntab.a80 rename to fn_tab.a80 diff --git a/fntree.a80 b/fn_tree.a80 similarity index 100% rename from fntree.a80 rename to fn_tree.a80 diff --git a/fn_version.a80 b/fn_version.a80 index 925f4f2..0015b58 100644 --- a/fn_version.a80 +++ b/fn_version.a80 @@ -1,7 +1,7 @@ -; LAST UPDATE: 10.01.2026 savelij +; LAST UPDATE: 22.01.2026 savelij FLEX_VERS -.NAVIGATOR EQU "1.16.05" +.NAVIGATOR EQU "1.16.06" .EDITOR EQU "1.11" .VIEWER EQU "1.07" diff --git a/fnwin.a80 b/fn_win.a80 similarity index 99% rename from fnwin.a80 rename to fn_win.a80 index 4747b3c..4f0a12a 100644 --- a/fnwin.a80 +++ b/fn_win.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 01.08.2025 savelij +; LAST UPDATE: 18.01.2026 savelij ;[]----------------------------------------------------------[] ;Процедура отчиски 0 экрана @@ -156,7 +156,7 @@ MakeWindow: EX (SP),IY JP Z,PutSBdown CP WINSUBOBJ.RESTOREWIN ; восстановление части экрана JP Z,RestoreWindow - CP WINSUBOBJ.ADRTEXT + CP WINSUBOBJ.ADRTEXT ; текст по указанному адресу JP Z,PutAdrTxtLine POP HL POP AF diff --git a/fnwork.a80 b/fn_work.a80 similarity index 99% rename from fnwork.a80 rename to fn_work.a80 index e098b92..22c0d28 100644 --- a/fnwork.a80 +++ b/fn_work.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 07.09.2025 savelij +; LAST UPDATE: 17.01.2026 savelij ;[]===========================================================[] CursUp LD A,(IY + PANEL.FILES_ALL) @@ -1466,6 +1466,7 @@ RunFLXfile LD A,(HL) RET ;[]-----------------------------------------------------------[] +; проверка по расширению согласно прописанному в EXT файле TestEXT: PUSH IX LD IXL,E LD IXH,D diff --git a/plugins/help/help_t.a80 b/plugins/help/help_t.a80 index 20eaa94..3b8a87a 100644 --- a/plugins/help/help_t.a80 +++ b/plugins/help/help_t.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 27.06.2025 savelij +; LAST UPDATE: 18.01.2026 savelij DB 0,0 DB " Flex Navigator",0,0 @@ -109,7 +109,7 @@ DB " All files - список всех файлов",0 DB " Execute files - список запускаемых файлов",0 DB " *.* - установить фильтр для списка файлов",0 - DB " Filtr... - фильтр для списка файлов",0 + DB " Filter... - фильтр для списка файлов",0 DB " Name - сортировать по имени",0 DB " Extention - сортировать по расширению",0 DB " Date - сортировать по дате",0 @@ -121,9 +121,10 @@ DB " Version... - информация о версии Flex Navigator",0,0,0," ",9 DB " ФАЙЛЫ РАСШИРЕНИЙ",0,0 DB " Для подключения внешних программ для работы с файлами существуют файлы",0 - DB "расширений. Flex Navigator использует три файла расширений:",0,0 + DB "расширений. Максимальный размер файла расширений - 1024 байта.",0 + DB "Flex Navigator использует три файла расширений:",0,0 DB " fn.ext - главный файл расширений",0 - DB " fnview.ext - файл расширений прострмотра",0 + DB " fnview.ext - файл расширений просмотра",0 DB " fnedit.ext - файл расширений редактора",0,0 DB " Формат файлов расширений:",0,0 DB " ext: [drive]:\\[path]\\filename.ext parametr",0,0 diff --git a/readme.md b/readme.md index f31a412..55c1de6 100644 --- a/readme.md +++ b/readme.md @@ -3,10 +3,11 @@ Flex Navigator ╨┤╨╗╤П ╨║╨╛╨╝╨┐╤М╤О╤В╨╡╤А╨░ Sprinter ╨б╨╛╨▒╤А╨░╨╜╨╜╤Л╨╡ ╤Д╨░╨╣╨╗╤Л ╨╖╨░╨▒╨╕╤А╨░╤В╤М ╨╕╨╖ ╨┐╨░╨┐╨║╨╕ fn -`FlexNavigator 1.16.05` -- ╨▓ ╤Д╤Г╨╜╨║╤Ж╨╕╨╕ ╤В╨╡╨║╤Б╤В╨╛╨▓╨╛╨│╨╛ ╨▓╨▓╨╛╨┤╨░ ╨╖╨░╨▒╨╗╨╛╨║╨╕╤А╨╛╨▓╨░╨╜╨░ ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨░ ╨║╨╗╨░╨▓╨╕╤И╨╕ - ALT, ╨▓╤Л╨╖╤Л╨▓╨░╨╗╨╛ ╨╖╨░╨▓╨╕╤Б╨░╨╜╨╕╨╡ ╨┐╤А╨╕ ╨┐╨╛╨┐╤Л╤В╨║╨╡ ╤Б╨┤╨╡╨╗╨░╤В╤М ╤Б╨╝╨╡╨╜╤Г ╨┤╨╕╤Б╨║╨░ (ALT/Fx). -- ╤Г╨▒╤А╨░╨╜╨╛ ╤Г╨┤╨░╨╗╨╡╨╜╨╕╨╡ ╨▓ ╤А╨╡╨╢╨╕╨╝╨╡ ╨┐╤А╨╛╤Б╨╝╨╛╤В╤А╨░ ╨┤╨╡╤А╨╡╨▓╨░. +`FlexNavigator 1.16.06` +- ╨┤╨╗╤П ╨╛╤И╨╕╨▒╨╛╨║ ╤Г ╨║╨╛╤В╨╛╤А╤Л╤Е ╨╜╨╡╤В ╤В╨╡╨║╤Б╤В╨░ ╨╛╨┐╨╕╤Б╨░╨╜╨╕╤П ╤В╨╡╨┐╨╡╤А╤М ╨▓╤Л╨┤╨░╨╡╤В ╨▓╤Б╨╡╨│╨┤╨░ + ╤В╨╡╨║╤Б╤В ╨╛╤И╨╕╨▒╨║╨╕ "Unknown Error". +- ╨╕╤Б╨┐╤А╨░╨▓╨╗╨╡╨╜╨░ ╨╛╤И╨╕╨▒╨║╨░ ╨┐╤А╨╕╨▓╨╛╨┤╤П╤Й╨░╤П ╨║ ╨▓╤Л╨╗╨╡╤В╤Г ╨┐╤А╨╕ ╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╨╜╨╕╨╕ ╨╜╨╡╤Б╨║╨╛╨╗╤М╨║╨╕╤Е ╤Д╨░╨╣╨╗╨╛╨▓ + ╨╜╨░ ╤Г╨╢╨╡ ╤Б╤Г╤Й╨╡╤Б╤В╨▓╤Г╤О╤Й╨╕╨╡ ╨╕ ╨▓╤Л╨▒╨╛╤А╨╡ ╨╛╤В╨╝╨╡╨╜╤Л ╨╛╤В ╨┐╤А╨╛╨┤╨╛╨╗╨╢╨╡╨╜╨╕╤П ╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╨╜╨╕╤П. `FileViewer.flx 1.07` - ╨╝╨╡╨╗╨║╨╛╨╡ ╨╕╤Б╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╨╡ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕ ╨▓╤Л╨▓╨╛╨┤╨░ ╨┤╨░╤В╤Л/╨▓╤А╨╡╨╝╨╡╨╜╨╕. diff --git a/rez2_fnconfig.a80 b/rez2_fn_config.a80 similarity index 100% rename from rez2_fnconfig.a80 rename to rez2_fn_config.a80 diff --git a/rez2_fnerror.a80 b/rez2_fn_error.a80 similarity index 96% rename from rez2_fnerror.a80 rename to rez2_fn_error.a80 index 1f8f07a..fe4a004 100644 --- a/rez2_fnerror.a80 +++ b/rez2_fn_error.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 01.08.2025 savelij +; LAST UPDATE: 22.01.2026 savelij ; !FIXIT переделать одинаковые окна с разным текстом для ошибок под автоматическую процедуру ;[]===========================================================[] @@ -17,18 +17,25 @@ DOSErrorR ;[x] 30/07/23 -bug JR .INT_ERR .calc_addr: LD HL,.ErrorWins -.INT_ERR ADD A,A ; *2 - ADD A,A ; *4 - ADD A,L +.INT_ERR EX DE,HL LD L,A - ADC A,H - SUB L - LD H,A + LD H,0 + ADD HL,HL ; *2 + ADD HL,HL ; *4 + ADD HL,DE .goto_addr LD E,(HL) INC HL LD D,(HL) ; адрес текста с Х позицией INC HL - LD A,(DE) + LD A,D + OR E + JR NZ,.L1 + LD HL,.UNKerror + LD E,(HL) + INC HL + LD D,(HL) + INC HL +.L1 LD A,(DE) INC DE LD C,A ; X позиция младший байт LD A,(DE) diff --git a/rez2_fnfunct.a80 b/rez2_fn_funct.a80 similarity index 97% rename from rez2_fnfunct.a80 rename to rez2_fn_funct.a80 index 50944d5..686f75c 100644 --- a/rez2_fnfunct.a80 +++ b/rez2_fn_funct.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 11.01.2026 savelij +; LAST UPDATE: 22.01.2026 savelij ;[]==========================================================[] CopyFilesR LD A,(IY + PANEL.FILES_ALL) @@ -288,7 +288,7 @@ CopyNextFile LD IX,(COPY.PathCurrFile) SPDSS DSSF.OPEN,,FILEMODE.R ; открытие на чтение JP C,CopyError1 LD (COPY.FHandleSrc),A - LD HL,(COPY.PathDst) ; открываем файл приемник + LD HL,(COPY.PathDst) ; меняем путь на путь куда копировать SPDSS DSSF.CHDIR JP C,CopyError2 LD IX,(COPY.PathCurrFile) @@ -305,12 +305,24 @@ CopyNextFile LD IX,(COPY.PathCurrFile) LD C,DSSF.CREATE .L2 LD A,(IX + FileHDR.Attr) SPDSS ; создание файла + LD (COPY.FHandleDst),A JR NC,.CopyLp2 CP ERR_DSS.FILE_EXISTS JP NZ,CopyError2 - CALL OverWrite ; файл существут, запрос на перезапись -.CopyLp2 LD (COPY.FHandleDst),A - LD HL,(COPY.CurrReadBytes) + CALL OverWrite ; файл существует, запрос на перезапись + AND A ; OverWrite.REWRITE + JR Z,.CopyLp2 ; продолжать с перезаписью + DEC A ; OverWrite.SKIP + JP Z,CopyNextFile.CloseFile1 ; пропуск копирования +; прерывание копирования OverWrite.BREAK + LD A,(COPY.FHandleSrc) + SPDSS DSSF.CLOSE + LD A,(COPY.MemID) + SPDSS DSSF.FREEMEM + JP CopyEnd + +; перезапись файла и продолжение +.CopyLp2 LD HL,(COPY.CurrReadBytes) LD A,H OR L LD HL,(COPY.CurrReadBytes + 2) @@ -1000,7 +1012,14 @@ CopyErrorFileDelete: RET ;-------------------------------------------------------------- -OverWrite CALL PointerMousePointer +; Запрос при копировании в существующий файл на продолжение. +OverWrite + _INIT_VAR + _SETVAR .REWRITE ; перезапись файла + _SETVAR .SKIP ; пропуск копирования + _SETVAR .BREAK ; прекращение копирования + + CALL PointerMousePointer MAKEWINDOW WINSUBOBJ.STORE W_MAIN 180,88,280,56 W_FILL 4,2,272,10,COLORI.GREEN @@ -1036,13 +1055,13 @@ OverWrite CALL PointerMousePointer LD BC,114 LD A,COLORP.HIGHGRAY + COLORI.BLACK CALL PrintPathCentr -OvWrtLp LD IX,REZ2TAB.OverWrtTab +.OvWrtLp LD IX,REZ2TAB.OverWrtTab CALL CheckCoordsMouse SPDSS DSSF.SCANKEY - JR Z,OvWrtLp + JR Z,.OvWrtLp LD A,B OR A - JR NZ,OvWrtLp + JR NZ,.OvWrtLp LD A,E CP 0x1B LD HL,OverExit @@ -1061,7 +1080,7 @@ OvWrtLp LD IX,REZ2TAB.OverWrtTab LD HL,OverSkip JR Z,OvrJump CP 'C' - JR NZ,OvWrtLp + JR NZ,.OvWrtLp LD HL,OverExit OvrJump WINDOWCLOSE @@ -1079,7 +1098,9 @@ OverWrtFile CALL PointerMouseClock POP HL LD A,(IX + FileHDR.Attr) SPDSS DSSF.CREATE - RET + LD (COPY.FHandleDst),A ; при перезаписи обновляем хендлер выходного файла + LD_A OverWrite.REWRITE ; выход с перезаписью файла + RET OverSkip CALL PointerMouseClock LD IX,(COPY.PathCurrFile) @@ -1105,21 +1126,24 @@ OverSkip CALL PointerMouseClock LD (IX + PROGRESSBAR.CURR_PAGE + 2),L LD (IX + PROGRESSBAR.CURR_PAGE + 3),H CALL DrawProgressBar - LD HL,CopyNextFile.CloseFile1 - EX (SP),HL +; LD HL,CopyNextFile.CloseFile1 +; EX (SP),HL + LD A,OverWrite.SKIP ; выход с пропуском копирования RET -OverExit INC SP - INC SP - LD IX,(COPY.PathCurrFile) - BIT FileHDR.B_MARK,(IX + FileHDR.Flag) - JP Z,CopyNextFile.CloseFile1 - LD A,(COPY.FHandleSrc) - SPDSS DSSF.CLOSE - LD A,(COPY.MemID) - SPDSS DSSF.FREEMEM - POP IY - JP CopyEnd +OverExit LD A,OverWrite.BREAK ; выход с прекращением копирования + RET +; INC SP +; INC SP +; LD IX,(COPY.PathCurrFile) +; BIT FileHDR.B_MARK,(IX + FileHDR.Flag) +; JP Z,CopyNextFile.CloseFile1 +; LD A,(COPY.FHandleSrc) +; SPDSS DSSF.CLOSE +; LD A,(COPY.MemID) +; SPDSS DSSF.FREEMEM +; POP IY +; JP CopyEnd ; Конверсия размера в байтах в количество страниц ; На входе: diff --git a/rez2_fnsearch.a80 b/rez2_fn_search.a80 similarity index 100% rename from rez2_fnsearch.a80 rename to rez2_fn_search.a80 diff --git a/rez2_fntab.a80 b/rez2_fn_tab.a80 similarity index 100% rename from rez2_fntab.a80 rename to rez2_fn_tab.a80 diff --git a/rez3_fnnext.a80 b/rez3_fn_extensions.a80 similarity index 76% rename from rez3_fnnext.a80 rename to rez3_fn_extensions.a80 index f07c5dd..8078a73 100644 --- a/rez3_fnnext.a80 +++ b/rez3_fn_extensions.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 15.08.2025 savelij +; LAST UPDATE: 18.01.2026 savelij ;[]==========================================================[] InitExtention: LD HL,INIFILES.ExtName1 @@ -26,16 +26,17 @@ InitExt: LD (.EXTdata),DE PUSH DE SPDSS DSSF.CLOSE POP BC - LD HL,WorkBuffer - LD DE,0x0000 + LD HL,WorkBuffer ; входной буфер + LD DE,0x0000 ; буфер распакованного файла расширений .EXTdata EQU $-2 EXX - LD BC,0x03FE + LD BC,EXT_BUF_SIZE - 2 ; размер выходного буфера EXX -.loop: CALL InitExtLine - JR NC,.loop +.loop: CALL InitExtLine ; распаковка одного расширения + JR NC,.loop ; распаковка следующего расширения если не кончились RET +; распаковка файла расширений (одно расширение за вызов) InitExtLine: LD (.InExtSv),DE SUB A LD (DE),A @@ -59,21 +60,22 @@ InitExtLine: LD (.InExtSv),DE RET Z DEC HL INC BC - LD IXL,0x04 + LD IXL,3 + 1 ; размер расширения 3 + 1 байт разделителя ":" +; копирование расширения файла .L1: LD A,B OR C SCF - RET Z + RET Z ; контроль размера входного файла EXX LD A,B OR C SCF EXX - RET Z + RET Z ; контроль размера выходного буфера INC HL DEC BC LD A,(HL) - CP 0x20 + CP ' ' JR C,.L4 CP '`' JR Z,.L4 @@ -94,7 +96,7 @@ InitExtLine: LD (.InExtSv),DE OR C SCF EXX - RET Z + RET Z ; контроль размера выходного буфера JR .L2 .L3: LD (DE),A @@ -104,6 +106,7 @@ InitExtLine: LD (.InExtSv),DE EXX DEC IXL JR NZ,.L1 +; копирование строки запуска с параметрами .L4: LD DE,(.InExtSv) .L5: LD A,B OR C @@ -157,7 +160,7 @@ InitExtLine: LD (.InExtSv),DE JR Z,.L4 CP 0x09 JR Z,.L8 - CP 0x20 + CP ' ' JR Z,.L8 JR C,.L4 LD (DE),A @@ -180,7 +183,7 @@ InitExtLine: LD (.InExtSv),DE LD A,(HL) CP 0x0D JR Z,.L10 - CP 0x20 + CP ' ' JR C,.L4 LD (DE),A INC DE diff --git a/rez3_fnmark.a80 b/rez3_fn_mark.a80 similarity index 100% rename from rez3_fnmark.a80 rename to rez3_fn_mark.a80 diff --git a/rez3_fnmisc.a80 b/rez3_fn_misc.a80 similarity index 100% rename from rez3_fnmisc.a80 rename to rez3_fn_misc.a80 diff --git a/rez3_fntab.a80 b/rez3_fn_tab.a80 similarity index 100% rename from rez3_fntab.a80 rename to rez3_fn_tab.a80