diff --git a/docs/fn_api_0.5.txt b/docs/fn_api_0.5.txt index 877c770..2d32cf7 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 от 04.08.2025 * +* doc v0.5 от 07.09.2025 * * * []========================================================================[] @@ -685,7 +685,7 @@ []------------------------------------------------------------------------[] - Общие переменные со смещение 0xC0: + Общие переменные со смещение 0xC0 от начала таблицы переходов: NUM_DEVICES 1 Количество устройств TreeFlag 1 Флаг дерева директорий @@ -706,8 +706,8 @@ RAMPAGES .RIGHTPANEL 1 Страница каталога Правой панели .BuffPg1 1 .BuffPg2 1 -.BuffPg3 1 -.BuffPg4 1 -.BuffPgEnd 1 +.BuffPg3 1 используется копировщиком файлов/директорий +.BuffPg4 1 используется сортировкой, работа с деревом директорий +.BuffPgEnd 1 байт 0xFF маркер конца списка страниц .FILES_COUNT 2 количество помеченных файлов .FILES_BYTES 5 размер помеченных файлов в байтах diff --git a/docs/history.txt b/docs/history.txt index e9ca579..deb854e 100644 --- a/docs/history.txt +++ b/docs/history.txt @@ -1,6 +1,18 @@ -14.08.2025 +07.09.2025 +FlexNavigator 1.16.04 +- сортировка и копирование файлов/директорий теперь не использует + страницы панелей. +- убрано переставление страниц в списке выделенных при сортировке. +- доделано копирование директорий, пока только той что под курсором. +- сделано/переделано измерение размера директории в байтах под курсором. +- добавлено описание форм полей ввода. +- перенесены некоторые tab таблицы. +- перенесены буферы для загрузки ini файликов. + +27.08.2025 FlexNavigator 1.16.03 +- исправлено формирование пути до папки плагинов. - MISC функции перенесены из 2 резидента в 3. - перераспределение TAB таблиц. - в описание Flex Navigator API добавлено описание глобальных diff --git a/docs/todo.txt b/docs/todo.txt index 19e122e..9a4175b 100644 --- a/docs/todo.txt +++ b/docs/todo.txt @@ -1,8 +1,11 @@ Flex navigator TODO: +[] в копировании файлов/директорий доделать обработку ошибок при создании директорий. +[] в плагине редактора исправить не сохранение введенныой строки при нажатиии функциональных клавиш не связанных с редактированием. +[] для работы в деревом директорий убрать подмену страниц в списке выданных. +[] добавить стрелки влево/вправо для выбора дисков если больше 10. [] добавить в настройки автопоказ или по ENTER при перемещении по дереву каталогов -[] добавить в настройки выбор менять ли активную панель при смене диска на не активной панели [] при выводе дерева каталогов сделать скролл влево/вправо если дерево не влезает по горизонтали [] по кнопке F6 только переименование, а должно быть переименование/перемещение файла если на панелях разные пути [] переделать захордкоженные координаты, переделать на привязку к координатам окна @@ -11,6 +14,7 @@ Flex navigator TODO: [] плагин для создания форм окон [?] вызов и взаимодействие плагина с плагином +[x] (есть изначально) добавить в настройки выбор менять ли активную панель при смене диска на не активной панели [x] загрузка FLX плагина по имени без запуска [x] ввод в командную строку и нажатие ALT+F1/F2 (выбор драйва) подвисает [x] сортировщик сортирует "..", а не должен diff --git a/fn/flx/fneditor.flx b/fn/flx/fneditor.flx index e420c45..34ac8f9 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 554eb8f..311082a 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 af93b9a..1957c5c 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 7f7acaf..d0b3b01 100644 Binary files a/fn/fn.exe and b/fn/fn.exe differ diff --git a/fn/history.txt b/fn/history.txt index e9ca579..deb854e 100644 --- a/fn/history.txt +++ b/fn/history.txt @@ -1,6 +1,18 @@ -14.08.2025 +07.09.2025 +FlexNavigator 1.16.04 +- сортировка и копирование файлов/директорий теперь не использует + страницы панелей. +- убрано переставление страниц в списке выделенных при сортировке. +- доделано копирование директорий, пока только той что под курсором. +- сделано/переделано измерение размера директории в байтах под курсором. +- добавлено описание форм полей ввода. +- перенесены некоторые tab таблицы. +- перенесены буферы для загрузки ini файликов. + +27.08.2025 FlexNavigator 1.16.03 +- исправлено формирование пути до папки плагинов. - MISC функции перенесены из 2 резидента в 3. - перераспределение TAB таблиц. - в описание Flex Navigator API добавлено описание глобальных diff --git a/fn_const.a80 b/fn_const.a80 index 5fa0eb8..bacc202 100644 --- a/fn_const.a80 +++ b/fn_const.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 07.09.2025 savelij NUM_FILES_PANEL EQU 17 ; количество файлов в столбце панели NUM_PAGES_FN EQU 7 ; количество страниц памяти для работы FN @@ -36,7 +36,6 @@ FLXMODES ; 1 - адрес компиляции и работы в адресах 0x4000-0x7FFF -LenInpData EQU 12 ; какое-то смещение для метки SearchStr CursTimer EQU 6 ; "частота" моргания текстового курсора Step EQU 8 ; ширина символа для перемещения курсора при вводе текста MainPullMenu EQU 6 ; количество пунктов в главном меню @@ -123,6 +122,7 @@ WINSUBOBJ PANEL _INIT_VAR _SETVAR .PANELFLAG, BYTE ; Флаг панели бит 7 - бит выделенности + ; бит 1 - страница для сортировки ; бит 0 - номер панели _SETVAR .VIEWFLAG, BYTE ; Флаг вида панели 0 - краткая панель ; бит 0 - подробная панель @@ -154,6 +154,7 @@ PANEL PANELFLAG _BITMASK PRNDOSPATH, 7 ; =1-печатать путь DOS + _BITMASK DIRPAGE, 1 ; =1-A-номер страницы, =0-страницы панелей _BITMASK SIDE, 0 ; =1-правая панель, =0-левая панель VIEWFLAG @@ -259,6 +260,20 @@ FORMTABL _BITMASK CLOSEWIN, 0 ; вызвать функцию закрытия окна перед запуском программы по левой кнопке _BITMASK ENDTABL, 7 ; бит в .XMINH указатель на конец списка +;[]----------------------------------------------------------[] +INPUTFORM + _INIT_VAR + _SETVAR .MAXLEN, BYTE ; +00 Максимальная длина строки + _SETVAR .FLAG, BYTE ; +01 Флаг готовности + _SETVAR .CURR_X, BYTE ; +02 текущая X позиция курсора + _SETVAR .CURRADD_X, BYTE ; +03 текущая AddX + _SETVAR .CURR_SYMBOLS, BYTE ; +04 количество введенных символов + _SETVAR .SCR_POS_X, WORD ; +05 X позиция строки на экране + _SETVAR .SCR_POS_Y, WORD ; +07 Y позиция строки на экране + _SETVAR .SCR_LEN_X, WORD ; +09 X длина строки на экране + _SETVAR .COLOR, BYTE ; +0B Цвет строки + _SETVAR .BUFLINE, 0 ; +0C ...сама строка + ; база таблицы переходов для вызова из плагинов JUMPS .JUMPSIZE EQU 3 @@ -331,8 +346,8 @@ JUMPS _SETVAR .RIGHTPANEL, BYTE ; Страница каталога Правой панели _SETVAR .BuffPg1, BYTE _SETVAR .BuffPg2, BYTE - _SETVAR .BuffPg3, BYTE - _SETVAR .BuffPg4, BYTE + BYTE + _SETVAR .BuffPg3, BYTE ; используется копировщиком файлов/директорий + _SETVAR .BuffPg4, BYTE + BYTE ; используется сортировкой, работа с деревом директорий _SETVAR .FILES_COUNT, WORD _SETVAR .FILES_BYTES, DWORD + 1 @@ -366,14 +381,17 @@ FILENAME .EDIT_FLX EQU "FNEDITOR.FLX" .VIEW_FLX EQU "FNVIEWER.FLX" +; внутренние ошибки FNinternal _INIT_VAR 0xF0 _SETVAR .PlugNotFound ; отладочное, не менять по избежание глюков PLUGS_ENABLE EQU 0 ; меню плагинов -TREE_REZID EQU 0 -MARK_DIR EQU 0 ; выбор директории с подсчетом размера всех файлов +MARK_DIR EQU 1 ; выбор директории с подсчетом размера всех файлов TREE_DIR_ENTER EQU 0 ; показ содержимого директории в дереве по ENTER CORR_FILENAME EQU 1 ; преобразование символов имени файла -MISC2REZ3 EQU 0 ; переезд misc.a80 из резидента 2 в резидента 3 + +; запрещенные символы в коротких именах на FAT +; 22 2A 2B 2C 2E 2F 3A 3B 3C 3D 3E 3F 5B 5C 5D 7C +; \" * + , . / : ; < = > ? [ \\ ] | diff --git a/fn_exe_boot.a80 b/fn_exe_boot.a80 index 59ce872..0f36023 100644 --- a/fn_exe_boot.a80 +++ b/fn_exe_boot.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 03.08.2025 savelij +; LAST UPDATE: 22.08.2025 savelij include macros.a80 @@ -52,7 +52,7 @@ EntryExec: DI LD A,(MAIN.FNMAIN) ; set pages from 0xC000 SETPORT WINSP.CPU3,,0 LD HL,BASE_ADDR ; FNMAIN - LD DE,END_BLOCK_1 - START_BLOCK_1 + LD DE,BLOCK1_SIZE LD A,(MAIN.hFile) SPDSS DSSF.READ JP C,disk_error @@ -60,7 +60,7 @@ EntryExec: DI LD A,(MAIN.FNREZ2) SETPORT WINSP.CPU3,,0 LD HL,0xC000 ; FNREZ2 - LD DE,END_BLOCK_2 - START_BLOCK_2 + LD DE,BLOCK2_SIZE LD A,(MAIN.hFile) SPDSS DSSF.READ JP C,disk_error @@ -88,7 +88,7 @@ EntryExec: DI LD A,(MAIN.FNREZ3) ; FNREZ3 SETPORT WINSP.CPU3,,0 LD HL,0xC000 - LD DE,END_BLOCK_3 - START_BLOCK_3 + LD DE,BLOCK3_SIZE LD A,(MAIN.hFile) SPDSS DSSF.READ JP C,disk_error diff --git a/fn_version.a80 b/fn_version.a80 index d94a820..2595a23 100644 --- a/fn_version.a80 +++ b/fn_version.a80 @@ -1,7 +1,7 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 07.09.2025 savelij FLEX_VERS -.NAVIGATOR EQU "1.16.03" +.NAVIGATOR EQU "1.16.04" .EDITOR EQU "1.11" .VIEWER EQU "1.07" diff --git a/fndos.a80 b/fndos.a80 index eed46b6..ba9fe74 100644 --- a/fndos.a80 +++ b/fndos.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 31.07.2025 savelij +; LAST UPDATE: 07.09.2025 savelij ;[]----------------------------------------------------------[] BegDIRECTORY LD HL,BegDIR @@ -78,13 +78,8 @@ NewDIRTree PUSH IY ADD HL,DE INC HL INC HL - IF TREE_REZID - CALL RESIDENT.FindTreeDIR - CALL RESIDENT.MakeTreePath - ELSE CALL FindTreeDIRR CALL MakeTreePathR - ENDIF PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel diff --git a/fndosline.a80 b/fndosline.a80 index df68e22..50ba72c 100644 --- a/fndosline.a80 +++ b/fndosline.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 07.09.2025 savelij ;[]==========================================================[] DOSline SUB A @@ -153,11 +153,7 @@ RunDLine DEC HL ADD HL,DE INC HL INC HL - IF TREE_REZID - CALL RESIDENT.FindTreeDIR - ELSE CALL FindTreeDIRR - ENDIF CALL PrintDIR CALL PrnFileInfo PUSH IY @@ -348,7 +344,7 @@ SaveDOSline PUSH BC CALL FindHistory POP BC - LD DE,BUFFERS.DOShistory + BUFFERS.DOShistory_Size + LD DE,REZ3_BUFFERS.DOShistory + REZ3_BUFFERS.DOShistory_Size OR A EX DE,HL SBC HL,DE @@ -365,7 +361,7 @@ SaveDOSline INC HL EX DE,HL PUSH HL - LD BC,BUFFERS.DOShistory + LD BC,REZ3_BUFFERS.DOShistory OR A SBC HL,BC LD C,L @@ -379,7 +375,7 @@ SaveDOSline LDDR .L2 POP BC LD HL,DOSinp - LD DE,BUFFERS.DOShistory + LD DE,REZ3_BUFFERS.DOShistory LD A,C INC A LD (DE),A @@ -427,7 +423,7 @@ GetDOShistory LD IX,DOSstr SETPORT WINSP.CPU1,,0 RET -FindHistory LD HL,BUFFERS.DOShistory +FindHistory LD HL,REZ3_BUFFERS.DOShistory OR A RET Z LD B,A @@ -448,7 +444,7 @@ DOSInputLine LD (InpLnData),IX .L1 CALL InsInpLnCol PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE LD E,(IX + 0x04) ADD HL,DE @@ -652,7 +648,7 @@ InsertWord LD A,(IX + 0x04) ;InpytSymb ; Ввод в середину текста PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE LD E,(IX + 0x04) ADD HL,DE @@ -669,7 +665,7 @@ InsertWord LD A,(IX + 0x04) ;InpytSymb POP BC NotInsWord PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE LD E,(IX + 0x02) ADD HL,DE @@ -695,13 +691,13 @@ ShellFile: db "X:\\SYSTEM.EXE /C ",0 ; шел BATExtension: db ".BAT",0 EXEExtension: db ".EXE" EndOfString: db 0 + DOSstr DB 0x80,0x00 .posX DB 0x00 .addX DB 0x00 .slen DB 0x00 DW 256,231,376 DB COLORP.PANEL + COLORI.FILES - DOSinp DB 0x81 DUP 0 HistSpace DEFW 0x200 diff --git a/fninit.a80 b/fninit.a80 index 9530f17..478fa6e 100644 --- a/fninit.a80 +++ b/fninit.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 27.08.2025 savelij ;[]==========================================================[] InitVideoMode @@ -160,15 +160,19 @@ FirstInit ; создание пути для запуска FLX плагинов с привязкой к пути FN LD HL,BUF_REZ2.FlexDIRECTORY LD DE,BUF_REZ2.FLXdir -.L6 LD A,(HL) - AND A + XOR A +.L6 CP (HL) JR Z,.L7 LDI JR .L6 .L7 LD HL,.DIRFLX - LD BC,.EDIRFLX - .DIRFLX - LDIR +.L9 CP (HL) + JR Z,.L8 + LDI + JR .L9 + +.L8 LD (DE),A LD (LOADFLX4RUN.NAMEFLX),DE LD HL,BUF_REZ2.FlexDIRECTORY SPDSS DSSF.CHDIR @@ -258,7 +262,7 @@ FirstInit LD (InitFlg),A RET -.DIRFLX DB "FLX\\" +.DIRFLX DZ "FLX\\" .EDIRFLX ; обновление в таблице выбора дисков на панели diff --git a/fninput.a80 b/fninput.a80 index 610f3c5..6938646 100644 --- a/fninput.a80 +++ b/fninput.a80 @@ -1,32 +1,32 @@ -; LAST UPDATE: 01.08.2025 savelij +; LAST UPDATE: 25.08.2025 savelij ;[]----------------------------------------------------------[] InputLine LD (InpLnData),IX LD (.InpMous),HL - SET 7,(IX+0x01) + SET 7,(IX + INPUTFORM.FLAG) SUB A - LD (IX+0x02),A - LD (IX+0x03),A + LD (IX + INPUTFORM.CURR_X),A + LD (IX + INPUTFORM.CURRADD_X),A CALL InsInpLnCol PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE PUSH HL - LD E,(IX+0x04) + LD E,(IX + INPUTFORM.CURR_SYMBOLS) ADD HL,DE LD (HL),D - LD (IX+0x02),E + LD (IX + INPUTFORM.CURR_X),E POP HL LD DE,WorkBuffer - LD A,(IX+0x02) + LD A,(IX + INPUTFORM.CURR_X) LD (DE),A INC DE - LD A,(IX+0x03) + LD A,(IX + INPUTFORM.CURRADD_X) LD (DE),A INC DE - LD A,(IX+0x04) + LD A,(IX + INPUTFORM.CURR_SYMBOLS) LD (DE),A INC DE LD C,A @@ -49,16 +49,16 @@ InputLine LD (InpLnData),IX BIT KEYBSTAT.B_CTRL,B JR NZ,.NextInpKeys LD IX,InpTable1 -.NextInpKeys LD L,(IX+0x00) +.NextInpKeys LD L,(IX + 0) INC L JR Z,.InpLineLp1 INC IX DEC L - LD H,(IX+0x00) + LD H,(IX + 0) INC IX - LD C,(IX+0x00) + LD C,(IX + 0) INC IX - LD B,(IX+0x00) + LD B,(IX + 0) INC IX OR A SBC HL,DE @@ -94,39 +94,40 @@ InputLine LD (InpLnData),IX CALL ResCursor PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE EX DE,HL LD HL,WorkBuffer LD A,(HL) INC HL - LD (IX+0x02),A + LD (IX + INPUTFORM.CURR_X),A LD A,(HL) INC HL - LD (IX+0x03),A + LD (IX + INPUTFORM.CURRADD_X),A LD A,(HL) INC HL - LD (IX+0x04),A + LD (IX + INPUTFORM.CURR_SYMBOLS),A LD C,A LD B,0x00 - LD A,B - OR C +; LD A,B +; OR C + AND A SCF RET Z LDIR RET -InpLnData DEFW 0x0000 ; Адрес описателя строки - ; +00 Максимальная длина строки - ; +01 Флаг готовности - ; +02 текущая X позиция курсора - ; +03 текущая AddX - ; +04 количество введенных символов - ; +05 X позиция строки на экране - ; +07 Y позиция строки на экране - ; +09 X длина строки на экране - ; +0B Цвет строки - ; +0C ...сама строка +InpLnData DEFW 0x0000 ; Адрес описателя строки + ; +00 Максимальная длина строки + ; +01 Флаг готовности + ; +02 текущая X позиция курсора + ; +03 текущая AddX + ; +04 количество введенных символов + ; +05 X позиция строки на экране + ; +07 Y позиция строки на экране + ; +09 X длина строки на экране + ; +0B Цвет строки + ; +0C ...сама строка InpTable1 DW SC.ESC << 8 | 0x1B, InputLine.InputLineExitCancel DW SC.ENTER << 8 | 0x0D, InputLine.InputLineExitOk @@ -147,22 +148,22 @@ InpTable2 DW SC.X4 << 8, ILwordL InsertSymbol CP ' ' RET C EX AF,AF' - BIT 7,(IX+0x01) ; ready + BIT 7,(IX + INPUTFORM.FLAG) ; ready CALL NZ,ClearInpLn - LD A,(IX+0x04) ; InpytSymb - SUB (IX+0x00) ; Max len + LD A,(IX + INPUTFORM.CURR_SYMBOLS) ; InpytSymb + SUB (IX + INPUTFORM.MAXLEN) ; Max len RET NC - LD A,(IX+0x04) - SUB (IX+0x02) + LD A,(IX + INPUTFORM.CURR_SYMBOLS) + SUB (IX + INPUTFORM.CURR_X) JR Z,NotInsert ; Ввод в середину текста LD C,A LD B,0x00 PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE - LD E,(IX+0x04) + LD E,(IX + INPUTFORM.CURR_SYMBOLS) ADD HL,DE LD E,L LD D,H @@ -170,127 +171,129 @@ InsertSymbol CP ' ' LDDR NotInsert PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE - LD E,(IX+0x02) + LD E,(IX + INPUTFORM.CURR_X) ADD HL,DE EX AF,AF' LD (HL),A - INC (IX+0x04) - INC (IX+0x02) + INC (IX + INPUTFORM.CURR_SYMBOLS) + INC (IX + INPUTFORM.CURR_X) JP PrintInpLn ; Clear Buffer -ClearInpLn RES 7,(IX+0x01) +ClearInpLn RES 7,(IX + INPUTFORM.FLAG) PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE - LD B,(IX+0x00) + LD B,(IX + INPUTFORM.MAXLEN) SUB A .L1 LD (HL),A INC HL DJNZ .L1 - LD (IX+0x02),A - LD (IX+0x03),A - LD (IX+0x04),A + LD (IX + INPUTFORM.CURR_X),A + LD (IX + INPUTFORM.CURRADD_X),A + LD (IX + INPUTFORM.CURR_SYMBOLS),A JP PrintInpLn ; Курсор влево на одно место -ILleft RES 7,(IX+0x01) - LD A,(IX+0x02) +ILleft RES 7,(IX + INPUTFORM.FLAG) + LD A,(IX + INPUTFORM.CURR_X) DEC A RET M - LD (IX+0x02),A + LD (IX + INPUTFORM.CURR_X),A JP PrintInpLn ; Курсор вправо на одно место -ILright RES 7,(IX+0x01) - LD A,(IX+0x02) - CP (IX+0x04) +ILright RES 7,(IX + INPUTFORM.FLAG) + LD A,(IX + INPUTFORM.CURR_X) + CP (IX + INPUTFORM.CURR_SYMBOLS) RET Z - INC (IX+0x02) + INC (IX + INPUTFORM.CURR_X) JP PrintInpLn ; delete -ILdelet BIT 7,(IX+0x01) ; ready +ILdelet BIT 7,(IX + INPUTFORM.FLAG) ; ready CALL NZ,ClearInpLn - LD A,(IX+0x02) + LD A,(IX + INPUTFORM.CURR_X) OR A RET Z PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE - LD E,(IX+0x02) + LD E,(IX + INPUTFORM.CURR_X) ADD HL,DE LD E,L LD D,H DEC DE - LD A,(IX+0x04) - SUB (IX+0x02) + LD A,(IX + INPUTFORM.CURR_SYMBOLS) + SUB (IX + INPUTFORM.CURR_X) JR Z,ILDel1 LD C,A - LD B,0x00 + XOR A + LD B,A LDIR - SUB A +; SUB A ILDel1 LD (DE),A - DEC (IX+0x02) - DEC (IX+0x04) + DEC (IX + INPUTFORM.CURR_X) + DEC (IX + INPUTFORM.CURR_SYMBOLS) JP PrintInpLn ; Delete Char in Current Position -IL_del_ BIT 7,(IX+0x01) ; ready +IL_del_ BIT 7,(IX + INPUTFORM.FLAG) ; ready CALL NZ,ClearInpLn PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE - LD E,(IX+0x02) + LD E,(IX + INPUTFORM.CURR_X) ADD HL,DE INC HL LD E,L LD D,H DEC DE - LD A,(IX+0x04) - SUB (IX+0x02) + LD A,(IX + INPUTFORM.CURR_SYMBOLS) + SUB (IX + INPUTFORM.CURR_X) RET Z LD C,A - LD B,0x00 - LDIR - SUB A + XOR A + LD B,A + LDIR +; SUB A LD (DE),A - DEC (IX+0x04) + DEC (IX + INPUTFORM.CURR_SYMBOLS) JP PrintInpLn ; Home -ILhome RES 7,(IX+0x01) - LD A,(IX+0x02) +ILhome RES 7,(IX + INPUTFORM.FLAG) + LD A,(IX + INPUTFORM.CURR_X) OR A RET Z SUB A - LD (IX+0x02),A + LD (IX + INPUTFORM.CURR_X),A JP PrintInpLn ; End string -ILend RES 7,(IX+0x01) - LD A,(IX+0x04) - CP (IX+0x02) +ILend RES 7,(IX + INPUTFORM.FLAG) + LD A,(IX + INPUTFORM.CURR_SYMBOLS) + CP (IX + INPUTFORM.CURR_X) RET Z - LD (IX+0x02),A + LD (IX + INPUTFORM.CURR_X),A JP PrintInpLn ; Word right -ILwordR RES 7,(IX+0x01) - LD A,(IX+0x04) - SUB (IX+0x02) +ILwordR RES 7,(IX + INPUTFORM.FLAG) + LD A,(IX + INPUTFORM.CURR_SYMBOLS) + SUB (IX + INPUTFORM.CURR_X) RET Z LD B,A PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE - LD E,(IX+0x02) + LD E,(IX + INPUTFORM.CURR_X) ADD HL,DE LD C,E .L2 LD A,(HL) @@ -319,19 +322,19 @@ ILwordR RES 7,(IX+0x01) .L1 INC HL INC C DJNZ .L3 -.L4 LD (IX+0x02),C +.L4 LD (IX + INPUTFORM.CURR_X),C JP PrintInpLn ; Word left -ILwordL RES 7,(IX+0x01) - LD A,(IX+0x02) +ILwordL RES 7,(IX + INPUTFORM.FLAG) + LD A,(IX + INPUTFORM.CURR_X) OR A RET Z LD B,A LD C,B PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE LD E,C ADD HL,DE @@ -344,7 +347,7 @@ ILwordL RES 7,(IX+0x01) JR Z,.L2 CP '.' JR Z,.L2 - CP 0x5C + CP '\\' JR Z,.L2 DJNZ .L3 JR .L5 @@ -362,23 +365,23 @@ ILwordL RES 7,(IX+0x01) DEC C DJNZ .L2 .L4 INC C -.L5 LD (IX+0x02),C +.L5 LD (IX + INPUTFORM.CURR_X),C JP PrintInpLn ; Delete word -ILdelWR RES 7,(IX+0x01) - LD A,(IX+0x02) +ILdelWR RES 7,(IX + INPUTFORM.FLAG) + LD A,(IX + INPUTFORM.CURR_X) OR A RET Z LD B,A LD C,B PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE LD E,C ADD HL,DE - LD A,(IX+0x04) + LD A,(IX + INPUTFORM.CURR_SYMBOLS) SUB B LD E,A PUSH HL @@ -423,14 +426,14 @@ ILdelWR RES 7,(IX+0x01) DJNZ .L4 .L2 INC HL INC C -.L6 LD A,(IX+0x02) - LD (IX+0x02),C +.L6 LD A,(IX + INPUTFORM.CURR_X) + LD (IX + INPUTFORM.CURR_X),C SUB C LD C,A EX AF,AF' - LD A,(IX+0x04) + LD A,(IX + INPUTFORM.CURR_SYMBOLS) SUB C - LD (IX+0x04),A + LD (IX + INPUTFORM.CURR_SYMBOLS),A LD C,E LD B,0x00 EX DE,HL @@ -449,26 +452,26 @@ ILdelWR RES 7,(IX+0x01) JP PrintInpLn ;[]----------------------------------------------------------[] -InsInpLnCol LD L,(IX+0x07) - LD H,(IX+0x08) +InsInpLnCol LD L,(IX + INPUTFORM.SCR_POS_Y) + LD H,(IX + INPUTFORM.SCR_POS_Y + 1) LD (FillILy),HL - LD A,(IX+0x0B) - AND 0x0F ; INK + LD A,(IX + INPUTFORM.COLOR) + AND 0x0F ; INK LD C,A RLCA RLCA RLCA RLCA OR C - LD HL,PrnINKl ; INK буфер + LD HL,PrnINKl ; INK буфер LD B,0x08 CPL .L1 LD (HL),A INC HL DJNZ .L1 LD B,A - LD A,(IX+0x0B) - AND 0xF0 ; PAPER + LD A,(IX + INPUTFORM.COLOR) + AND 0xF0 ; PAPER LD C,A RRCA RRCA @@ -477,7 +480,7 @@ InsInpLnCol LD L,(IX+0x07) LD (FillILc),A OR C XOR B - LD HL,PrnPAPl ; PAPER буфер + LD HL,PrnPAPl ; PAPER буфер LD B,0x08 .L2 LD (HL),A INC HL @@ -485,46 +488,46 @@ InsInpLnCol LD L,(IX+0x07) RET PrintInpLn CALL ResCursor -.L1 LD A,(IX+0x02) - SUB (IX+0x03) +.L1 LD A,(IX + INPUTFORM.CURR_X) + SUB (IX + INPUTFORM.CURRADD_X) JR NC,PrnInpLn1 - LD A,(IX+0x03) + LD A,(IX + INPUTFORM.CURRADD_X) SUB Step - LD (IX+0x03),A + LD (IX + INPUTFORM.CURRADD_X),A JR PrintInpLn.L1 PrnInpLn1 PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE - LD E,(IX+0x03) + LD E,(IX + INPUTFORM.CURRADD_X) ADD HL,DE OR A - CALL NZ,TstInpLnLen ; На вход: HL-начало вывода - ; А -кол.симв.до курсора + CALL NZ,TstInpLnLen ; На вход: HL-начало вывода + ; А -кол.симв.до курсора PUSH IY PUSH IX - LD A,(IX+0x07) - LD IYL,A ; Y координата - LD A,(IX+0x04) + LD A,(IX + INPUTFORM.SCR_POS_Y) + LD IYL,A ; Y координата + LD A,(IX + INPUTFORM.CURR_SYMBOLS) LD IYH,A - GETPORT WINSP.Y_PORT ; Сохраняем Y порт + GETPORT WINSP.Y_PORT ; Сохраняем Y порт PUSH AF EXX LD HL,PrnPAPl LD DE,PrnINKl - LD C,(IX+0x05) - LD B,(IX+0x06) + LD C,(IX + INPUTFORM.SCR_POS_X) + LD B,(IX + INPUTFORM.SCR_POS_X + 1) SRL B RR C SET 6,B EXX - LD C,(IX+0x09) - LD B,(IX+0x0A) + LD C,(IX + INPUTFORM.SCR_LEN_X) + LD B,(IX + INPUTFORM.SCR_LEN_X + 1) SRL B RR C LD IXL,C - LD C,L ; Адрес строки + LD C,L ; Адрес строки LD B,H GETPORT WINSP.CPU1 LD IXH,A @@ -542,9 +545,9 @@ PrnInpLn1 PUSH IX LD A,(BC) INC BC PInpLnP LD L,A - LD H,HIGH (FONT_RAW)-0xC0 + LD H,HIGH (FONT_RAW) - 0xC0 PUSH BC - LD B,(HL) ; длина символа + LD B,(HL) ; длина символа INC H LD E,(HL) INC H @@ -627,10 +630,10 @@ TstInpLnLen PUSH IY PUSH AF LD A,(RAMPAGES.FNFONT) SETPORT WINSP.CPU0,,0 - LD D,HIGH (FONT_RAW)-0xC0 -TstInpLn PUSH HL + LD D,HIGH (FONT_RAW) - 0xC0 +.TstInpLn PUSH HL LD BC,0x0000 -TstInpL LD E,(HL) +.TstInpL LD E,(HL) INC HL LD A,(DE) ADD A,A @@ -640,23 +643,23 @@ TstInpL LD E,(HL) ADC A,0x00 LD B,A DEC IYL - JR NZ,TstInpL - LD L,(IX+0x09) - LD H,(IX+0x0A) + JR NZ,.TstInpL + LD L,(IX + INPUTFORM.SCR_LEN_X) + LD H,(IX + INPUTFORM.SCR_LEN_X + 1) OR A SBC HL,BC JR NC,TstInpE POP HL LD BC,Step ADD HL,BC - LD A,(IX+0x03) + LD A,(IX + INPUTFORM.CURRADD_X) ADD A,C - LD (IX+0x03),A + LD (IX + INPUTFORM.CURRADD_X),A LD A,IYH SUB C LD IYH,A LD IYL,A - JR TstInpLn + JR .TstInpLn TstInpE POP HL POP AF @@ -667,12 +670,12 @@ TstInpE POP HL SetCursor PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE - LD E,(IX+0x03) + LD E,(IX + INPUTFORM.CURRADD_X) ADD HL,DE LD BC,0x0000 - LD A,(IX+0x02) + LD A,(IX + INPUTFORM.CURR_X) SUB E JR Z,StCurs1 EX AF,AF' @@ -681,7 +684,7 @@ SetCursor PUSH IX PUSH AF LD A,(RAMPAGES.FNFONT) SETPORT WINSP.CPU0,,0 - LD D,HIGH (FONT_RAW)-0xC0 + LD D,HIGH (FONT_RAW) - 0xC0 EX AF,AF' StCurs0 EX AF,AF' LD E,(HL) @@ -704,8 +707,8 @@ StCurs1 LD (CurShiftX),BC LD (CurCursor),A LD A,CursTimer LD (CrTimer),A -SetCr LD L,(IX+0x05) - LD H,(IX+0x06) +SetCr LD L,(IX + INPUTFORM.SCR_POS_X) + LD H,(IX + INPUTFORM.SCR_POS_X + 1) LD BC,(CurShiftX) ADD HL,BC SRL H @@ -717,9 +720,9 @@ SetCr LD L,(IX+0x05) LD B,A PUSH BC LD DE,CursBuffer - LD C,(IX+0x07) + LD C,(IX + INPUTFORM.SCR_POS_Y) DEC C - LD A,(IX+0x0B) + LD A,(IX + INPUTFORM.COLOR) AND 0x0F LD B,A RLCA @@ -752,8 +755,8 @@ SetCr LD L,(IX+0x05) SETPORT WINSP.CPU1,,0 RET -ResCursor LD L,(IX+0x05) - LD H,(IX+0x06) +ResCursor LD L,(IX + INPUTFORM.SCR_POS_X) + LD H,(IX + INPUTFORM.SCR_POS_X + 1) LD BC,(CurShiftX) ADD HL,BC SRL H @@ -765,7 +768,7 @@ ResCursor LD L,(IX+0x05) LD B,A PUSH BC LD DE,CursBuffer - LD B,(IX+0x07) + LD B,(IX + INPUTFORM.SCR_POS_Y) DEC B LD C,WINSP.Y_PORT SETPORT WINSP.CPU1,0x50 diff --git a/fnmain.a80 b/fnmain.a80 index 55ab5ea..541bfda 100644 --- a/fnmain.a80 +++ b/fnmain.a80 @@ -1,11 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij - -;[]=======================================================================[] -; FLEX NAVIGATOR ; -; v1.11 ; -; Last edition: 03/02/2000 ; -;[]=======================================================================[] +; LAST UPDATE: 07.09.2025 savelij include fn_const.a80 include fn_macros.a80 @@ -87,9 +81,9 @@ RAMPAGES .RIGHTPANEL DB 0 ; 2 Страница каталога Правой панели .BuffPg1 DB 0 ; 3 .BuffPg2 DB 0 ; 4 -.BuffPg3 DB 0 ; 5 -.BuffPg4 DB 0 ; 6 -.BuffPgEnd DB 0xFF +.BuffPg3 DB 0 ; 5 используется копировщиком файлов/директорий +.BuffPg4 DB 0 ; 6 используется сортировкой, работа с деревом директорий +.BuffPgEnd DB 0xFF ; маркер конца списка страниц .FILES_COUNT DW 0 ; количество помеченных файлов .FILES_BYTES DB 5 DUP 0 ; размер помеченных файлов в байтах @@ -260,6 +254,22 @@ SET_DWORD: LD (HL),E LD (HL),B RET +GET_HANDLE_ADR LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) + ADD HL,DE + ADD HL,HL ; *2 + ADD HL,HL ; *4 + ADD HL,HL ; *8 + LD E,L + LD D,H + ADD HL,HL ; *16 + ADD HL,DE ; *18 - FileHDR.SIZE + OR H + LD H,A + RET + ; вызов функции в страницах RESIDENT ; ==============resident 2============== @@ -277,35 +287,16 @@ RESIDENT .DeleteFiles: LD DE,DeleteFilesR jr .FunctResident -.Quit: CALL ResInvert -.QuitL1 LD DE,QuitConfirmWin - CALL .FunctResident - JP C,SetInvert - LD HL,ComExit - EX (SP),HL - RET - .Setup: LD DE,SetupR jr .FunctResident .QSearch: LD DE,QSearchR jr .FunctResident - IF TREE_REZID -.TestTree LD DE,TestTreeR - jr .FunctResident - -.TestTreeBeg LD DE,TestTreeR.TestTreeBeg - jr .FunctResident - -.ReadTree LD DE,ReadTreeR - jr .FunctResident - -.MakeTreePath LD DE,MakeTreePathR - jr .FunctResident - -.FindTreeDIR LD DE,FindTreeDIRR - jr .FunctResident + IF MARK_DIR +; считалка содержимого директории в байтах +.CalcDirSize LD DE,CalcDirSizeR + JR .FunctResident ENDIF ; ==============resident 2============== @@ -315,24 +306,6 @@ RESIDENT LD C,WINSP.CPU1 JP Resident - IF MARK_DIR -; считалка содержимого директории в байтах -.CountingDir LD DE,CountingDirR - JR .HelpResident - -; инициализация переменных для копирования директории -.InitCopyDirs LD DE,InitCopyDirsR - JR .HelpResident - -; копирование директории -.CopyDir LD DE,CopyDirR - JR .HelpResident - -; добавление имени директории в список и/или вход/выход -.Add2ListDir LD DE,Add2ListDirR - JR .HelpResident - ENDIF - .UnMarkGroup: LD DE,UnMarkGroupR jr .HelpResident @@ -387,6 +360,14 @@ RESIDENT .SystemInfo: LD DE,SystemInfoR jr .HelpResident + +.Quit: CALL ResInvert +.QuitL1 LD DE,QuitConfirmWin + CALL .HelpResident + JP C,SetInvert + LD HL,ComExit + EX (SP),HL + RET ; ==============resident 3============== ; Выход @@ -427,11 +408,7 @@ MainLoop: LD IX,MAINTAB.FilePanelLeft CALL C,DOSline LD A,(TreeFlag) OR A - IF TREE_REZID - CALL NZ,RESIDENT.TestTree - ELSE CALL NZ,TestTreeR - ENDIF JR MainLoop TestKeys @@ -488,11 +465,9 @@ MouseOnOff LD A,(MouseFlag) START_SORT include fnsort.a80 END_SORT - IF TREE_REZID = 0 START_TREE include fntree.a80 END_TREE - ENDIF include fnpanel.a80 include fndos.a80 @@ -507,14 +482,21 @@ END_BLOCK_1: ; ==============resident 2============== PHASE 0x4000 START_BLOCK_2 +; буфера чтобы память не занимали в EXE файле +REZ2_BUFFERS + _INIT_VAR BUF_REZ2.FlexDIRECTORY + _MINUSVAR .OLDLEFTPANEL, 0x100 ; текущий путь левой панели + _MINUSVAR .OLDRIGHTPANEL, 0x100 ; текущий путь правой панели + _MINUSVAR .FINDCURRPATH, 0x100 ; временной текущий путь источника + _MINUSVAR .FINDBUF, 0x100 ; временный буфер поиска + _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 - IF TREE_REZID - include fntree.a80 - ENDIF END_BLOCK_2: DEPHASE ; 0x4000 ; ==============resident 2============== @@ -523,7 +505,6 @@ END_BLOCK_2: PHASE 0xC000 ; MAIN.FNFONT START_BLOCK_4 - FONT_RAW_PACK binclude tmp/font_raw.pack IFFFONT_RAW_PACK binclude tmp/iff_font_raw.pack IFFFONT_RAW_END @@ -536,13 +517,8 @@ END_BLOCK_4: PHASE 0x4000 ; MAIN.FNREZ3 START_BLOCK_3 - include rez3_fnnext.a80 - include rez3_fnmark.a80 - include rez3_fnmisc.a80 - include rez3_fntab.a80 - ; буфера чтобы память не занимали в EXE файле -BUFFERS +REZ3_BUFFERS _INIT_VAR 0x8000 ; с конца страницы _MINUSVAR .DOShistory, 0x200 ;times 0x200 db 0 @@ -550,19 +526,14 @@ BUFFERS _MINUSVAR .fnview_ext, WorkBuffer_Size ;times 0x400 db 0 _MINUSVAR .fn_ext, WorkBuffer_Size ;times 0x400 db 0 - _MINUSVAR .OLDPATH, 0x100 ; сохраненный текущий путь - _MINUSVAR .CURRPATHSRC, 0x100 ; временной текущий путь источника - _MINUSVAR .CURRPATHDST, 0x100 ; временной текущий путь приемника - _MINUSVAR .FINDBUF, 0x100 ; временный буфер поиска - _MINUSVAR .LEVEL_DIR, BYTE ; текущий уровень директории - _MINUSVAR .ENDPATHSRC, WORD ; адрес хвоста пути источника - _MINUSVAR .ENDPATHDST, WORD ; адрес хвоста пути приемника - _MINUSVAR .CURR_DIRNAME, WORD ; текущий адрес в пути + include rez3_fnnext.a80 + include rez3_fnmark.a80 + include rez3_fnmisc.a80 + include rez3_fntab.a80 END_BLOCK_3: DEPHASE ; 0x4000 ; ==============resident 3============== -; чисто для отладки BLOCK1_SIZE EQU END_BLOCK_1 - START_BLOCK_1 ; основной код BLOCK2_SIZE EQU END_BLOCK_2 - START_BLOCK_2 ; резидент 2 BLOCK3_SIZE EQU END_BLOCK_3 - START_BLOCK_3 ; резидент 3 diff --git a/fnpanel.a80 b/fnpanel.a80 index 09878a0..929abd1 100644 --- a/fnpanel.a80 +++ b/fnpanel.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 01.08.2025 savelij +; LAST UPDATE: 07.09.2025 savelij ;[]----------------------------------------------------------[] PrintDisks LD L,(IY + PANEL.X) @@ -164,19 +164,21 @@ PrnFileInfo BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY + PANEL.FIRST_FILE) - LD H,(IY + PANEL.FIRST_FILE + 1) - LD E,(IY + PANEL.CURR_FILE) - LD D,(IY + PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL ; *2 - ADD HL,HL ; *4 - ADD HL,HL ; *8 - LD E,L - LD D,H - ADD HL,HL ; *10 - ADD HL,DE ; *18 - SET 6,H ; | 0x4000 +; LD L,(IY + PANEL.FIRST_FILE) +; LD H,(IY + PANEL.FIRST_FILE + 1) +; LD E,(IY + PANEL.CURR_FILE) +; LD D,(IY + PANEL.CURR_FILE + 1) +; ADD HL,DE +; ADD HL,HL ; *2 +; ADD HL,HL ; *4 +; ADD HL,HL ; *8 +; LD E,L +; LD D,H +; ADD HL,HL ; *10 +; ADD HL,DE ; *18 +; SET 6,H ; | 0x4000 + LD A,HIGH (CPU1) + CALL GET_HANDLE_ADR LD DE,WorkBuffer LD BC,FileHDR.SIZE CALL MoveBytesInc @@ -314,12 +316,7 @@ Get8Bit LD B,'0' - 1 INC HL RET -PrnTreeInfo - IF TREE_REZID - CALL RESIDENT.MakeTreePath - ELSE - CALL MakeTreePathR - ENDIF +PrnTreeInfo CALL MakeTreePathR EX DE,HL PUSH IY POP HL @@ -432,8 +429,8 @@ PrnDIRECT BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FIRST_FILE) - LD H,(IY+PANEL.FIRST_FILE + 1) + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) ADD HL,HL ; *2 ADD HL,HL ; *4 ADD HL,HL ; *8 @@ -526,8 +523,8 @@ PrintFULL PUSH IY LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FIRST_FILE) - LD H,(IY+PANEL.FIRST_FILE + 1) + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) ADD HL,HL ; *2 ADD HL,HL ; *4 ADD HL,HL ; *8 @@ -664,8 +661,8 @@ PrintTREE DJNZ .L2 POP DE LD HL,0x4000 - LD C,(IY+PANEL.FIRST_FILE) - LD B,(IY+PANEL.FIRST_FILE + 1) + LD C,(IY + PANEL.FIRST_FILE) + LD B,(IY + PANEL.FIRST_FILE + 1) LD A,B OR C JR Z,.PrDIRb2 @@ -1083,19 +1080,21 @@ PrnInvert LD A,(IY + PANEL.FILES_ALL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY + PANEL.FIRST_FILE) - LD H,(IY + PANEL.FIRST_FILE + 1) - LD E,(IY + PANEL.CURR_FILE) - LD D,(IY + PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL ; *2 - ADD HL,HL ; *4 - ADD HL,HL ; *8 - LD E,L - LD D,H - ADD HL,HL ; *10 - ADD HL,DE ; *18 - SET 6,H ; | 0xC000 +; LD L,(IY + PANEL.FIRST_FILE) +; LD H,(IY + PANEL.FIRST_FILE + 1) +; LD E,(IY + PANEL.CURR_FILE) +; LD D,(IY + PANEL.CURR_FILE + 1) +; ADD HL,DE +; ADD HL,HL ; *2 +; ADD HL,HL ; *4 +; ADD HL,HL ; *8 +; LD E,L +; LD D,H +; ADD HL,HL ; *10 +; ADD HL,DE ; *18 +; SET 6,H ; | 0xC000 + LD A,HIGH (CPU1) + CALL GET_HANDLE_ADR LD E,(HL) POP AF SETPORT WINSP.CPU1,,0 diff --git a/fnsort.a80 b/fnsort.a80 index 3735944..34ef2b8 100644 --- a/fnsort.a80 +++ b/fnsort.a80 @@ -1,29 +1,49 @@ -; LAST UPDATE: 03.08.2025 savelij +; LAST UPDATE: 07.09.2025 savelij ;[]----------------------------------------------------------[] -ReadDIR BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) - IF TREE_REZID - JP NZ,RESIDENT.ReadTree - ELSE +; На входе: +; A - номер страницы для работы если бит PANELFLAG.B_DIRPAGE установлен +; иначе не требуется +ReadDIR BIT PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) + JR NZ,.RD1 +.RD2 BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) + LD A,(RAMPAGES.LEFTPANEL) + JR Z,.RD1 + LD A,(RAMPAGES.RIGHTPANEL) +.RD1 LD (.DIRPAGE),A + BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JP NZ,ReadTreeR - ENDIF GETPORT WINSP.CPU3 PUSH AF - BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) - LD A,(RAMPAGES.LEFTPANEL) - JR Z,.L1 - LD A,(RAMPAGES.RIGHTPANEL) + LD A,(IY + PANEL.SORTFLAG) + AND SORTFLAG.MASK + JR Z,.L6 +; с сортировкой грузим в свободную пагу + LD A,(RAMPAGES.BuffPg4) + JR .L1 + +; без сортировки грузим в страницу панели +.L6 LD A,0 +.DIRPAGE EQU $-1 .L1 SETPORT WINSP.CPU3,,0 PUSH IY POP HL + LD D,H + LD E,L + LD BC,PANEL.FILE_MASK + ADD HL,BC + BIT PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) + JR NZ,.L8 + EX DE,HL LD BC,PANEL.FILES_ALL ADD HL,BC LD B,PANEL.FILE_MASK - PANEL.FILES_ALL .L5 LD (HL),0 INC HL DJNZ .L5 +.L8 RES PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) BIT SORTFLAG.B_FILTER,(IY + PANEL.SORTFLAG) JR NZ,.L2 LD HL,NORMmask @@ -108,8 +128,8 @@ FindFILESm LD HL,NORMmask POP IX POP IY RET C -FFILEm1 LD A,(WorkBuffer + FFIRST.Attr);+0x20) - AND DIR.M_Dir;0x10 +FFILEm1 LD A,(WorkBuffer + FFIRST.Attr) + AND DIR.M_Dir CALL NZ,InsFileInfo RET C LD DE,WorkBuffer @@ -160,7 +180,7 @@ InsFileInfo EX DE,HL LD (DE),A INC DE PUSH HL - LD BC,FFIRST.Attr;0x20 + LD BC,FFIRST.Attr ADD HL,BC LD B,(HL) ; FFIRST.Attr INC HL @@ -384,14 +404,10 @@ SortDIR GETPORT WINSP.CPU3 LD B,A PUSH BC - BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) - LD A,(RAMPAGES.LEFTPANEL) - JR Z,.L1 - LD A,(RAMPAGES.RIGHTPANEL) -.L1 - SETPORT WINSP.CPU1,,0 - LD A,(RAMPAGES.BuffPg4) + LD A,(ReadDIR.DIRPAGE) SETPORT WINSP.CPU3,,0 + LD A,(RAMPAGES.BuffPg4) + SETPORT WINSP.CPU1,,0 LD HL,CPU3 LD (EndSort),HL SUB A @@ -485,14 +501,6 @@ SortDIR .L3 LD (HL),A INC HL DJNZ .L3 - GETPORT WINSP.CPU1 - LD (RAMPAGES.BuffPg4),A - GETPORT WINSP.CPU3 - BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) - LD HL,RAMPAGES.LEFTPANEL - JR Z,.L2 - LD HL,RAMPAGES.RIGHTPANEL -.L2 LD (HL),A POP BC LD A,B SETPORT WINSP.CPU3,,0 diff --git a/fntab.a80 b/fntab.a80 index 4baef9c..9f6e14e 100644 --- a/fntab.a80 +++ b/fntab.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 24.08.2025 savelij ;[]==========================================================[] ; Формат таблицы @@ -143,11 +143,11 @@ MAINTAB DW 164,640, 0,256,%0000000100100000,0,MenuExit,0 DW 0x8000 -.SelectTab DW 44,196, 29, 43,%0000000100100100,0,RESIDENT.MarkGroupN,0 - DW 44,196, 43, 57,%0000000100100100,0,RESIDENT.UnMarkGroupN,0 - DW 44,196, 57, 71,%0000000100100100,0,RESIDENT.SelectAllN,0 - DW 44,196, 71, 85,%0000000100100100,0,RESIDENT.UnSelectAllN,0 - DW 44,196, 85, 99,%0000000100100100,0,RESIDENT.InvertSelectN,0 +.SelectTab DW 44,196, 29, 43,%0000000100100100,0,RESIDENT.MarkGroupN,0 ; Mark group + + DW 44,196, 43, 57,%0000000100100100,0,RESIDENT.UnMarkGroupN,0 ; Unmark group - + DW 44,196, 57, 71,%0000000100100100,0,RESIDENT.SelectAllN,0 ; Mark all CTRL+ + DW 44,196, 71, 85,%0000000100100100,0,RESIDENT.UnSelectAllN,0 ; Unmark all CTRL- + DW 44,196, 85, 99,%0000000100100100,0,RESIDENT.InvertSelectN,0 ; Invert selection * DW 6, 40, 15, 26,%0000000010010000,MenuFile.L2,0,0 DW 40, 84, 15, 26,%0000000100101000,0,MenuExit,0 DW 84,138, 15, 26,%0000000010010000,MenuOption.L2,0,0 diff --git a/fnwork.a80 b/fnwork.a80 index 7a4d737..e098b92 100644 --- a/fnwork.a80 +++ b/fnwork.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 07.09.2025 savelij ;[]===========================================================[] CursUp LD A,(IY + PANEL.FILES_ALL) @@ -1036,11 +1036,7 @@ NewFile1 LD HL,0x003F ;[]==========================================================[] OpenFile BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) - IF TREE_REZID - JP NZ,RESIDENT.TestTreeBeg - ELSE JP NZ,TestTreeR.TestTreeBeg - ENDIF LD A,(IY+PANEL.FILES_ALL) OR (IY+PANEL.FILES_ALL + 1) RET Z @@ -1052,19 +1048,21 @@ OpenFile BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FIRST_FILE) - LD H,(IY+PANEL.FIRST_FILE + 1) - LD E,(IY+PANEL.CURR_FILE) - LD D,(IY+PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL ; *2 - ADD HL,HL ; *4 - ADD HL,HL ; *8 - LD E,L - LD D,H - ADD HL,HL ; *10 - ADD HL,DE ; *18 - SET 6,H ; | 0x4000 +; LD L,(IY + PANEL.FIRST_FILE) +; LD H,(IY + PANEL.FIRST_FILE + 1) +; LD E,(IY + PANEL.CURR_FILE) +; LD D,(IY + PANEL.CURR_FILE + 1) +; ADD HL,DE +; ADD HL,HL ; *2 +; ADD HL,HL ; *4 +; ADD HL,HL ; *8 +; LD E,L +; LD D,H +; ADD HL,HL ; *10 +; ADD HL,DE ; *18 +; SET 6,H ; | 0x4000 + LD A,HIGH (CPU1) + CALL GET_HANDLE_ADR LD DE,WorkBuffer LD BC,FileHDR.Attr PUSH HL @@ -1080,8 +1078,9 @@ OpenFile BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) INC HL JP Z,RunEXEfile LD A,(HL) - CP '.' - JR NZ,OpenF2 + CP '.' ; выход из директории вверх? + JR NZ,EnterDIR +; выход из директории вверх PUSH HL PUSH IY POP HL @@ -1094,7 +1093,7 @@ OpenFile BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) LD A,'\\' DEC HL CP (HL) - JR Z,OpenF1 + JR Z,.L5 .L3 DEC HL CP (HL) JR NZ,.L3 @@ -1106,8 +1105,9 @@ OpenFile BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) JR NZ,.L4 LD (DE),A LD A,'.' -OpenF1 POP HL -OpenF2 PUSH AF +.L5 POP HL +; вход в директорию +EnterDIR PUSH AF PUSH HL CALL ResInvert POP HL @@ -1131,7 +1131,7 @@ OpenF2 PUSH AF SPDSS DSSF.CURDIR POP IY CALL PrintPath - BIT PANELFLAG.B_PRNDOSPATH,(IY+PANEL.PANELFLAG) + BIT PANELFLAG.B_PRNDOSPATH,(IY + PANEL.PANELFLAG) CALL NZ,PrintDOSPath POP AF CP '.' @@ -1144,7 +1144,7 @@ OpenF2 PUSH AF LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar - LD A,(IY+PANEL.VIEWFLAG) + LD A,(IY + PANEL.VIEWFLAG) AND VIEWFLAG.MASK PUSH AF CALL Z,DrawHScrollBar @@ -1155,7 +1155,7 @@ OpenF2 PUSH AF OR A JP Z,WaitUnpressMouse PUSH IY - BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) + BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,LeftPanel LD HL,RightPanel JR NZ,.L5 @@ -1165,11 +1165,7 @@ OpenF2 PUSH AF ADD HL,DE INC HL INC HL - IF TREE_REZID - CALL RESIDENT.FindTreeDIR - ELSE CALL FindTreeDIRR - ENDIF CALL PrintDIR CALL PrnFileInfo PUSH IY @@ -1356,7 +1352,7 @@ ShowDSexit JP WaitUnpressMouse ;[]==========================================================[] -RunEXEfile: LD IX,BUFFERS.fn_ext +RunEXEfile: LD IX,REZ3_BUFFERS.fn_ext LD DE,PrevFile PUSH DE SUB A @@ -1952,19 +1948,21 @@ StViewFile: LD A,0x01 LD A,(RAMPAGES.RIGHTPANEL) .L2 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FIRST_FILE) - LD H,(IY+PANEL.FIRST_FILE + 1) - LD E,(IY+PANEL.CURR_FILE) - LD D,(IY+PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL ; *2 - ADD HL,HL ; *4 - ADD HL,HL ; *8 - LD E,L - LD D,H - ADD HL,HL ; *10 - ADD HL,DE ; *18 - SET 6,H ; | 0x4000 +; LD L,(IY+PANEL.FIRST_FILE) +; LD H,(IY+PANEL.FIRST_FILE + 1) +; LD E,(IY+PANEL.CURR_FILE) +; LD D,(IY+PANEL.CURR_FILE + 1) +; ADD HL,DE +; ADD HL,HL ; *2 +; ADD HL,HL ; *4 +; ADD HL,HL ; *8 +; LD E,L +; LD D,H +; ADD HL,HL ; *10 +; ADD HL,DE ; *18 +; SET 6,H ; | 0x4000 + LD A,HIGH (CPU1) + CALL GET_HANDLE_ADR LD DE,WorkBuffer LD BC,FileHDR.Attr PUSH HL @@ -1989,7 +1987,7 @@ StViewFile: LD A,0x01 VFlag: EQU $-1 OR A JR NZ,View1 -View: LD IX,BUFFERS.fnview_ext +View: LD IX,REZ3_BUFFERS.fnview_ext LD DE,PrevFile CALL TestEXT RET NC @@ -2112,19 +2110,21 @@ StEditFile: LD A,0x01 LD A,(RAMPAGES.RIGHTPANEL) .L2 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FIRST_FILE) - LD H,(IY+PANEL.FIRST_FILE + 1) - LD E,(IY+PANEL.CURR_FILE) - LD D,(IY+PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL ; *2 - ADD HL,HL ; *4 - ADD HL,HL ; *8 - LD E,L - LD D,H - ADD HL,HL ; *10 - ADD HL,DE ; *18 - SET 6,H ; | 0x4000 +; LD L,(IY+PANEL.FIRST_FILE) +; LD H,(IY+PANEL.FIRST_FILE + 1) +; LD E,(IY+PANEL.CURR_FILE) +; LD D,(IY+PANEL.CURR_FILE + 1) +; ADD HL,DE +; ADD HL,HL ; *2 +; ADD HL,HL ; *4 +; ADD HL,HL ; *8 +; LD E,L +; LD D,H +; ADD HL,HL ; *10 +; ADD HL,DE ; *18 +; SET 6,H ; | 0x4000 + LD A,HIGH (CPU1) + CALL GET_HANDLE_ADR LD DE,WorkBuffer LD BC,FileHDR.Attr PUSH HL @@ -2149,7 +2149,7 @@ StEditFile: LD A,0x01 EFlag: EQU $-1 OR A JR NZ,Edit1 -Edit: LD IX,BUFFERS.fnedit_ext +Edit: LD IX,REZ3_BUFFERS.fnedit_ext LD DE,PrevFile CALL TestEXT RET NC diff --git a/rez2_fnfunct.a80 b/rez2_fnfunct.a80 index ca4434d..cc548e3 100644 --- a/rez2_fnfunct.a80 +++ b/rez2_fnfunct.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 07.09.2025 savelij ;[]==========================================================[] CopyFilesR LD A,(IY + PANEL.FILES_ALL) @@ -21,32 +21,17 @@ CopyFilesR LD A,(IY + PANEL.FILES_ALL) .L1 SETPORT WINSP.CPU3,,0 LD IX,WorkBuffer - LD L,(IY + PANEL.FIRST_FILE) - LD H,(IY + PANEL.FIRST_FILE + 1) - LD E,(IY + PANEL.CURR_FILE) - LD D,(IY + PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL ; *2 - ADD HL,HL ; *4 - ADD HL,HL ; *8 - LD E,L - LD D,H - ADD HL,HL ; *10 - ADD HL,DE ; *18 - SET 6,H - SET 7,H ; | 0xC000 - LD (COPY.PathCurrFile),HL + LD A,HIGH (CPU3) + CALL GET_HANDLE_ADR + LD (COPY.PathCurrFile),HL LD DE,WorkBuffer LD BC,FileHDR.SIZE LDIR POP AF SETPORT WINSP.CPU3,,0 - LD HL,CopyNextFile.FLAG_DIRCOPY - XOR A ; копировать только файлы - LD (HL),A BIT DIR.B_Dir,(IX + FileHDR.Attr) IF MARK_DIR - JP NZ,COPY_DIR + JP NZ,.InitCopyDir ELSE RET NZ ENDIF @@ -63,17 +48,17 @@ CopyFilesR LD A,(IY + PANEL.FILES_ALL) IF MARK_DIR ; копирование диры со всем содержимым под курсором -COPY_DIR INC A - LD (HL),A ; копировать будем директориями - CALL RESIDENT.CountingDir ; измерение размера директории с файлами +.InitCopyDir LD HL,(COPY.PathCurrFile) + PUSH HL + CALL CalcDirSizeR ; измерение размера директории с файлами + POP HL + LD (COPY.PathCurrFile),HL LD HL,JUMPS.FILES_BYTES LD DE,COPY.CopyBytes - LD BC,5 + LD BC,DWORD + 1 LDIR ; забрали размер директории - LD HL,0 - LD (COPY.CopyFiles),HL ; количество уже скопированных файлов - CALL RESIDENT.InitCopyDirs ; инициализация путей откуда/куда - + LD (COPY.CopyFiles),BC ; количество уже скопированных файлов + CALL StorePaths ; сохранение текущий путей панелей LD HL,(COPY.CopyBytes) LD DE,(COPY.CopyBytes + 2) CALL ConvBytes2Pages ; пересчет в количество страниц для копирования @@ -124,14 +109,8 @@ CopyLp0 BIT FileHDR.B_MARK,(IX + FileHDR.Flag) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) CALL ConvBytes2Pages -; LD C,L -; LD B,H -; POP HL POP BC ADD HL,BC -; LD C,E -; LD B,D -; POP DE POP BC EX DE,HL ADC HL,BC @@ -176,6 +155,7 @@ CopyNxt LD IX,ProcessAll LD HL,RightPanel .L1 LD DE,PANEL.CURR_PATH ADD HL,DE + LD (.NEWPATH),HL ; куда возвращать отредактированный путь LD DE,CurPath SUB A LD C,A @@ -183,7 +163,6 @@ CopyNxt LD IX,ProcessAll CP (HL) JR NZ,.L2 LD (DE),A - SUB A SUB C LD (PathLen),A LD IX,PathStr @@ -214,39 +193,40 @@ CopyNxt LD IX,ProcessAll W_BORDER 16,56,288,12 W_FILL 18,57,284,10,COLORI.WHITE W_END - SUB A - LD (COPY.OverWriteFlg),A - BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) - LD HL,LeftPanel - JR Z,.L4 - LD HL,RightPanel -.L4 LD BC,PANEL.CURR_PATH - ADD HL,BC - LD (COPY.PathSrc),HL - LD HL,CurPath - LD (COPY.PathDst),HL + LD HL,CurPath + LD DE,0 ; адрес отредактированного пути приемника +.NEWPATH EQU $-2 + XOR A + LD (COPY.OverWriteFlg),A +.NP1 LDI + CP (HL) + JR NZ,.NP1 + LD (DE),A + CALL DIRLIST.InitCopyDirs CALL PointerMouseClock PUSH IY GETPORT WINSP.CPU3 PUSH AF - BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) - LD A,(RAMPAGES.LEFTPANEL) - JR Z,.L3 - LD A,(RAMPAGES.RIGHTPANEL) -.L3 +; текущую директорию грузим в свободную страницу + LD A,(RAMPAGES.BuffPg3) SETPORT WINSP.CPU3,,0 + SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) + CALL ReadDIR + LD (CopyDir.CURR_PANEL),IY ; при копировании файла портится ; копирование файлов/директорий -CopyNextFile CALL PrintSrcDst - LD IX,(COPY.PathCurrFile) +CopyNextFile LD IX,(COPY.PathCurrFile) IF MARK_DIR BIT DIR.B_Dir,(IX + FileHDR.Attr) JR Z,.CopyFile -; копирование директории - CALL RESIDENT.Add2ListDir ; добавление имени диры в список - JR CopyNextFile +; заносим имя диры в список для дальнейшего копирования + CALL DIRLIST.ADD_DIRNAME + JP .NextHandle ENDIF - -.CopyFile LD L,(IX + FileHDR.SizeBytes) +; копирование файла/директории +.CopyFile PUSH IX + CALL PrintSrcDst + POP IX + LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) @@ -446,7 +426,7 @@ CopyNextFile CALL PrintSrcDst SPDSS DSSF.CLOSE LD A,(COPY.MemID) SPDSS DSSF.FREEMEM - LD IX,(COPY.PathCurrFile) +.NextHandle LD IX,(COPY.PathCurrFile) RES FileHDR.B_MARK,(IX + FileHDR.Flag) LD HL,(COPY.CopyBytes) LD E,(IX + FileHDR.SizeBytes) @@ -454,45 +434,451 @@ CopyNextFile CALL PrintSrcDst OR A SBC HL,DE LD (COPY.CopyBytes),HL - LD HL,(COPY.CopyBytes+2) + LD HL,(COPY.CopyBytes + 2) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE - LD (COPY.CopyBytes+2),HL + LD (COPY.CopyBytes + 2),HL LD HL,(COPY.CopyFiles) LD A,H OR L - JR Z,CopyEnd ; файлы кончились? + JR Z,CopyDir ; файлы кончились? DEC HL LD (COPY.CopyFiles),HL LD A,H OR L - JR Z,CopyEnd ; файлы кончились? + JR Z,CopyDir ; файлы кончились? LD HL,(COPY.PathCurrFile) LD DE,FileHDR.SIZE .L5 ADD HL,DE ; следующий описатель - IF MARK_DIR - LD A,(.FLAG_DIRCOPY) - AND A ; копируем только файлы? - JR Z,.L6 -; из-за копирования директорий файлы копируем все - INC HL - LD A,(HL) - AND A - JR NZ,.L7 ; файлы в дире еще не кончились -; файлы в дире кончились, смотреть оставшиеся диры в списке - CALL RESIDENT.CopyDir - ENDIF - -.L6 BIT FileHDR.B_MARK,(HL) + BIT FileHDR.B_MARK,(HL) JR Z,.L5 -.L7 LD (COPY.PathCurrFile),HL + LD (COPY.PathCurrFile),HL JP CopyNextFile -.FLAG_DIRCOPY DB 0 +; копирование директории +CopyDir LD IY,0 +.CURR_PANEL EQU $-2 + CALL DIRLIST.GET_DIRNAME ; получение имени диры, если есть + JP C,CopyEnd ; C=1 текущая дира кончилась или их нет + CALL DIRLIST.ADD_DIRLEVEL ; добавление списка диры + PUSH IY + LD HL,(COPY.PathDst) + SPDSS DSSF.MKDIR ; создание диры на приемнике +; CALL C,DOSError + LD HL,(COPY.PathSrc) + SPDSS DSSF.CHDIR ; смена текущего пути +; CALL C,DOSError + POP IY + LD A,(RAMPAGES.BuffPg3) + SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) + CALL ReadDIR + CALL DIRLIST.MARK_ALL ; маркировка всех файлов/дир + LD HL,0xC000 + FileHDR.SIZE + LD (COPY.PathCurrFile),HL + JP CopyNextFile + +BUF_MARKDIR +.DIR_NAME DZ " " ; имя текущей директории + +DIRLIST +; пометка всех файлов/дир +.MARK_ALL LD IX,0xC000 - FileHDR.SIZE + LD HL,0 + LD (COPY.CopyFiles),HL + LD BC,FileHDR.SIZE +.MLNEXT ADD IX,BC + LD A,(IX + FileHDR.Name) + AND A + RET Z + CP '.' + JR Z,.MLNEXT + SET FileHDR.B_MARK,(IX + FileHDR.Flag) + EXX + LD HL,COPY.CopyBytes + LD E,(IX + FileHDR.SizeBytes) + LD D,(IX + FileHDR.SizeBytes + 1) + LD C,(IX + FileHDR.SizeBytes + 2) + LD B,(IX + FileHDR.SizeBytes + 3) + CALL HLPBCDE + LD HL,(COPY.CopyFiles) + INC HL + LD (COPY.CopyFiles),HL + EXX + JR .MLNEXT + +; добавление имени диры в список, создание диры на приемнике +.ADD_DIRNAME PUSH IX + POP HL + INC HL + LD DE,BUF_MARKDIR.DIR_NAME + LD BC,8 + LDIR ; забрали имя диры до переключения паг + LD A,(RAMPAGES.FLX) + LD C,WINSP.CPU3 + IN B,(C) + PUSH BC + OUT (C),A + LD HL,0xC000 +.ANNEXT CALL GET_DWORD + LD A,B + OR C + JR Z,.ANFOUND + LD H,B + LD L,C + JR .ANNEXT + +.ANFOUND PUSH HL + LD HL,BUF_MARKDIR.DIR_NAME + LD BC,8 + LDIR ; занесли имя диры в список + POP HL + DEC HL + DEC HL + LD (HL),D + DEC HL + LD (HL),E + POP BC + OUT (C),B + RET + +.ADDNAME2PATH8 CALL .CHECK_BSLASH + LD (HL),'\\' + INC HL + EX DE,HL + LD BC,8 + LDIR + XOR A + LD (DE),A + RET + +; добавление имени в строку пути +; HL - куда добавлять (хвост текущего пути) +; DE - откуда имя брать +.ADDNAME2PATH CALL .CHECK_BSLASH + LD (HL),'\\' + INC HL + EX DE,HL +; копирование имени из буфера +.COPYNAME2PATH XOR A +.CNP2 CP (HL) + JR Z,.CNP1 + LDI + JR .CNP2 + +.CNP1 LD (DE),A + RET + +; проверка на BACKSLASH +.CHECK_BSLASH DEC HL + LD A,(HL) + CP '\\' + RET Z + INC HL + RET + +; отсечение пробелов в имени +.CUTOFFSPACES LD A,' ' +.COS2 DEC HL + CP (HL) + JR Z,.COS2 + INC HL + LD (HL),0 + RET + +; добавление уровня для дир +.ADD_DIRLEVEL LD A,(RAMPAGES.FLX) + LD C,WINSP.CPU3 + IN B,(C) + PUSH BC + OUT (C),A + LD HL,0xC000 +.ALNEXT CALL GET_DWORD + LD A,B + OR C + JR Z,.ALFOUND + LD H,B + LD L,C + JR .ALNEXT + +.ALFOUND LD (HL),D + DEC HL + LD (HL),E + LD H,D + LD L,E + INC DE + INC DE + INC DE + INC DE + LD (HL),E + INC HL + LD (HL),D + INC HL + LD (HL),0 + INC HL + LD (HL),0 + POP BC + OUT (C),B + RET + +; получение имени диры с удалением из списка +.GET_DIRNAME LD A,(RAMPAGES.FLX) + LD C,WINSP.CPU3 + IN B,(C) + PUSH BC + OUT (C),A +.GNRESTART LD HL,0xC000 +.GNNEXT CALL GET_DWORD + LD A,B + OR C + JR Z,.GNFOUND + DEC HL + LD (.GNEL1),HL + LD H,B + LD L,C + JR .GNNEXT + +.GNFOUND INC HL + EX DE,HL + AND A + SBC HL,DE + SRL H + RR L + SRL H + RR L + SRL H + RR L + LD B,H + LD C,L + EX DE,HL + LD DE,8 + AND A + SBC HL,DE + INC BC +.GNNEXT_FIND DEC BC + LD A,B + OR C + JR Z,.GNEND_LEVEL + ADD HL,DE + LD A,(HL) + AND A + JR Z,.GNNEXT_FIND + PUSH HL + EX DE,HL + PUSH DE + LD HL,(COPY.PathSrcEnd) + CALL .ADDNAME2PATH8 + EX DE,HL + CALL .CUTOFFSPACES + LD (COPY.PathSrcEnd),HL + POP DE + LD HL,(COPY.PathDstEnd) + CALL .ADDNAME2PATH8 + EX DE,HL + CALL .CUTOFFSPACES + LD (COPY.PathDstEnd),HL + POP HL + LD (HL),0 + POP BC + OUT (C),B + AND A + RET + +.GNEND_LEVEL LD HL,0 +.GNEL1 EQU $-2 + LD A,H + OR L + JR Z,.GNEL2 + XOR A + LD (HL),A + INC HL + LD (HL),A + LD DE,0xC000 + DWORD - 1 + EX DE,HL + SBC HL,DE + EX DE,HL + JR Z,.GNEL2 + LD HL,(COPY.PathSrcEnd) + CALL .GNEL4 + LD (COPY.PathSrcEnd),HL + LD HL,(COPY.PathDstEnd) + CALL .GNEL4 + LD (COPY.PathDstEnd),HL + JP .GNRESTART + +.GNEL4 DEC HL + LD A,'\\' +.GNEL3 DEC HL + CP (HL) + JR NZ,.GNEL3 + INC HL + LD (HL),0 + RET + +.GNEL2 POP BC + OUT (C),B + SCF + RET + +; инициализация копирования директории с содержимым +.InitCopyDirs BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) + LD HL,LeftPanel + PANEL.CURR_PATH ; для пути откуда копировать + LD DE,RightPanel + PANEL.CURR_PATH ; для пути куда копировать + JR Z,.L1 + EX DE,HL +; включаем пагу с директорией текущей панели +.L1 LD (COPY.PathSrc),HL + EX DE,HL + LD (COPY.PathDst),HL +.L2 INC HL + CP (HL) + JR NZ,.L2 + LD (COPY.PathDstEnd),HL + EX DE,HL + XOR A +.L3 INC HL + CP (HL) + JR NZ,.L3 + LD (COPY.PathSrcEnd),HL +; инит в странице списков директорий + GETPORT WINSP.CPU3 + EX AF,AF' + LD A,(RAMPAGES.FLX) + SETPORT WINSP.CPU3,,0 + LD HL,0xC000 + LD (HL),LOW (0xC000 + DWORD) + INC HL + LD (HL),HIGH (0xC000 + DWORD) + INC HL + LD D,H + LD E,L + INC DE + LD BC,FileHDR.Name_Size * 2 + LD (HL),B + LDIR + EX AF,AF' + SETPORT WINSP.CPU3,,0 + RET + +; сохранение путей панелей +StorePaths LD HL,LeftPanel + PANEL.CURR_PATH + LD DE,REZ2_BUFFERS.OLDLEFTPANEL + LD BC,PANEL.CURR_PATH_Size + LDIR + LD HL,RightPanel + PANEL.CURR_PATH + LD DE,REZ2_BUFFERS.OLDRIGHTPANEL + LD BC,PANEL.CURR_PATH_Size + LDIR + RET + +; восстановление путей панелей +RestorePaths LD HL,REZ2_BUFFERS.OLDLEFTPANEL + LD DE,LeftPanel + PANEL.CURR_PATH + LD BC,PANEL.CURR_PATH_Size + LDIR + LD HL,REZ2_BUFFERS.OLDRIGHTPANEL + LD DE,RightPanel + PANEL.CURR_PATH + LD BC,PANEL.CURR_PATH_Size + LDIR + RET + +; подсчет в байтах размера отмеченной директории +CalcDirSizeR: PUSH IX + PUSH IY + GETPORT WINSP.CPU3 + PUSH AF ; текущий номер страницы + LD (.CURR_PANEL),IY + LD A,(RAMPAGES.BuffPg3) + SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) + CALL ReadDIR + LD A,(RAMPAGES.BuffPg3) + SETPORT WINSP.CPU3,,0 + LD A,HIGH (CPU3) + CALL GET_HANDLE_ADR + LD (COPY.PathCurrFile),HL + XOR A + LD H,A + LD L,A + LD (JUMPS.FILES_BYTES),HL + LD (JUMPS.FILES_BYTES + 2),HL ; обнуление размера диры + LD (JUMPS.FILES_COUNT),HL ; обнуление количества файлов + LD (COPY.CopyFiles),HL + CALL StorePaths + CALL DIRLIST.InitCopyDirs +.NextDirFile LD IX,(COPY.PathCurrFile) + BIT DIR.B_Dir,(IX + FileHDR.Attr) + JR Z,.NextFile +; заносим имя диры в список для дальнейшего использования + CALL DIRLIST.ADD_DIRNAME + JP .NextHandle + +; для файла добавляем его размер и количество +1 +.NextFile LD HL,(JUMPS.FILES_COUNT) + INC HL + LD (JUMPS.FILES_COUNT),HL ; инкремент количества файлов + PUSH IX + POP DE + LD HL,FileHDR.SizeBytes + ADD HL,DE + CALL GET_DWORD + LD HL,JUMPS.FILES_BYTES + CALL HLPBCDE ; добавили к текущему размеру +; проверка на окончание описателей +.NextHandle LD HL,(COPY.CopyFiles) + LD A,H + OR L + JR Z,.ENDDIR + DEC HL + LD A,H + OR L + JR Z,.ENDDIR + LD (COPY.CopyFiles),HL + LD HL,(COPY.PathCurrFile) + LD DE,FileHDR.SIZE +.L5 ADD HL,DE ; следующий описатель + BIT FileHDR.B_MARK,(HL) + JR Z,.L5 + LD (COPY.PathCurrFile),HL + JP .NextDirFile + +.ENDDIR LD IY,0 +.CURR_PANEL EQU $-2 + CALL DIRLIST.GET_DIRNAME ; получение имени диры, если есть + JP C,.CalcEnd ; C=1 текущая диры кончилась или их нет + CALL DIRLIST.ADD_DIRLEVEL ; добавление списка диры + PUSH IY + LD HL,(COPY.PathSrc) + SPDSS DSSF.CHDIR ; смена текущего пути +; CALL C,DOSError + POP IY + LD A,(RAMPAGES.BuffPg3) + SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) + CALL ReadDIR + CALL DIRLIST.MARK_ALL ; маркировка всех файлов/дир + LD HL,0xC000 + FileHDR.SIZE + LD (COPY.PathCurrFile),HL + JP .NextDirFile + +.CalcEnd CALL RestorePaths + POP AF + SETPORT WINSP.CPU3,,0 + POP IY + BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) + LD HL,LeftPanel + PANEL.CURR_PATH + JR Z,.CD1 + LD HL,RightPanel + PANEL.CURR_PATH +.CD1 +; LD HL,(COPY.PathSrc) + PUSH IY + SPDSS DSSF.CHDIR + POP IY + POP IX + RET + ; завершение копирования -CopyEnd POP AF +CopyEnd CALL RestorePaths + POP AF SETPORT WINSP.CPU3,,0 POP IY WINDOWCLOSE @@ -513,6 +899,7 @@ CopyEnd POP AF LD IY,RightPanel JR Z,.L1 LD IY,LeftPanel +; обновление панели приемника .L1 PUSH IY POP HL LD DE,PANEL.CURR_PATH @@ -525,6 +912,7 @@ CopyEnd POP AF POP AF CALL NC,RefreshDIR POP IY +; обновление панели источника PUSH IY POP HL LD DE,PANEL.CURR_PATH @@ -532,12 +920,19 @@ CopyEnd POP AF PUSH IY SPDSS DSSF.CHDIR POP IY + PUSH AF + CALL C,DOSError + POP AF + PUSH AF + CALL NC,RefreshDIR + POP AF JP C,BegDIRECTORY CALL PrintDIR CALL PrnFileInfo JP PointerMousePointer -CopyError3: ; Если нет места на диске для копирования ;!FIXIT оптимизировать +; !FIXIT оптимизировать +CopyError3: ; Если нет места на диске для копирования POP HL ; снимаем лишнее POP DE ; тут лежит AF PUSH AF @@ -706,22 +1101,7 @@ OverExit INC SP POP IY JP CopyEnd -;-------------------------------------------------------------- -COPY -.PathCurrFile DW 0 ; Адрес описателя текущего файла/диры -.PathSrc DW 0 ; Адрес пути источника -.PathDst DW 0 ; Адрес пути приемника -.CopyFiles DW 0 ; Количество копируемых файлов -.CopyBytes DB 5 DUP 0 ; Количество копируемых байтов -.OverWriteFlg DB 0 ; Флаг перезаписи файлов -.FreeBanks DW 0 ; Количество свободных банков -.CurrReadBytes DD 0 ; Длина читаемого файла -.CurrWriteBytes DD 0 ; Длина записываемого файла -.FHandleSrc DB 0 ; Файл источник -.FHandleDst DB 0 ; Файл приемник -.MemID DB 0 ; Идентификатор памяти под копирование -;-------------------------------------------------------------- - +; Конверсия размера в байтах в количество страниц ; На входе: ; DEHL - количество байт ; На выходе: @@ -858,11 +1238,17 @@ ProcessOne DW 178 ; X DW 0 DB COLORP.BLUE + COLORI.WHITE -PathStr DB 0x80,0x00,0x00,0x00 -PathLen DB 0x00 - DW 170,106,324 - DB 0xF0 -CurPath DB 0x81 DUP 0 +; описатель строки +PathStr DB 255 ; +00 Максимальная длина строки + DB 0 ; +01 Флаг готовности + DB 0 ; +02 текущая X позиция курсора + DB 0 ; +03 текущая AddX +PathLen DB 0 ; +04 количество введенных символов + DW 170 ; +05 X позиция строки на экране + DW 106 ; +07 Y позиция строки на экране + DW 324 ; +09 X длина строки на экране + DB COLORP.WHITE + COLORI.BLACK ; +0B Цвет строки +CurPath DB 256 DUP 0 ; +0C ...сама строка ;[]==========================================================[] ReNameR LD A,(IY + PANEL.FILES_ALL) @@ -888,9 +1274,6 @@ ReNameR LD A,(IY + PANEL.FILES_ALL) ADD HL,HL ADD HL,HL ADD HL,HL -; LD A,H -; OR 0xC0 -; LD H,A SET 6,H SET 7,H INC HL @@ -898,7 +1281,7 @@ ReNameR LD A,(IY + PANEL.FILES_ALL) LD DE,CurName LD BC,0x000D LDIR - LD A,DIR.M_Dir;0x10 + LD A,DIR.M_Dir LD (CurAttrib),A JR ReNameN @@ -909,9 +1292,6 @@ ReNameNr ADD HL,HL ; *2 LD D,H ADD HL,HL ; *10 ADD HL,DE ; *18 -; LD A,H -; OR 0xC0 -; LD H,A SET 6,H SET 7,H ; | 0xC000 PUSH HL @@ -919,7 +1299,7 @@ ReNameNr ADD HL,HL ; *2 LD DE,CurName CALL MakeDOSname POP HL - LD BC,FileHDR.Attr;0x000E + LD BC,FileHDR.Attr ADD HL,BC LD A,(HL) LD (CurAttrib),A @@ -980,7 +1360,8 @@ RNfile EQU $ - STRLEN(" ") - 2 LD A,(NameLen) OR A RET Z - ;[ ] -баг при переименовании файла в буфере Name в конце имени файла не всегда стоял закрывающий 0 когда надо. ILDel1 + ; [ ] -баг при переименовании файла в буфере Name в конце имени + ; файла не всегда стоял закрывающий 0 когда надо. ILDel1 LD HL,Name LD E,A LD D,0 @@ -1141,9 +1522,6 @@ ReNameDIR LD HL,Name ADD HL,HL ; *4 ADD HL,HL ; *8 ADD HL,HL ; *10 -; LD A,H -; OR 0xC0 -; LD H,A SET 6,H SET 7,H EX DE,HL @@ -1157,11 +1535,7 @@ ReNameTree BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) ADD HL,DE INC HL INC HL - IF TREE_REZID CALL FindTreeDIRR - ELSE - CALL FindTreeDIRR - ENDIF JP C,ReNameT LD HL,0xC001 - 0x10 LD BC,0x0010 @@ -1285,17 +1659,9 @@ ReNameExt1 INC SP LD DE,PANEL.BAR_X ADD IX,DE CALL DrawVScrollBar - IF TREE_REZID CALL TestTreeR.TestTreeBeg - ELSE - CALL TestTreeR.TestTreeBeg - ENDIF PUSH IY - IF TREE_REZID CALL MakeTreePathR - ELSE - CALL MakeTreePathR - ENDIF EX DE,HL BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel @@ -1481,11 +1847,7 @@ MkDIR0 LD HL,NewDIR ADD HL,DE INC HL INC HL - IF TREE_REZID CALL FindTreeDIRR - ELSE - CALL FindTreeDIRR - ENDIF JP C,MkDIRn LD HL,0xC001 - 0x10 LD BC,0x0010 @@ -1503,9 +1865,6 @@ FnTree1 LD L,(IY + PANEL.FIRST_FILE) ADD HL,HL ADD HL,HL ADD HL,HL -; LD A,H -; OR 0xC0 -; LD H,A SET 6,H SET 7,H FnTree2 LD E,(HL) @@ -1562,9 +1921,6 @@ MkDIRend PUSH HL ADD HL,HL ADD HL,HL ADD HL,HL -; LD A,H -; OR 0xC0 -; LD H,A SET 6,H SET 7,H PUSH HL @@ -1737,9 +2093,6 @@ DeleteFilesR LD A,(IY + PANEL.FILES_ALL) ADD HL,HL ADD HL,HL ADD HL,HL -; LD A,H -; OR 0xC0 -; LD H,A SET 6,H SET 7,H LD (AdrDelFile),HL @@ -1753,9 +2106,6 @@ DelFile ADD HL,HL LD D,H ADD HL,HL ADD HL,DE -; LD A,H -; OR 0xC0 -; LD H,A SET 6,H SET 7,H LD (AdrDelFile),HL @@ -1877,9 +2227,7 @@ DeleteFlag DEFB 0x00 MakeDELname LD HL,(AdrDelFile) INC HL BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) -; JR NZ,MakeDELn1 JP Z,MakeDOSname -;MakeDELn1 INC HL SUB A .L1 LDI @@ -1964,13 +2312,13 @@ DelDel0 LD IX,(AdrDelFile) PUSH DE CALL MakeDELname POP HL - LD C,DSSF.RMDIR ;0x1C ;RMDIR + LD C,DSSF.RMDIR BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) JR NZ,DelDel1 LD A,(IX + FileHDR.Attr) BIT DIR.B_Dir,A JR NZ,DelDel1 - LD C,DSSF.DELETE ;0x0E ;DELETE + LD C,DSSF.DELETE DelDel1 PUSH IY SPDSS POP IY @@ -2050,9 +2398,9 @@ DelFrom EQU $-2 POP HL LD A,(IX + FileHDR.Attr) BIT DIR.B_Dir,A - LD C,DSSF.DELETE ;0x0E ;DELETE + LD C,DSSF.DELETE JR Z,.L3 - LD C,DSSF.RMDIR ;0x1C ;RMDIR + LD C,DSSF.RMDIR .L3 PUSH IY SPDSS POP IY @@ -2177,11 +2525,7 @@ DelTreeDIR1 LD A,(DeleteFlag) ADD HL,DE INC HL INC HL - IF TREE_REZID CALL FindTreeDIRR - ELSE - CALL FindTreeDIRR - ENDIF JP C,DelDIRn LD HL,0xC001-0x10 LD BC,0x0010 @@ -2231,15 +2575,12 @@ DelTree1 LD L,(IY + PANEL.FIRST_FILE) ADD HL,HL ADD HL,HL ADD HL,HL -; LD A,H -; OR 0xC0 -; LD H,A SET 6,H SET 7,H DelTree2 LD E,(HL) INC HL LD A,(HL) - LD BC,FileHDR.Attr;0x000E + LD BC,FileHDR.Attr ADD HL,BC LD D,(HL) INC HL @@ -2254,9 +2595,6 @@ DelTree2 LD E,(HL) ADD HL,HL ADD HL,HL ADD HL,HL -; LD A,H -; OR 0xC0 -; LD H,A SET 6,H SET 7,H OR A @@ -2405,11 +2743,7 @@ DeleteExt1 INC SP ADD IX,DE CALL InitScrollBar CALL DrawVScrollBar - IF TREE_REZID CALL MakeTreePathR - ELSE - CALL MakeTreePathR - ENDIF PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel @@ -2421,41 +2755,20 @@ DeleteExt1 INC SP DelName DB 13 DUP 0 -;[]==========================================================[] -QuitConfirmWin - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 208,88,224,50 - W_FILL 4,2,216,10,COLORI.BLACK - W_TEXT 104,3,COLORI.WHITE,"Quit" - W_TEXT 28,19,COLORP.HIGHGRAY,"Do you want quit Flex Navigator ?" - W_BUTTON 32,32,72,14 - W_TEXT 58,35,COLORP.HIGHGRAY,"Yes" - W_BUTTON 120,32,72,14 - W_TEXT 150,35,COLORP.HIGHGRAY,"No" - W_END -.Loop LD IX,REZ2TAB.QuitTab - CALL CheckCoordsMouse - SPDSS DSSF.SCANKEY - JR Z,.Loop - LD A,B - OR A - JR NZ,.Loop - LD A,E - CP 0x1B - JR Z,.Abort - CP 0x0D - JR Z,.OK - RES 5,A - CP 'Y' - JR Z,.OK - CP 'N' - JR NZ,.Loop -.Abort - WINDOWCLOSE - SCF - RET - -.OK - WINDOWCLOSE - OR A - RET +;-------------------------------------------------------------- +COPY +.PathCurrFile DW 0 ; Адрес описателя текущего файла/диры +.PathSrc DW 0 ; Адрес пути источника +.PathDst DW 0 ; Адрес пути приемника +.PathSrcEnd DW 0 ; Адрес хвоста пути источника +.PathDstEnd DW 0 ; Адрес хвоста пути приемника +.CopyFiles DW 0 ; Количество копируемых файлов +.CopyBytes DB 5 DUP 0 ; Количество копируемых байтов +.OverWriteFlg DB 0 ; Флаг перезаписи файлов +.FreeBanks DW 0 ; Количество свободных банков +.CurrReadBytes DD 0 ; Длина читаемого файла +.CurrWriteBytes DD 0 ; Длина записываемого файла +.FHandleSrc DB 0 ; Файл источник +.FHandleDst DB 0 ; Файл приемник +.MemID DB 0 ; Идентификатор памяти под копирование +;-------------------------------------------------------------- diff --git a/rez2_fnsearch.a80 b/rez2_fnsearch.a80 index 7270885..7e8da85 100644 --- a/rez2_fnsearch.a80 +++ b/rez2_fnsearch.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 31.07.2025 savelij +; LAST UPDATE: 07.09.2025 savelij ;[]==========================================================[] QSearchR LD A,(IY+PANEL.FILES_ALL) @@ -120,7 +120,7 @@ InsSymbolSrch CP 0x20 LD B,0x00 PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE LD E,(IX+0x04) ADD HL,DE @@ -130,7 +130,7 @@ InsSymbolSrch CP 0x20 LDDR NotInsSrch PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE LD E,(IX+0x02) ADD HL,DE @@ -198,7 +198,7 @@ QSdelet LD A,(IX+0x02) RET Z PUSH IX POP HL - LD DE,LenInpData + LD DE,INPUTFORM.BUFLINE ADD HL,DE LD E,(IX+0x02) ADD HL,DE @@ -378,9 +378,5 @@ SrchExit POP HL SearchExit WINDOWCLOSE BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) - IF TREE_REZID - CALL NZ,TestTreeR.TestTreeBeg - ELSE - CALL NZ,TestTreeR.TestTreeBeg - ENDIF + JP NZ,TestTreeR.TestTreeBeg RET diff --git a/rez2_fntab.a80 b/rez2_fntab.a80 index 4133c8a..c72aa29 100644 --- a/rez2_fntab.a80 +++ b/rez2_fntab.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 15.08.2025 savelij ;[]==========================================================[] ; Формат таблицы @@ -102,15 +102,5 @@ REZ2TAB DW 0,640,136,256,%0000000100100000,0,DelExit,0 DW 0x8000 -;[]===============================================================[] -.QuitTab: - DW 240,312,120,134,%0000000000100001,0,QuitConfirmWin.OK,0 - DW 328,400,120,134,%0000000000100001,0,QuitConfirmWin.Abort,0 - DW 0,208, 0,256,%0000000000100000,0,QuitConfirmWin.Abort,0 - DW 432,640, 0,256,%0000000000100000,0,QuitConfirmWin.Abort,0 - DW 0,640, 0, 88,%0000000000100000,0,QuitConfirmWin.Abort,0 - DW 0,640,138,256,%0000000000100000,0,QuitConfirmWin.Abort,0 - DW 0x8000 - .EmptyTab: DW 0,640, 0,256,%0000000000000000,0,InputLine.InputLineExitCancel,0 DW 0x8000 diff --git a/rez3_fnmark.a80 b/rez3_fnmark.a80 index 1e3a848..ba93c3b 100644 --- a/rez3_fnmark.a80 +++ b/rez3_fnmark.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 07.09.2025 savelij ;[]==========================================================[] MarkFileR LD A,(IY+PANEL.FILES_ALL) @@ -15,20 +15,8 @@ MarkFileR LD A,(IY+PANEL.FILES_ALL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 - LD L,(IY+PANEL.FIRST_FILE) - LD H,(IY+PANEL.FIRST_FILE + 1) - LD E,(IY+PANEL.CURR_FILE) - LD D,(IY+PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL ; *2 - ADD HL,HL ; *4 - ADD HL,HL ; *8 - LD E,L - LD D,H - ADD HL,HL ; *16 - ADD HL,DE ; *18 - SET 6,H - SET 7,H ; | 0xC000 + LD A,HIGH (CPU3) + CALL GET_HANDLE_ADR LD E,(HL) ; FileHDR.Flag POP AF SETPORT WINSP.CPU3,,0 @@ -64,20 +52,8 @@ UnSelectFile: LD IXL,0x00 .L2 SETPORT WINSP.CPU3,,0 SETPORT WINSP.Y_PORT,0xC0 - LD L,(IY+PANEL.FIRST_FILE) - LD H,(IY+PANEL.FIRST_FILE + 1) - LD E,(IY+PANEL.CURR_FILE) - LD D,(IY+PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL ; *2 - ADD HL,HL ; *4 - ADD HL,HL ; *8 - LD E,L - LD D,H - ADD HL,HL ; *16 - ADD HL,DE ; *18 - FileHDR.SIZE - SET 6,H - SET 7,H ; | 0xC000 + LD A,HIGH (CPU3) + CALL GET_HANDLE_ADR PUSH HL LD DE,FileHDR.Attr ADD HL,DE @@ -85,9 +61,13 @@ UnSelectFile: LD IXL,0x00 POP HL BIT DIR.B_Dir,C ; это дира? IF MARK_DIR - CALL NZ,CountingDirR ; измерение размера диры + PUSH HL + PUSH BC + CALL NZ,RESIDENT.CalcDirSize ; измерение размера диры + POP BC + POP HL ELSE - JR NZ,.MrFile1 ; дирекории копировать не умеем, только файлы + JR NZ,.MrFile1 ; директории копировать не умеем, только файлы ENDIF ; это файл LD B,(HL) ; старое состояние пометки файла @@ -98,10 +78,10 @@ UnSelectFile: LD IXL,0x00 PUSH BC LD BC,FileHDR.SIZE LDIR + IF MARK_DIR BIT DIR.B_Dir,A ; файл или дира JR Z,.L8 - IF MARK_DIR -; копируем размер в байтах из размера диры +; копируем размер в байтах в размер диры LD HL,JUMPS.FILES_BYTES LD DE,WorkBuffer + FileHDR.SizeBytes LD BC,DWORD @@ -467,14 +447,14 @@ SMask21 LD (DE),A SelectAllR: CALL ResInvert SelectAllRN: LD HL,SetInvert PUSH HL - LD A,(IY+PANEL.FILES_ALL) - OR (IY+PANEL.FILES_ALL + 1) + LD A,(IY + PANEL.FILES_ALL) + OR (IY + PANEL.FILES_ALL + 1) RET Z - BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) + BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) RET NZ GETPORT WINSP.CPU3 PUSH AF - BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) + BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L1 LD A,(RAMPAGES.RIGHTPANEL) @@ -496,6 +476,8 @@ SelectAllRN: LD HL,SetInvert EX AF,AF' ; [ ] fat32 .loop: BIT DIR.B_Dir,(IX + FileHDR.Attr) ;!HARDCODE DIRECTORY JR NZ,.SelAll1 +; маркировка только файлов + PUSH BC SET FileHDR.B_MARK,(IX + FileHDR.Flag) LD C,(IX + FileHDR.SizeBytes) LD B,(IX + FileHDR.SizeBytes + 1) @@ -511,7 +493,8 @@ SelectAllRN: LD HL,SetInvert EXX INC HL EXX - LD BC,FileHDR.SIZE +; LD BC,FileHDR.SIZE + POP BC .SelAll1: ADD IX,BC LD A,(IX + FileHDR.Name) OR A @@ -534,7 +517,7 @@ SelectAllRN: LD HL,SetInvert LD (IY+PANEL.BYTES_MARK + 3),D ; [ ] FAT32 EX AF,AF' - LD (IY+PANEL.BYTES_MARK_H),A + LD (IY + PANEL.BYTES_MARK_H),A CALL PrintDIR JP PrnFileInfo @@ -542,13 +525,13 @@ SelectAllRN: LD HL,SetInvert UnSelectAllR: CALL ResInvert UnSelectAllRN: LD HL,SetInvert PUSH HL - LD A,(IY+PANEL.FILES_ALL) - OR (IY+PANEL.FILES_ALL + 1) + LD A,(IY + PANEL.FILES_ALL) + OR (IY + PANEL.FILES_ALL + 1) RET Z - BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) + BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) RET NZ - LD A,(IY+PANEL.FILES_MARK) - OR (IY+PANEL.FILES_MARK + 1) + LD A,(IY + PANEL.FILES_MARK) + OR (IY + PANEL.FILES_MARK + 1) RET Z PUSH IY POP HL @@ -560,7 +543,7 @@ UnSelectAllRN: LD HL,SetInvert DJNZ .L2 GETPORT WINSP.CPU3 PUSH AF - BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) + BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L1 LD A,(RAMPAGES.RIGHTPANEL) @@ -678,619 +661,3 @@ SUB_SIZE: EX AF,AF' ; [ ] fat32 EXX EX AF,AF' RET - - IF MARK_DIR -BUF_MARKDIR -.FILES_MASK DZ "*.*" ; маска файлов -.RET_DIR DZ ".. " ; для выхода из директории -.DIR_NAME DZ " " ; имя текущей директории - -; копирование директории -CopyDirR PUSH IX - PUSH IY - GETPORT WINSP.CPU3 - PUSH AF - LD A,(RAMPAGES.FLX) - SETPORT WINSP.CPU3,,0 - -.EXIT POP AF - SETPORT WINSP.CPU3,,0 - POP IY - POP IX - RET - -; добавление имени директории в список и/или вход/выход -Add2ListDirR - PUSH IX - PUSH IY - GETPORT WINSP.CPU3 - PUSH AF - LD A,(RAMPAGES.FLX) - SETPORT WINSP.CPU3,,0 - PUSH IX - POP DE - LD HL,FileHDR.Name - ADD HL,DE ; смещение до имени в описателе - LD DE,BUF_MARKDIR.DIR_NAME - PUSH DE - LD BC,FileHDR.Name_Size - LDIR ; забрали имя диры - EX DE,HL - CALL .CUTOFFSPACES ; отсечение пробелов - -; выход -.EXIT POP AF - SETPORT WINSP.CPU3,,0 - POP IY - POP IX - RET - -; отсечение пробелов в имени -.CUTOFFSPACES LD A,' ' -.COS2 DEC HL - CP (HL) - JR Z,.COS2 - INC HL - LD (HL),0 - RET - -; добавление имени диры ".." для выхода в предыдущую диру -.ADD_2DOT PUSH HL - LD HL,BUF_MARKDIR.RET_DIR - LD DE,(BUFFERS.CURR_DIRNAME) - LD BC,FFIRST.Name_Size - LDIR - LD (BUFFERS.CURR_DIRNAME),DE - POP HL - RET - -; добавление имени в строку пути -; HL - куда добавлять (хвост текущего пути) -; DE - откуда имя брать -.ADDNAME2PATH CALL .CHECK_BSLASH - LD (HL),'\\' - INC HL - EX DE,HL -; копирование имени из буфера -.COPYNAME2PATH XOR A -.CNP2 CP (HL) - JR Z,.CNP1 - LDI - JR .CNP2 - -.CNP1 LD (DE),A - RET - -; проверка на BACKSLASH -.CHECK_BSLASH DEC HL - LD A,(HL) - CP '\\' - RET Z - INC HL - RET - -; подсчет в байтах размера отмеченной директории -; IX - адрес описателя диры в странице панели которую мерять -CountingDirR PUSH IX - PUSH IY - GETPORT WINSP.CPU3 - PUSH AF ; текущий номер страницы - PUSH IX - BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) - LD A,(RAMPAGES.LEFTPANEL) - JR Z,.L1 - LD A,(RAMPAGES.RIGHTPANEL) -.L1 ; включаем пагу с директорией текущей панели - SETPORT WINSP.CPU3,,0 - XOR A - LD H,A - LD L,A - LD IXH,A ; обнуление уровня вхождения в диры - LD (JUMPS.FILES_BYTES),HL - LD (JUMPS.FILES_BYTES + 2),HL ; обнуление размера диры - LD (JUMPS.FILES_COUNT),HL ; обнуление количества файлов - LD HL,CPU3 - LD (BUFFERS.CURR_DIRNAME),HL -; сохранение текущего пути для возврата - SPDSS DSSF.CURDISK - LD HL,BUFFERS.OLDPATH ; сохраненый путь для возврата - ADD A,'A' - LD (HL),A - INC HL - LD (HL),':' - INC HL - SPDSS DSSF.CURDIR - POP DE - JP C,.END_COUNT -; вход в директорию - LD HL,FileHDR.Name - ADD HL,DE - LD DE,BUF_MARKDIR.DIR_NAME - PUSH DE - LD BC,FileHDR.Name_Size - LDIR ; забрали имя диры для измерения - LD A,(RAMPAGES.FLX) - SETPORT WINSP.CPU3,,0 - CALL .ADD_2DOT ; для возврата в предыдущую диру - POP HL - LD DE,(BUFFERS.CURR_DIRNAME) - LD BC,FileHDR.Name_Size - LDIR ; имя диры для входа - LD (BUFFERS.CURR_DIRNAME),DE - XOR A - LD (DE),A - CALL .SET_PATH ; установка текущего пути - INC IXH ; следующий уровень диры -.CONTINUE CALL .ADD_2DOT ; для возврата в предыдущую диру - CALL .COUNT_FILES - LD A,IXL - AND A ; здесь диры есть? - JR Z,.PREV_DIR ; диры не найдены - CALL .SET_PATH ; вход в диру из списка - INC IXH ; следующий уровень диры - JR .CONTINUE - -; выход в предыдущую диру -.PREV_DIR CALL .OUT_DIR - LD A,IXH ; уровень диры? - AND A - JR Z,.END_COUNT - CALL .GET_NAME - CALL .GET_NAME - LD HL,(BUFFERS.CURR_DIRNAME) - LD DE,-FileHDR.Name_Size - ADD HL,DE - LD A,(HL) - CP '.' - JR Z,.PREV_DIR - CALL .SET_PATH - INC IXH ; следующий уровень диры - JR .CONTINUE - -; возврат текущего пути -.END_COUNT POP AF - SETPORT WINSP.CPU3,,0 - LD HL,BUFFERS.OLDPATH ; сохраненый путь для возврата - SPDSS DSSF.CHDIR - POP IY - POP IX - RET - -; выход в предыдущую диру -.GET_NAME LD HL,(BUFFERS.CURR_DIRNAME) - LD (HL),0 - LD DE,-FileHDR.Name_Size - ADD HL,DE - LD (BUFFERS.CURR_DIRNAME),HL - RET - -.OUT_DIR DEC IXH ; предыдущий уровень диры - LD HL,BUF_MARKDIR.RET_DIR - JR .SP1 - -; переход в диру из списка -.SET_PATH LD HL,(BUFFERS.CURR_DIRNAME) - LD DE,-FileHDR.Name_Size - ADD HL,DE - LD DE,BUF_MARKDIR.DIR_NAME - PUSH DE - LD BC,FFIRST.Name_Size - LDIR - POP HL -.SP1 PUSH IX - SPDSS DSSF.CHDIR - SPDSS DSSF.CURDISK - LD HL,BUFFERS.CURRPATHSRC - ADD A,'A' - LD (HL),A - INC HL - LD (HL),':' - INC HL - SPDSS DSSF.CURDIR - POP IX - RET - -; добавление имени диры ".." для выхода в предыдущую диру -.ADD_2DOT PUSH HL - LD HL,BUF_MARKDIR.RET_DIR - LD DE,(BUFFERS.CURR_DIRNAME) - LD BC,FFIRST.Name_Size - LDIR - LD (BUFFERS.CURR_DIRNAME),DE - POP HL - RET - -; пересчитываем размеры файлов в текущей директории -; и выгребаем имена дир в табличку -.COUNT_FILES LD IXL,0 ; количество дир в текущей дире - CALL .F_FIRST ; ищем первый описатель - RET C ; выход если ничего не найдено -.L2 LD DE,FFIRST.Attr - ADD HL,DE - LD A,(HL) - SBC HL,DE - BIT DIR.B_Dir,A - JR Z,.ADD_FILES_BYTES -; для диры копируем имя в табличку - LD DE,FFIRST.Name - ADD HL,DE - LD A,(HL) - CP '.' ; . и .. пропускаем - JR Z,.L5 -; для диры копируем имя в табличку - LD DE,(BUFFERS.CURR_DIRNAME) - LD BC,FFIRST.Name_Size - LDIR - LD (BUFFERS.CURR_DIRNAME),DE - INC IXL - JR .L5 - -; для файла добавляем длину -.ADD_FILES_BYTES: - LD DE,FFIRST.FileSize - ADD HL,DE - CALL GET_DWORD ; взять размер из описателя - LD HL,JUMPS.FILES_BYTES - CALL HLPBCDE ; добавили к текущему размеру - LD HL,(JUMPS.FILES_COUNT) - INC HL - LD (JUMPS.FILES_COUNT),HL ; инкремент количества файлов -; ищем следующий описатель -.L5 CALL .F_NEXT - JR NC,.L2 - RET - -; поиск первого описателя -.F_FIRST LD A, DIR.M_Archive + \ - DIR.M_System + \ - DIR.M_Hidden + \ - DIR.M_ReadOnly + \ - DIR.M_Dir -.FFF1 LD HL,BUF_MARKDIR.FILES_MASK - LD DE,BUFFERS.OLDPATH - PUSH DE - PUSH IX - SPDSS DSSF.F_FIRST,0 - POP IX - POP HL - RET - -; поиск следующего описателя -.F_NEXT LD DE,BUFFERS.OLDPATH - PUSH DE - PUSH IX - SPDSS DSSF.F_NEXT - POP IX - POP HL - RET - -; инициализация копирования директории с содержимым -InitCopyDirsR PUSH IX - PUSH IY - GETPORT WINSP.CPU3 - PUSH AF - BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) - LD HL,LeftPanel ; для пути откуда копировать - LD DE,RightPanel ; для пути куда копировать - LD A,(RAMPAGES.LEFTPANEL) ; из какой страницы панели брать путь - JR Z,.L1 - LD HL,RightPanel ; для пути откуда копировать - LD DE,LeftPanel ; для пути куда копировать - LD A,(RAMPAGES.RIGHTPANEL) ; из какой страницы панели брать путь -.L1 -; включаем пагу с директорией текущей панели - PUSH HL - SETPORT WINSP.CPU3,,0 - LD HL,PANEL.CURR_PATH - ADD HL,DE ; откуда путь приемника взять - LD DE,BUFFERS.CURRPATHDST ; буфер пути приемника - CALL .COPYNAME2PATH - LD (BUFFERS.ENDPATHDST),DE ; адрес хвоста пути приемника -; копирование имени директории для копирования - PUSH IX - POP DE - LD HL,FileHDR.Name - ADD HL,DE - LD DE,BUF_MARKDIR.DIR_NAME - LD BC,FileHDR.Name_Size - LDIR ; забрали имя диры для копирования - EX DE,HL - CALL .CUTOFFSPACES ; отсечение пробелов -; перенос текущего пути источника - POP DE - LD HL,PANEL.CURR_PATH - ADD HL,DE ; откуда путь приемника взять - LD DE,BUFFERS.CURRPATHSRC - CALL .COPYNAME2PATH ; скопировали путь источника - LD (BUFFERS.ENDPATHSRC),DE ; адрес хвоста пути источника -; добавление имени диры для копирования в путь источника - LD HL,(BUFFERS.ENDPATHSRC) - LD DE,BUF_MARKDIR.DIR_NAME - CALL .ADDNAME2PATH - LD (BUFFERS.ENDPATHSRC),DE ; адрес хвоста пути источника -; добавление имени диры для копирования в путь приемника - LD HL,(BUFFERS.ENDPATHDST) - LD DE,BUF_MARKDIR.DIR_NAME - CALL .ADDNAME2PATH - LD (BUFFERS.ENDPATHDST),DE - XOR A - LD (BUFFERS.LEVEL_DIR),A -; выход - POP AF - SETPORT WINSP.CPU3,,0 - POP IY - POP IX - RET - -; добавление имени в строку пути -; HL - куда добавлять (хвост текущего пути) -; DE - откуда имя брать -.ADDNAME2PATH CALL .CHECK_BSLASH - LD (HL),'\\' - INC HL - EX DE,HL -; копирование имени из буфера -.COPYNAME2PATH XOR A -.CNP2 CP (HL) - JR Z,.CNP1 - LDI - JR .CNP2 - -.CNP1 LD (DE),A - RET - -;.NAME2DIRNAME - -; проверка на BACKSLASH -.CHECK_BSLASH DEC HL - LD A,(HL) - CP '\\' - RET Z - INC HL - RET - -; отсечение пробелов в имени -.CUTOFFSPACES LD A,' ' -.COS2 DEC HL - CP (HL) - JR Z,.COS2 - INC HL - LD (HL),0 - RET - -; создание папок на приемнике -; HL - адрес описателя диры в странице панели которую копировать -MkdirsDstRR PUSH IX - PUSH IY - GETPORT WINSP.CPU3 - PUSH AF - LD (.OLDSP),SP - PUSH HL - BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) - LD DE,RightPanel ; для пути куда копировать - LD A,(RAMPAGES.LEFTPANEL) ; из какой страницы панели брать путь - JR Z,.L1 - LD DE,LeftPanel ; для пути куда копировать - LD A,(RAMPAGES.RIGHTPANEL) ; из какой страницы панели брать путь -.L1 -; включаем пагу с директорией текущей панели - SETPORT WINSP.CPU3,,0 - LD HL,PANEL.CURR_PATH - ADD HL,DE ; откуда путь приемника взять - LD DE,BUFFERS.CURRPATHDST ; буфер пути приемника - CALL .COPYNAME2PATH - LD (BUFFERS.ENDPATHDST),DE ; адрес хвоста пути приемника -; сохранение текущего пути для возврата - SPDSS DSSF.CURDISK - LD HL,BUFFERS.OLDPATH ; сохраненный путь для возврата - ADD A,'A' - LD (HL),A - INC HL - LD (HL),':' - INC HL - SPDSS DSSF.CURDIR - POP DE ; адрес описателя диры в странице панели которую копировать -; JP C,ERROR ;CountingDirR.END_COUNT -; копирование имени директории для копирования - LD HL,FileHDR.Name - ADD HL,DE - LD DE,BUF_MARKDIR.DIR_NAME - LD BC,FileHDR.Name_Size - LDIR ; забрали имя диры для копирования - EX DE,HL - CALL .CUTOFFSPACES ; отсечение пробелов -; перенос текущего пути источника - LD HL,BUFFERS.OLDPATH - LD DE,BUFFERS.CURRPATHSRC - CALL .COPYNAME2PATH ; скопировали путь источника - LD (BUFFERS.ENDPATHSRC),DE ; адрес хвоста пути источника -; добавление имени диры для копирования в путь источника - LD HL,(BUFFERS.ENDPATHSRC) - LD DE,BUF_MARKDIR.DIR_NAME - CALL .ADDNAME2PATH - LD (BUFFERS.ENDPATHSRC),DE ; адрес хвоста пути источника -; добавление имени диры для копирования в путь приемника - LD HL,(BUFFERS.ENDPATHDST) - LD DE,BUF_MARKDIR.DIR_NAME - CALL .ADDNAME2PATH - LD (BUFFERS.ENDPATHDST),DE - -; создание диры в приемнике - LD HL,BUFFERS.CURRPATHDST - SPDSS DSSF.MKDIR ; создали диру приемника - JR NC,.L3 - CP ERR_DSS.DIR_EXISTS ; если дира уже есть игнорим ошибку -; JP C,ERROR -.L3 - -; TODO циклический поиск директорий с созданием на приемнике - LD HL,BUFFERS.CURRPATHSRC - SPDSS DSSF.CHDIR ; вход в диру источника - CALL .FINDFIRSTSRCDIR ; поиск первого описателя - JP C,.ENDCOPY ; больше директорий нет, выходим -; поиск директорий -.L2 CALL .FINDNEXTSRCDIR ; поиск следующего описателя - JP C,.ENDFINDNEXT ; поиск окончен? - LD HL,BUFFERS.FINDBUF + FFIRST.Name - LD A,(HL) - CP '.' ; описатели "." и ".." игнорим - JR Z,.L2 - LD DE,.TMPNAMEDIR - PUSH DE - CALL .COPYNAME2PATH - LD HL,(BUFFERS.ENDPATHDST) - POP DE - CALL .ADDNAME2PATH - LD HL,BUFFERS.CURRPATHDST - SPDSS DSSF.MKDIR ; создаем диру на приемнике -; JP C,ERROR - LD HL,BUFFERS.CURRPATHSRC - SPDSS DSSF.CHDIR ; возвращаем путь на источник -; JP C,ERROR - JR .L2 ; ищем следующий - -; завершение и выход - JP CountingDirR.END_COUNT;RestoreDIR - -; LD A,(RAMPAGES.FLX) -; SETPORT WINSP.CPU3,,0 - -.ENDFINDNEXT - JR $ - -; поиск первой диры в текущей поддиректории -.FINDFIRSTSRCDIR - LD HL,BUF_MARKDIR.FILES_MASK - LD DE,BUFFERS.FINDBUF - SPDSS DSSF.F_FIRST,1,DIR.M_Dir - RET - -.FINDNEXTSRCDIR - LD DE,BUFFERS.FINDBUF - SPDSS DSSF.F_NEXT - RET - -; добавление имени в строку пути -; HL - куда добавлять (хвост текущего пути) -; DE - откуда имя брать -.ADDNAME2PATH CALL .CHECK_BSLASH - LD (HL),'\\' - INC HL - EX DE,HL -; копирование имени из буфера -.COPYNAME2PATH XOR A -.CNP2 CP (HL) - JR Z,.CNP1 - LDI - JR .CNP2 - -.CNP1 LD (DE),A - RET - -;.NAME2DIRNAME - -; проверка на BACKSLASH -.CHECK_BSLASH DEC HL - LD A,(HL) - CP '\\' - RET Z - INC HL - RET - -; отсечение пробелов в имени -.CUTOFFSPACES LD A,' ' -.COS2 DEC HL - CP (HL) - JR Z,.COS2 - INC HL - LD (HL),0 - RET - -; отсечение имени диры в строке пути -.DELNAME2PATH LD A,'\\' -.COB1 DEC HL - CP (HL) - JR NZ,.COB1 - LD (HL),0 - RET - -; выход из копирования директорий -.ENDCOPY LD SP,0 -.OLDSP EQU $-2 - LD HL,BUFFERS.OLDPATH - SPDSS DSSF.CHDIR - POP AF - SETPORT WINSP.CPU3,,0 - POP IY - POP IX - RET - -;.ENDPATHSRC DW 0 ; адрес хвоста пути источника -;.ENDPATHDST DW 0 ; адрес хвоста пути приемника -.TMPNAMEDIR DB 8 DUP 0 - ENDIF - -; C:/DEV/ -; /CAMEL401 -; /DEMON -; /MASM80 -; /OASM028 -; /SOLID -; /DOC -; /EXAMPLES -; /INCLUDE -; /SRC -; /CLIB -; /BUILD -; /SPFORTH -; /F83 -; /F99 -; /TASM - -; DEV -; .. -; CAMEL401 -; DEMON -; MASM80 -; OASM028 -; SOLID -; SPFORTH -; TASM -; .. -; DOC -; EXAMPLES -; INCLUDE -; SRC -; .. -; CLIB -; .. -; BUILD -; .. -; F83 -; F99 - -;DEV/CAMEL401/ 25 -;DEV/DEMON/ 2 -;DEV/MASM/ 10 -;DEV/OASM28/ 5 -;DEV/SOLID/ 8 -;DEV/SOLID/DOC/ 13 -;DEV/SOLID/EXAMPLES/ 36 -;DEV/SOLID/INCLUDE/ 16 -;DEV/SOLID/SRC/CLIB/ 12 -;DEV/SOLID/SRC/CLIB/BUILD/ 8 -;DEV/SPFORTH/F83/ 4 -;DEV/SPFORTH/F99/ 3 -;DEV/TASM/ 6 -;----------------------------------- -; 0x94 148 - -; генерация списка для копирования дир -; "." для выхода в предыдущую диру -; 0 конец списка -; имена дир по 8 символов (можно и 8.3) только имена без 0 в конце имени - -; при копировании найдена дира -; занесение в путь источника имени диры -; занесение в путь приемника имени диры -; занесение в список ".." для выхода diff --git a/rez3_fnmisc.a80 b/rez3_fnmisc.a80 index 1cd5d93..00b340a 100644 --- a/rez3_fnmisc.a80 +++ b/rez3_fnmisc.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 02.09.2025 savelij ;[]==========================================================[] VersionR @@ -57,21 +57,23 @@ FileInfoR LD A,(IY+PANEL.FILES_ALL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 - LD L,(IY+PANEL.FIRST_FILE) - LD H,(IY+PANEL.FIRST_FILE + 1) - LD E,(IY+PANEL.CURR_FILE) - LD D,(IY+PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL - ADD HL,HL - ADD HL,HL - LD E,L - LD D,H - ADD HL,HL - ADD HL,DE - LD A,H - OR 0xC0 - LD H,A +; LD L,(IY+PANEL.FIRST_FILE) +; LD H,(IY+PANEL.FIRST_FILE + 1) +; LD E,(IY+PANEL.CURR_FILE) +; LD D,(IY+PANEL.CURR_FILE + 1) +; ADD HL,DE +; ADD HL,HL +; ADD HL,HL +; ADD HL,HL +; LD E,L +; LD D,H +; ADD HL,HL +; ADD HL,DE +; LD A,H +; OR 0xC0 +; LD H,A + LD A,HIGH (CPU3) + CALL GET_HANDLE_ADR LD DE,WorkBuffer LD BC,0x0018 LDIR @@ -697,21 +699,23 @@ PrintFileR LD A,(IY+PANEL.FILES_ALL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 - LD L,(IY+PANEL.FIRST_FILE) - LD H,(IY+PANEL.FIRST_FILE + 1) - LD E,(IY+PANEL.CURR_FILE) - LD D,(IY+PANEL.CURR_FILE + 1) - ADD HL,DE - ADD HL,HL - ADD HL,HL - ADD HL,HL - LD E,L - LD D,H - ADD HL,HL - ADD HL,DE - LD A,H - OR 0xC0 - LD H,A +; LD L,(IY+PANEL.FIRST_FILE) +; LD H,(IY+PANEL.FIRST_FILE + 1) +; LD E,(IY+PANEL.CURR_FILE) +; LD D,(IY+PANEL.CURR_FILE + 1) +; ADD HL,DE +; ADD HL,HL +; ADD HL,HL +; ADD HL,HL +; LD E,L +; LD D,H +; ADD HL,HL +; ADD HL,DE +; LD A,H +; OR 0xC0 +; LD H,A + LD A,HIGH (CPU3) + CALL GET_HANDLE_ADR LD DE,WorkBuffer LD BC,0x0018 LDIR @@ -955,3 +959,42 @@ PrnFileName: DB 13 DUP 0 PrnFileLen: DB 4 DUP 0 PrnMIndef: DB 0 PrnFHandle: DB 0 + +;[]==========================================================[] +QuitConfirmWin + MAKEWINDOW WINSUBOBJ.STORE + W_MAIN 208,88,224,50 + W_FILL 4,2,216,10,COLORI.BLACK + W_TEXT 104,3,COLORI.WHITE,"Quit" + W_TEXT 28,19,COLORP.HIGHGRAY,"Do you want quit Flex Navigator ?" + W_BUTTON 32,32,72,14 + W_TEXT 58,35,COLORP.HIGHGRAY,"Yes" + W_BUTTON 120,32,72,14 + W_TEXT 150,35,COLORP.HIGHGRAY,"No" + W_END +.Loop LD IX,REZ3TAB.QuitTab + CALL CheckCoordsMouse + SPDSS DSSF.SCANKEY + JR Z,.Loop + LD A,B + OR A + JR NZ,.Loop + LD A,E + CP 0x1B + JR Z,.Abort + CP 0x0D + JR Z,.OK + RES 5,A + CP 'Y' + JR Z,.OK + CP 'N' + JR NZ,.Loop +.Abort + WINDOWCLOSE + SCF + RET + +.OK + WINDOWCLOSE + OR A + RET diff --git a/rez3_fnnext.a80 b/rez3_fnnext.a80 index 2fb355d..f07c5dd 100644 --- a/rez3_fnnext.a80 +++ b/rez3_fnnext.a80 @@ -1,15 +1,15 @@ -; LAST UPDATE: 13.08.2025 savelij +; LAST UPDATE: 15.08.2025 savelij ;[]==========================================================[] InitExtention: LD HL,INIFILES.ExtName1 - LD DE,BUFFERS.fn_ext + LD DE,REZ3_BUFFERS.fn_ext CALL InitExt LD HL,INIFILES.ExtName2 - LD DE,BUFFERS.fnview_ext + LD DE,REZ3_BUFFERS.fnview_ext CALL InitExt LD HL,INIFILES.ExtName3 - LD DE,BUFFERS.fnedit_ext + LD DE,REZ3_BUFFERS.fnedit_ext ;[]----------------------------------------------------------[] InitExt: LD (.EXTdata),DE SPDSS DSSF.OPEN,,1 diff --git a/rez3_fntab.a80 b/rez3_fntab.a80 index fe84e4c..c0cf155 100644 --- a/rez3_fntab.a80 +++ b/rez3_fntab.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 14.08.2025 savelij +; LAST UPDATE: 15.08.2025 savelij ;[]==========================================================[] ; Формат таблицы @@ -74,3 +74,13 @@ REZ3TAB ;[]===============================================================[] .PrintFTab: DW 284,356,128,142,%0000000000000001,0,StopPrint,0 DW 0x8000 + +;[]===============================================================[] +.QuitTab: + DW 240,312,120,134,%0000000000100001,0,QuitConfirmWin.OK,0 + DW 328,400,120,134,%0000000000100001,0,QuitConfirmWin.Abort,0 + DW 0,208, 0,256,%0000000000100000,0,QuitConfirmWin.Abort,0 + DW 432,640, 0,256,%0000000000100000,0,QuitConfirmWin.Abort,0 + DW 0,640, 0, 88,%0000000000100000,0,QuitConfirmWin.Abort,0 + DW 0,640,138,256,%0000000000100000,0,QuitConfirmWin.Abort,0 + DW 0x8000