diff --git a/docs/history.txt b/docs/history.txt index 0031d2d..e3f759e 100644 --- a/docs/history.txt +++ b/docs/history.txt @@ -1,4 +1,9 @@ +11.05.2026 +FlexNavigator 1.16.07 +- получение путей программы и формирование путей до плагинов перенесены + в начало инициализации. + 22.01.2026 FlexNavigator 1.16.06 - для ошибок у которых нет текста описания теперь выдает всегда diff --git a/fn/flx/cdplayer.flx b/fn/flx/cdplayer.flx index 217a0e3..b0fc8df 100644 Binary files a/fn/flx/cdplayer.flx and b/fn/flx/cdplayer.flx differ diff --git a/fn/flx/fneditor.flx b/fn/flx/fneditor.flx index 8e87313..06cb00c 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 64d720b..d56329a 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 ebb830f..4e269ea 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 fff5941..20d365a 100644 Binary files a/fn/fn.exe and b/fn/fn.exe differ diff --git a/fn/history.txt b/fn/history.txt index 0031d2d..e3f759e 100644 --- a/fn/history.txt +++ b/fn/history.txt @@ -1,4 +1,9 @@ +11.05.2026 +FlexNavigator 1.16.07 +- получение путей программы и формирование путей до плагинов перенесены + в начало инициализации. + 22.01.2026 FlexNavigator 1.16.06 - для ошибок у которых нет текста описания теперь выдает всегда diff --git a/fn_const.a80 b/fn_const.a80 index ce2ac8c..d7de134 100644 --- a/fn_const.a80 +++ b/fn_const.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 18.01.2026 savelij +; LAST UPDATE: 11.05.2026 savelij NUM_FILES_PANEL EQU 17 ; количество файлов в столбце панели NUM_PAGES_FN EQU 7 ; количество страниц памяти для работы FN @@ -152,9 +152,11 @@ PANEL _SETVAR .BYTES_MARK_H, BYTE ; Кол-во маркированных байтов FAT32 _SETVAR .FILE_MASK, MASK_SIZE ; Маска показа файлов _SETVAR .CURR_PATH, 0x100 ; Текущий путь панели + _SETVAR .SIZE, 0 ; Размер структуры панели PANELFLAG _BITMASK PRNDOSPATH, 7 ; =1-печатать путь DOS + _BITMASK DIRS, 2 ; =1-в помеченных есть директории, =0-только файлы _BITMASK DIRPAGE, 1 ; =1-A-номер страницы, =0-страницы панелей _BITMASK SIDE, 0 ; =1-правая панель, =0-левая панель diff --git a/fn_init.a80 b/fn_init.a80 index 478fa6e..0844f13 100644 --- a/fn_init.a80 +++ b/fn_init.a80 @@ -1,11 +1,14 @@ -; LAST UPDATE: 27.08.2025 savelij +; LAST UPDATE: 11.05.2026 savelij ;[]==========================================================[] -InitVideoMode +InitVideoMode LD A,0x00 +.InitFlg EQU $-1 + OR A + CALL Z,FirstInit SPDSS DSSF.GETVMOD LD C,A ; текущий режим экрана - LD A,(InitFlg) + LD A,(InitVideoMode.InitFlg) OR A JR NZ,.L1 LD A,C @@ -105,18 +108,14 @@ InitDrivers SUB A JR C,.L2 INC A .L2 LD (CMOSFlag),A - LD A,0x00 -InitFlg EQU $-1 - OR A - CALL Z,FirstInit CALL SETUP_DISKS SPMOUSE MOUSEF.INIT LD A,(MouseFlag) OR A LD C,MOUSEF.SHOW - JR NZ,.L1 + JR NZ,.L4 LD C,MOUSEF.HIDE -.L1 +.L4 SPMOUSE ;!TEST enable shared interrupts ;Check BIOS version @@ -259,7 +258,7 @@ FirstInit LD HL,LeftPanel + PANEL.CURR_PATH SPDSS DSSF.CHDIR LD A,0x01 - LD (InitFlg),A + LD (InitVideoMode.InitFlg),A RET .DIRFLX DZ "FLX\\" diff --git a/fn_main.a80 b/fn_main.a80 index d51e90c..8a54859 100644 --- a/fn_main.a80 +++ b/fn_main.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 18.01.2026 savelij +; LAST UPDATE: 30.04.2026 savelij include fn_const.a80 include fn_macros.a80 @@ -236,6 +236,7 @@ HLPBCDE: LD A,(HL) LD (HL),A RET +; получение DWORD по указателю HL GET_DWORD: LD E,(HL) INC HL LD D,(HL) @@ -245,6 +246,7 @@ GET_DWORD: LD E,(HL) LD B,(HL) RET +; установка DWROD по указателю HL SET_DWORD: LD (HL),E INC HL LD (HL),D @@ -254,6 +256,8 @@ SET_DWORD: LD (HL),E LD (HL),B RET +; получение указателя на описатель файла +; A - старший байт адрес буфера с описателями GET_HANDLE_ADR LD L,(IY+PANEL.FIRST_FILE) LD H,(IY+PANEL.FIRST_FILE + 1) LD E,(IY+PANEL.CURR_FILE) @@ -485,10 +489,10 @@ START_BLOCK_2 ; буфера чтобы память не занимали в EXE файле REZ2_BUFFERS _INIT_VAR BUF_REZ2.FlexDIRECTORY - _MINUSVAR .OLDLEFTPANEL, 0x100 ; текущий путь левой панели - _MINUSVAR .OLDRIGHTPANEL, 0x100 ; текущий путь правой панели _MINUSVAR .FINDCURRPATH, 0x100 ; временной текущий путь источника _MINUSVAR .FINDBUF, 0x100 ; временный буфер поиска + _MINUSVAR .OLDLEFTPANEL, PANEL.SIZE ; текущий путь левой панели + _MINUSVAR .OLDRIGHTPANEL, PANEL.SIZE ; текущий путь правой панели _MINUSVAR .ENDPATHSRC, WORD ; адрес хвоста пути источника _MINUSVAR .CURR_DIRNAME, WORD ; текущий адрес в пути diff --git a/fn_sort.a80 b/fn_sort.a80 index 34ef2b8..6d3f1d4 100644 --- a/fn_sort.a80 +++ b/fn_sort.a80 @@ -1,32 +1,58 @@ -; LAST UPDATE: 07.09.2025 savelij +; LAST UPDATE: 09.05.2026 savelij ;[]----------------------------------------------------------[] -; На входе: -; 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 +ReadDIRCopy + GETPORT WINSP.CPU3 + PUSH AF + LD A,(IY + PANEL.SORTFLAG) + AND SORTFLAG.MASK + LD A,(RAMPAGES.BuffPg3) + JR Z,.L1 + LD A,(RAMPAGES.BuffPg4) +.L1 + SETPORT WINSP.CPU3,,0 + LD HL,NORMmask +.L2 LD DE,FILEmask + LD BC,MASK_SIZE + LDIR + LD IX,0 + LD HL,CPU3 + LD (AdrNxtFile),HL + LD B,8 +.L3 LD (HL),0 + INC HL + DJNZ .L3 + CALL FindFILES + LD E,IXL + LD D,IXH + LD HL,(AdrNxtFile) + LD B,8 +.L4 LD (HL),0 + INC HL + DJNZ .L4 + POP AF + SETPORT WINSP.CPU3,,0 + LD (IY + PANEL.FILES_ALL),E ;EQUIP FIL + LD (IY + PANEL.FILES_ALL + 1),D + LD HL,(RAMPAGES.BuffPg3) + JP ReadDIR.RD3 + +; загрузка директории для отображения в панели с сортировкой +ReadDIR BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) + JP NZ,ReadTreeR ; переход если панель в режиме дерева GETPORT WINSP.CPU3 PUSH AF 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 + LD A,(RAMPAGES.BuffPg3) + JR NZ,.RD1 ; с сортировкой грузим во временную страницу +; иначе грузим в страницу панели + BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) + LD A,(RAMPAGES.LEFTPANEL) + JR Z,.RD1 + LD A,(RAMPAGES.RIGHTPANEL) +.RD1 SETPORT WINSP.CPU3,,0 PUSH IY POP HL @@ -34,8 +60,6 @@ ReadDIR BIT PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) 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 @@ -43,8 +67,8 @@ ReadDIR BIT PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) .L5 LD (HL),0 INC HL DJNZ .L5 -.L8 RES PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) - BIT SORTFLAG.B_FILTER,(IY + PANEL.SORTFLAG) + EX DE,HL +.L8 BIT SORTFLAG.B_FILTER,(IY + PANEL.SORTFLAG) JR NZ,.L2 LD HL,NORMmask .L2 LD DE,FILEmask @@ -71,7 +95,14 @@ ReadDIR BIT PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) SETPORT WINSP.CPU3,,0 LD (IY + PANEL.FILES_ALL),E ;EQUIP FIL LD (IY + PANEL.FILES_ALL + 1),D - LD A,(IY + PANEL.SORTFLAG) + BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) + LD A,(RAMPAGES.LEFTPANEL) + JR Z,.RD2 + LD A,(RAMPAGES.RIGHTPANEL) +.RD2 LD L,A ; куда + LD A,(RAMPAGES.BuffPg3) + LD H,A ; откуда +.RD3 LD A,(IY + PANEL.SORTFLAG) AND SORTFLAG.MASK JP NZ,SortDIR RET @@ -398,15 +429,23 @@ CorrSmallChar CP 'a' ENDIF ; CORR_FILENAME ;[]----------------------------------------------------------[] +; H - SRC номер страницы откуда брать для сортировки +; L - DST номер страницы куда складывать отсортированное SortDIR GETPORT WINSP.CPU1 LD C,A GETPORT WINSP.CPU3 LD B,A PUSH BC - LD A,(ReadDIR.DIRPAGE) +; BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) +; LD A,(RAMPAGES.LEFTPANEL) +; JR Z,.RD1 +; LD A,(RAMPAGES.RIGHTPANEL) +;.RD1 + LD A,L SETPORT WINSP.CPU3,,0 - LD A,(RAMPAGES.BuffPg4) +; LD A,(RAMPAGES.BuffPg3) + LD A,H SETPORT WINSP.CPU1,,0 LD HL,CPU3 LD (EndSort),HL @@ -501,6 +540,14 @@ SortDIR .L3 LD (HL),A INC HL DJNZ .L3 +; GETPORT WINSP.CPU1 +; LD (RAMPAGES.BuffPg3),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/fn_version.a80 b/fn_version.a80 index 0015b58..5703915 100644 --- a/fn_version.a80 +++ b/fn_version.a80 @@ -1,7 +1,7 @@ -; LAST UPDATE: 22.01.2026 savelij +; LAST UPDATE: 11.05.2026 savelij FLEX_VERS -.NAVIGATOR EQU "1.16.06" +.NAVIGATOR EQU "1.16.07" .EDITOR EQU "1.11" .VIEWER EQU "1.07" diff --git a/plugins/cdplayer/cdplayer.a80 b/plugins/cdplayer/cdplayer.a80 index 1884ae0..f6a9c4c 100644 --- a/plugins/cdplayer/cdplayer.a80 +++ b/plugins/cdplayer/cdplayer.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 31.07.2025 savelij +; LAST UPDATE: 30.01.2026 savelij include macros.a80 include fn_const.a80 @@ -22,7 +22,7 @@ PluginEntry: MAKEWINDOW WINSUBOBJ.STORE W_MAIN 78,79,484,72 W_FILL 4,2,464,10,COLORI.BLUE + COLORP.BLUE - W_TEXT 8,4,COLORI.WHITE + COLORP.BLUE,"SHAOS CD-Player v\{CDVERS}" + W_TEXT 8,4,COLORI.WHITE + COLORP.BLUE,"Flex CD Player v\{CDVERS}" W_BUTTONTEXT 468,2,12,10,COLORP.HIGHGRAY,"x" W_BORDER 8,15,268,38 W_FILL 10,16,264,36,COLORI.BLACK @@ -261,7 +261,7 @@ CDinit: LD B,0xC0 - 1 CALL CHANGEDISK LD HL,FLAG RES B_TRAY,(HL) -.UPDATE_TOC LD HL,RESULT+6 +.UPDATE_TOC LD HL,RESULT + 6 LD (HL),0xAA LD HL,APCMD.READTOC CALL SEND_PACKET diff --git a/plugins/cdplayer/vers.a80 b/plugins/cdplayer/vers.a80 index 533feed..4132ea7 100644 --- a/plugins/cdplayer/vers.a80 +++ b/plugins/cdplayer/vers.a80 @@ -1,7 +1,7 @@ -; LAST UPDATE: 11.07.2025 savelij +; LAST UPDATE: 11.05.2026 savelij -CDVERS EQU "1.1" +CDVERS EQU "1.11" PAUSE EQU 10 ; шаг в секундах для перемотки PAUSEDIGITS EQU 12 ; пауза моргания цифр в режиме пауза \ No newline at end of file diff --git a/readme.md b/readme.md index 55c1de6..fd7b6bc 100644 --- a/readme.md +++ b/readme.md @@ -3,14 +3,9 @@ Flex Navigator ╨┤╨╗╤П ╨║╨╛╨╝╨┐╤М╤О╤В╨╡╤А╨░ Sprinter ╨б╨╛╨▒╤А╨░╨╜╨╜╤Л╨╡ ╤Д╨░╨╣╨╗╤Л ╨╖╨░╨▒╨╕╤А╨░╤В╤М ╨╕╨╖ ╨┐╨░╨┐╨║╨╕ fn -`FlexNavigator 1.16.06` -- ╨┤╨╗╤П ╨╛╤И╨╕╨▒╨╛╨║ ╤Г ╨║╨╛╤В╨╛╤А╤Л╤Е ╨╜╨╡╤В ╤В╨╡╨║╤Б╤В╨░ ╨╛╨┐╨╕╤Б╨░╨╜╨╕╤П ╤В╨╡╨┐╨╡╤А╤М ╨▓╤Л╨┤╨░╨╡╤В ╨▓╤Б╨╡╨│╨┤╨░ - ╤В╨╡╨║╤Б╤В ╨╛╤И╨╕╨▒╨║╨╕ "Unknown Error". -- ╨╕╤Б╨┐╤А╨░╨▓╨╗╨╡╨╜╨░ ╨╛╤И╨╕╨▒╨║╨░ ╨┐╤А╨╕╨▓╨╛╨┤╤П╤Й╨░╤П ╨║ ╨▓╤Л╨╗╨╡╤В╤Г ╨┐╤А╨╕ ╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╨╜╨╕╨╕ ╨╜╨╡╤Б╨║╨╛╨╗╤М╨║╨╕╤Е ╤Д╨░╨╣╨╗╨╛╨▓ - ╨╜╨░ ╤Г╨╢╨╡ ╤Б╤Г╤Й╨╡╤Б╤В╨▓╤Г╤О╤Й╨╕╨╡ ╨╕ ╨▓╤Л╨▒╨╛╤А╨╡ ╨╛╤В╨╝╨╡╨╜╤Л ╨╛╤В ╨┐╤А╨╛╨┤╨╛╨╗╨╢╨╡╨╜╨╕╤П ╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╨╜╨╕╤П. +`FlexNavigator 1.16.07` +- ╨┐╨╛╨╗╤Г╤З╨╡╨╜╨╕╨╡ ╨┐╤Г╤В╨╡╨╣ ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Л ╨╕ ╤Д╨╛╤А╨╝╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡ ╨┐╤Г╤В╨╡╨╣ ╨┤╨╛ ╨┐╨╗╨░╨│╨╕╨╜╨╛╨▓ ╨┐╨╡╤А╨╡╨╜╨╡╤Б╨╡╨╜╤Л + ╨▓ ╨╜╨░╤З╨░╨╗╨╛ ╨╕╨╜╨╕╤Ж╨╕╨░╨╗╨╕╨╖╨░╤Ж╨╕╨╕. -`FileViewer.flx 1.07` -- ╨╝╨╡╨╗╨║╨╛╨╡ ╨╕╤Б╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╨╡ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕ ╨▓╤Л╨▓╨╛╨┤╨░ ╨┤╨░╤В╤Л/╨▓╤А╨╡╨╝╨╡╨╜╨╕. - -`FileEditor.flx 1.11` -- ╨╝╨╡╨╗╨║╨╛╨╡ ╨╕╤Б╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╨╡ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕ ╨▓╤Л╨▓╨╛╨┤╨░ ╨┤╨░╤В╤Л/╨▓╤А╨╡╨╝╨╡╨╜╨╕. +`Flex CD Player 1.11` +- ╨┐╨╗╨░╨│╨╕╨╜ ╨┐╨╡╤А╨╡╨╕╨╝╨╡╨╜╨╛╨▓╨░╨╜. diff --git a/rez2_fn_funct.a80 b/rez2_fn_funct.a80 index 686f75c..52e0c1b 100644 --- a/rez2_fn_funct.a80 +++ b/rez2_fn_funct.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 22.01.2026 savelij +; LAST UPDATE: 09.05.2026 savelij ;[]==========================================================[] CopyFilesR LD A,(IY + PANEL.FILES_ALL) @@ -33,7 +33,7 @@ CopyFilesR LD A,(IY + PANEL.FILES_ALL) IF MARK_DIR JP NZ,.InitCopyDir ELSE - RET NZ + RET NZ ; копирование директорий нет, выход ENDIF LD HL,0 LD (COPY.CopyFiles),HL @@ -53,6 +53,8 @@ CopyFilesR LD A,(IY + PANEL.FILES_ALL) CALL CalcDirSizeR ; измерение размера директории с файлами POP HL LD (COPY.PathCurrFile),HL + LD HL,(JUMPS.FILES_COUNT) + LD (COPY.CopyFiles),HL LD HL,JUMPS.FILES_BYTES LD DE,COPY.CopyBytes LD BC,DWORD + 1 @@ -194,7 +196,11 @@ CopyNxt LD IX,ProcessAll W_FILL 18,57,284,10,COLORI.WHITE W_END XOR A - LD (COPY.OverWriteFlg),A + LD (COPY.OverWriteFlg),A ; сброс флага перезаписи файла + LD (COPY.LevelDir),A ; сброс уровня вхождения в директории + LD H,A + LD L,A + LD (COPY.PathCurrRoot),HL LD HL,CurPath LD DE,0 ; адрес отредактированного пути приемника .NEWPATH EQU $-2 @@ -209,19 +215,15 @@ CopyNxt LD IX,ProcessAll PUSH AF LD (CopyDir.CURR_PANEL),IY ; при копировании файла портится IF MARK_DIR -; текущую директорию грузим в свободную страницу - LD A,(RAMPAGES.BuffPg3) - SETPORT WINSP.CPU3,,0 - SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) - CALL ReadDIR - ELSE +; текущую директорию грузим в свободную страницу для копирования директорий + CALL ReadDIRCopy + ENDIF BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD A,(RAMPAGES.LEFTPANEL) JR Z,.L3 LD A,(RAMPAGES.RIGHTPANEL) .L3 SETPORT WINSP.CPU3,,0 - ENDIF ; копирование файлов/директорий CopyNextFile LD IX,(COPY.PathCurrFile) IF MARK_DIR @@ -313,7 +315,7 @@ CopyNextFile LD IX,(COPY.PathCurrFile) AND A ; OverWrite.REWRITE JR Z,.CopyLp2 ; продолжать с перезаписью DEC A ; OverWrite.SKIP - JP Z,CopyNextFile.CloseFile1 ; пропуск копирования + JP Z,.CloseFile1 ; пропуск копирования ; прерывание копирования OverWrite.BREAK LD A,(COPY.FHandleSrc) SPDSS DSSF.CLOSE @@ -448,6 +450,7 @@ CopyNextFile LD IX,(COPY.PathCurrFile) SPDSS DSSF.CLOSE LD A,(COPY.MemID) SPDSS DSSF.FREEMEM +; файл скопирован, проверяем есть ли еще что-то .NextHandle LD IX,(COPY.PathCurrFile) RES FileHDR.B_MARK,(IX + FileHDR.Flag) LD HL,(COPY.CopyBytes) @@ -481,6 +484,11 @@ CopyNextFile LD IX,(COPY.PathCurrFile) LD HL,(COPY.PathCurrFile) LD DE,FileHDR.SIZE .L5 ADD HL,DE ; следующий описатель + INC HL + LD A,(HL) + DEC HL + AND A + JR Z,CopyDir ; директория кончилась BIT FileHDR.B_MARK,(HL) JR Z,.L5 LD (COPY.PathCurrFile),HL @@ -489,8 +497,14 @@ CopyNextFile LD IX,(COPY.PathCurrFile) ; копирование директории CopyDir LD IY,0 .CURR_PANEL EQU $-2 - CALL DIRLIST.GET_DIRNAME ; получение имени диры, если есть - JP C,CopyEnd ; C=1 текущая дира кончилась или их нет + LD DE,(COPY.PathCurrRoot) + LD A,D + OR E + JR NZ,.L1 + LD HL,(COPY.PathCurrFile) + LD (COPY.PathCurrRoot),HL +.L1 CALL DIRLIST.GET_DIRNAME ; получение имени диры, если есть + JR C,.CopyEnd ; C=1 текущая дира кончилась или их нет CALL DIRLIST.ADD_DIRLEVEL ; добавление списка диры PUSH IY LD HL,(COPY.PathDst) @@ -500,16 +514,41 @@ CopyDir LD IY,0 SPDSS DSSF.CHDIR ; смена текущего пути ; CALL C,DOSError POP IY - LD A,(RAMPAGES.BuffPg3) - SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) - CALL ReadDIR + LD A,(RAMPAGES.BuffPg3) ; для копирования диры включаем страницу с поддиректорией + SETPORT WINSP.CPU3,,0 + CALL ReadDIRCopy CALL DIRLIST.MARK_ALL ; маркировка всех файлов/дир LD HL,0xC000 + FileHDR.SIZE LD (COPY.PathCurrFile),HL JP CopyNextFile -BUF_MARKDIR -.DIR_NAME DZ " " ; имя текущей директории +; директория скопирована, проверка в корне окончания описателей +.CopyEnd LD HL,LeftPanel + PANEL.CURR_PATH + CALL DIRLIST.FIND_END_LINE + LD HL,RightPanel + PANEL.CURR_PATH + CALL DIRLIST.FIND_END_LINE + BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) + LD A,(RAMPAGES.LEFTPANEL) + JR Z,.L2 + LD A,(RAMPAGES.RIGHTPANEL) +.L2 + SETPORT WINSP.CPU3,,0 + XOR A + LD HL,COPY.PathCurrRoot + LD E,(HL) + LD (HL),A + INC HL + LD D,(HL) + LD (HL),A + EX DE,HL + LD DE,FileHDR.SIZE + 1 + ADD HL,DE + LD A,(HL) + SBC HL,DE + DEC DE + AND A + JP NZ,CopyNextFile.L5 ; есть еще что копировать + JP CopyEnd ; больше ничего не осталось DIRLIST ; пометка всех файлов/дир @@ -537,13 +576,15 @@ DIRLIST EXX JR .MLNEXT -; добавление имени диры в список, создание диры на приемнике +; добавление имени диры в список .ADD_DIRNAME PUSH IX POP HL INC HL LD DE,BUF_MARKDIR.DIR_NAME LD BC,8 LDIR ; забрали имя диры до переключения паг + LD HL,COPY.LevelDir + INC (HL) ; добавление уровня директории LD A,(RAMPAGES.FLX) LD C,WINSP.CPU3 IN B,(C) @@ -558,6 +599,7 @@ DIRLIST LD L,C JR .ANNEXT +; найдено свободное место .ANFOUND PUSH HL LD HL,BUF_MARKDIR.DIR_NAME LD BC,8 @@ -607,6 +649,19 @@ DIRLIST INC HL RET +; поиск конца строки +.FIND_END_LINE LD A,(HL) + INC HL + AND A + JR NZ,.FIND_END_LINE +.FEL1 DEC HL + LD A,(HL) + CP '\\' + JR NZ,.FEL1 + INC HL + LD (HL),0 + RET + ; отсечение пробелов в имени .CUTOFFSPACES LD A,' ' .COS2 DEC HL @@ -631,9 +686,10 @@ DIRLIST LD L,C JR .ALNEXT -.ALFOUND LD (HL),D +.ALFOUND +; LD (HL),D DEC HL - LD (HL),E +; LD (HL),E LD H,D LD L,E INC DE @@ -657,6 +713,8 @@ DIRLIST IN B,(C) PUSH BC OUT (C),A + LD HL,COPY.LevelDir + DEC (HL) ; уменьшение уровня директории .GNRESTART LD HL,0xC000 .GNNEXT CALL GET_DWORD LD A,B @@ -760,12 +818,12 @@ DIRLIST .L1 LD (COPY.PathSrc),HL EX DE,HL LD (COPY.PathDst),HL + XOR A .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 @@ -790,37 +848,50 @@ DIRLIST SETPORT WINSP.CPU3,,0 RET -; сохранение путей панелей -StorePaths LD HL,LeftPanel + PANEL.CURR_PATH +; сохранение описателей панелей +StorePaths + GETPORT WINSP.CPU1 + LD (COPY.PageStorePaths),A + LD HL,LeftPanel LD DE,REZ2_BUFFERS.OLDLEFTPANEL - LD BC,PANEL.CURR_PATH_Size + LD BC,PANEL.SIZE LDIR - LD HL,RightPanel + PANEL.CURR_PATH + LD HL,RightPanel LD DE,REZ2_BUFFERS.OLDRIGHTPANEL - LD BC,PANEL.CURR_PATH_Size + LD BC,PANEL.SIZE LDIR RET -; восстановление путей панелей -RestorePaths LD HL,REZ2_BUFFERS.OLDLEFTPANEL - LD DE,LeftPanel + PANEL.CURR_PATH - LD BC,PANEL.CURR_PATH_Size +; восстановление описателей панелей +RestorePaths LD A,(COPY.PageStorePaths) + AND A + RET Z ; сохранения не было, выходим + GETPORT WINSP.CPU1 + EX AF,AF' + LD HL,COPY.PageStorePaths + LD A,(HL) + LD (HL),0 + SETPORT WINSP.CPU1,,0 + LD HL,REZ2_BUFFERS.OLDLEFTPANEL + LD DE,LeftPanel + LD BC,PANEL.SIZE LDIR LD HL,REZ2_BUFFERS.OLDRIGHTPANEL - LD DE,RightPanel + PANEL.CURR_PATH - LD BC,PANEL.CURR_PATH_Size + LD DE,RightPanel + LD BC,PANEL.SIZE LDIR + EX AF,AF' + SETPORT WINSP.CPU1,,0 RET ; подсчет в байтах размера отмеченной директории CalcDirSizeR: PUSH IX PUSH IY + SET PANELFLAG.B_DIRS,(IY + PANEL.PANELFLAG) GETPORT WINSP.CPU3 PUSH AF ; текущий номер страницы LD (.CURR_PANEL),IY - LD A,(RAMPAGES.BuffPg3) - SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) - CALL ReadDIR + CALL ReadDIRCopy LD A,(RAMPAGES.BuffPg3) SETPORT WINSP.CPU3,,0 LD A,HIGH (CPU3) @@ -881,9 +952,7 @@ CalcDirSizeR: PUSH IX SPDSS DSSF.CHDIR ; смена текущего пути ; CALL C,DOSError POP IY - LD A,(RAMPAGES.BuffPg3) - SET PANELFLAG.B_DIRPAGE,(IY + PANEL.PANELFLAG) - CALL ReadDIR + CALL ReadDIRCopy CALL DIRLIST.MARK_ALL ; маркировка всех файлов/дир LD HL,0xC000 + FileHDR.SIZE LD (COPY.PathCurrFile),HL @@ -985,6 +1054,7 @@ CopyError1 PUSH AF CALL DOSError JP CopyEnd +; прерывание копирования CopyBreak POP HL POP AF SETPORT WINSP.CPU3,,0 @@ -2112,13 +2182,16 @@ MDIRLen DB 0x00 NewDIR DB 0x0D DUP 0x00 ;[]==========================================================[] +; удаление файлов/директорий DeleteFilesR LD A,(IY + PANEL.FILES_ALL) OR (IY + PANEL.FILES_ALL + 1) - RET Z + RET Z ; файлов нет + BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) + RET NZ ; режим отображения панели - дерево SETPORT WINSP.Y_PORT,0xC0 LD A,(IY + PANEL.FILES_MARK) OR (IY + PANEL.FILES_MARK + 1) - JR NZ,DeleteMark + JR NZ,DeleteMark ; есть помеченные файлы ; удаление под курсором файла/директории GETPORT WINSP.CPU3 PUSH AF @@ -2128,13 +2201,14 @@ DeleteFilesR LD A,(IY + PANEL.FILES_ALL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 + if 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 BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) - JR Z,DelFile + JR Z,.DelFile ADD HL,HL ADD HL,HL ADD HL,HL @@ -2143,9 +2217,9 @@ DeleteFilesR LD A,(IY + PANEL.FILES_ALL) SET 7,H LD (AdrDelFile),HL INC HL - JR DelFil1 + JR .DelFil1 -DelFile ADD HL,HL +.DelFile ADD HL,HL ADD HL,HL ADD HL,HL LD E,L @@ -2155,17 +2229,38 @@ DelFile ADD HL,HL SET 6,H SET 7,H LD (AdrDelFile),HL -DelFil1 INC HL +.DelFil1 INC HL LD E,(HL) POP AF SETPORT WINSP.CPU3,,0 + else ; if 0 + LD IX,WorkBuffer + LD A,HIGH (CPU3) + CALL GET_HANDLE_ADR + LD (AdrDelFile),HL + LD DE,WorkBuffer + LD BC,FileHDR.SIZE + LDIR ; копирование текущего описателя + POP AF + SETPORT WINSP.CPU3,,0 +; BIT DIR.B_Dir,(IX + FileHDR.Attr) +; IF MARK_DIR +; JP NZ,.InitDeleteDir ; переход на подготовку удаления диры +; ELSE +; RET NZ ; выход если директория +; ENDIF + endif ; if 0 LD A,E - CP '.' ; в имени файла в описателе? странная проверка + CP '.' ; нельзя удалить запись ".." RET Z - CP '\\' ; в имени файла в описателе? еще странней + CP '\\' ; в имени файла в описателе? что за проверка? RET Z JR DelNext +; удаление диры со всем содержимым +;.InitDeleteDir CALL StorePaths ; сохранение текущих путей панелей +; JR DelNext + ; удаление маркированных файлов/директорий DeleteMark GETPORT WINSP.CPU3 @@ -2268,9 +2363,7 @@ DelJump WINDOWCLOSE JP (HL) -AdrDelFile DEFW 0x0000 -DeleteFlag DEFB 0x00 - +; создание имени удаляемого файла/директории MakeDELname LD HL,(AdrDelFile) INC HL BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) @@ -2330,7 +2423,8 @@ DeleteSkip LD C,(IY + PANEL.FILES_MARK) ; удаление одного файла/диры DeleteOne CALL PointerMouseClock BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) - JR Z,DelDel0 + JR Z,.DelDel0 +; для режима показа дерева жиректорий PUSH IY POP HL LD DE,PANEL.CURR_PATH @@ -2356,7 +2450,7 @@ DeleteOne CALL PointerMouseClock CALL C,DOSError POP AF JP C,DeleteExit -DelDel0 LD IX,(AdrDelFile) +.DelDel0 LD IX,(AdrDelFile) LD DE,WorkBuffer PUSH DE CALL MakeDELname @@ -2382,6 +2476,7 @@ DelDel2 LD A,0x01 CALL PointerMousePointer JP DeleteSkip +; удаление всех файлов/директорий DeleteAll BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) JR NZ,DeleteOne LD A,0x01 @@ -2413,6 +2508,7 @@ DeleteAll BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) LD (IX + PROGRESSBAR.MAX_PAGES + 2),A LD (IX + PROGRESSBAR.MAX_PAGES + 3),A CALL InitProgressBar +; начало циклического удаления DeleteAllLp LD HL,0x0000 DelFrom EQU $-2 LD DE,WorkBuffer @@ -2795,11 +2891,18 @@ DeleteExt1 INC SP POP IY RET -DelName DB 13 DUP 0 - ;-------------------------------------------------------------- + +BUF_MARKDIR ; 01234567 +.DIR_NAME DZ " " ; имя текущей директории +.DIR_PREV DZ ".." +DelName DB 13 DUP 0 +AdrDelFile DW 0 +DeleteFlag DB 0 + COPY .PathCurrFile DW 0 ; Адрес описателя текущего файла/диры +.PathCurrRoot DW 0 ; Адрес описателя в директории старта копирования .PathSrc DW 0 ; Адрес пути источника .PathDst DW 0 ; Адрес пути приемника .PathSrcEnd DW 0 ; Адрес хвоста пути источника @@ -2810,6 +2913,8 @@ COPY .FreeBanks DW 0 ; Количество свободных банков .CurrReadBytes DD 0 ; Длина читаемого файла .CurrWriteBytes DD 0 ; Длина записываемого файла +.LevelDir DB 0 ; Уровень вхождения в директории от текущей позиции копирования +.PageStorePaths DB 0 ; Страница сохраненных описателей панелей .FHandleSrc DB 0 ; Файл источник .FHandleDst DB 0 ; Файл приемник .MemID DB 0 ; Идентификатор памяти под копирование