flex_nav/rez3_fnmark.a80
savelij13 ac87c5571e FlexNavigator 1.16.04
- сортировка и копирование файлов/директорий теперь не использует
  страницы панелей.
- убрано переставление страниц в списке выделенных при сортировке.
- доделано копирование директорий, пока только той что под курсором.
- сделано/переделано измерение размера директории в байтах под курсором.
- добавлено описание форм полей ввода.
- перенесены некоторые tab таблицы.
- перенесены буферы для загрузки ini файликов.
2025-09-07 22:15:01 +03:00

664 lines
13 KiB
Plaintext

; LAST UPDATE: 07.09.2025 savelij
;[]==========================================================[]
MarkFileR LD A,(IY+PANEL.FILES_ALL)
OR (IY+PANEL.FILES_ALL + 1)
RET Z
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
LD A,HIGH (CPU3)
CALL GET_HANDLE_ADR
LD E,(HL) ; FileHDR.Flag
POP AF
SETPORT WINSP.CPU3,,0
BIT FileHDR.B_MARK,E
PUSH AF
CALL Z,SelectFile
POP AF
CALL NZ,UnSelectFile
CALL CursDown
CALL PrnFileInfo
LD B,0x07
.L2 PUSH BC
SPMOUSE MOUSEF.READ_STATE
POP BC
BIT 1,A
RET Z
HALT
DJNZ .L2
RET
;[]==========================================================[]
SelectFile: LD IXL,0x01
JR UnSelectFile.L1
UnSelectFile: LD IXL,0x00
.L1
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L2
LD A,(RAMPAGES.RIGHTPANEL)
.L2
SETPORT WINSP.CPU3,,0
SETPORT WINSP.Y_PORT,0xC0
LD A,HIGH (CPU3)
CALL GET_HANDLE_ADR
PUSH HL
LD DE,FileHDR.Attr
ADD HL,DE
LD C,(HL) ; FileHDR.Attr (ä« £¨ ®¯¨á â¥«ï FAT ä ©« )
POP HL
BIT DIR.B_Dir,C ; íâ® ¤¨à ?
IF MARK_DIR
PUSH HL
PUSH BC
CALL NZ,RESIDENT.CalcDirSize ; ¨§¬¥à¥­¨¥ à §¬¥à  ¤¨àë
POP BC
POP HL
ELSE
JR NZ,.MrFile1 ; ¤¨à¥ªâ®à¨¨ ª®¯¨à®¢ âì ­¥ 㬥¥¬, ⮫쪮 ä ©«ë
ENDIF
; íâ® ä ©«
LD B,(HL) ; áâ à®¥ á®áâ®ï­¨¥ ¯®¬¥âª¨ ä ©« 
LD A,IXL
LD (HL),A ; ­®¢®¥ á®áâ®ï­¨¥ ¯®¬¥âª¨ ä ©« 
LD A,C
LD DE,WorkBuffer
PUSH BC
LD BC,FileHDR.SIZE
LDIR
IF MARK_DIR
BIT DIR.B_Dir,A ; ä ©« ¨«¨ ¤¨à 
JR Z,.L8
; ª®¯¨à㥬 à §¬¥à ¢ ¡ ©â å ¢ à §¬¥à ¤¨àë
LD HL,JUMPS.FILES_BYTES
LD DE,WorkBuffer + FileHDR.SizeBytes
LD BC,DWORD
LDIR
ENDIF
.L8 POP BC
.MrFile1 POP AF
SETPORT WINSP.CPU3,,0
IF MARK_DIR = 0
BIT DIR.B_Dir,C
RET NZ ; ¢ë室 ¥á«¨ ¤¨à 
ENDIF
LD A,B
CP IXL
RET Z ; ¢ë室 ¥á«¨ áâ à®¥ ¨ ­®¢®¥ á®áâ®ï­¨¥ ¯®¬¥âª¨ ᮢ¯ «¨
BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
JR NZ,.MarkFull
; ¯à¨ ªà âª®¬ ¯®ª §¥ ä ©«®¢
LD L,(IY+PANEL.CURR_FILE)
LD H,(IY+PANEL.CURR_FILE + 1)
LD E,L
LD D,H
ADD HL,HL
ADD HL,DE
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD DE,PositTABLeft
JR Z,.L3
LD DE,PositTABRight
.L3 ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
LD B,0x00
EX DE,HL
LD A,IXL
OR A
PUSH AF
LD DE,(COLORP.INVERTPAPER + COLORI.INVERTINK) << 8 | (COLORP.INVERTPAPER + COLORI.INVSELFILES)
JR NZ,.L4
LD DE,(COLORP.INVERTPAPER + COLORI.INVSELFILES) << 8 | (COLORP.INVERTPAPER + COLORI.INVERTINK)
.L4 LD IX,8 << 8 + 48
DEC HL
DEC HL
CALL ReplaceColorRectan
POP AF
JR NZ,.MarkExit1
JR .MarkExit2
; ¯à¨ ¯®«­®¬ ¯®ª §¥ ä ©«®¢
.MarkFull LD L,(IY+PANEL.CURR_FILE)
LD H,(IY+PANEL.CURR_FILE + 1)
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,0x003F
ADD HL,BC
LD C,L
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD HL,6
JR Z,.L5
LD HL,326
.L5 LD A,IXL
OR A
PUSH AF
LD DE,(COLORP.INVERTPAPER + COLORI.INVERTINK) << 8 | (COLORP.INVERTPAPER + COLORI.INVSELFILES)
JR NZ,.L6
LD DE,(COLORP.INVERTPAPER + COLORI.INVSELFILES) << 8 | (COLORP.INVERTPAPER + COLORI.INVERTINK)
.L6 LD IX,8 << 8 + 146
CALL ReplaceColorRectan
POP AF
JR Z,.MarkExit2
; ãáâ ­®¢ª  ¢ë¡®à ä ©« 
.MarkExit1 LD IX,WorkBuffer
LD L,(IY + PANEL.FILES_MARK)
LD H,(IY + PANEL.FILES_MARK + 1)
INC HL
LD (IY + PANEL.FILES_MARK),L
LD (IY + PANEL.FILES_MARK + 1),H ; ®¡­®¢«¥­¨¥ ª®«¨ç¥á⢠ ¯®¬¥ç¥­­ëå ä ©«®¢
LD L,(IX + FileHDR.SizeBytes)
LD H,(IX + FileHDR.SizeBytes + 1)
LD E,(IY + PANEL.BYTES_MARK)
LD D,(IY + PANEL.BYTES_MARK + 1)
XOR A ; [ ] fat32
ADD HL,DE
LD (IY + PANEL.BYTES_MARK),L
LD (IY + PANEL.BYTES_MARK + 1),H ; ®¡­®¢«¥­¨¥ à §¬¥à  ¯®¬¥ç¥­­ëå ä ©«®¢ ¡¨âë 15-0
LD L,(IX + FileHDR.SizeBytes + 2)
LD H,(IX + FileHDR.SizeBytes + 3)
; [ ] fat32
LD E,(IY + PANEL.BYTES_MARK + 2)
LD D,(IY + PANEL.BYTES_MARK + 3)
ADC HL,DE
; [ ] fat32
ADC A,(IY + PANEL.BYTES_MARK_H)
LD (IY + PANEL.BYTES_MARK_H),A ; ®¡­®¢«¥­¨¥ à §¬¥à  ¯®¬¥ç¥­­ëå ä ©«®¢ ¡¨âë 32-39
LD (IY + PANEL.BYTES_MARK + 2),L
LD (IY + PANEL.BYTES_MARK + 3),H ; ®¡­®¢«¥­¨¥ à §¬¥à  ¯®¬¥ç¥­­ëå ä ©«®¢ ¡¨âë 31-15
RET
; á­ï⨥ ¢ë¡®à  ä ©« 
.MarkExit2 LD IX,WorkBuffer
LD L,(IY + PANEL.FILES_MARK)
LD H,(IY + PANEL.FILES_MARK + 1)
DEC HL
LD (IY + PANEL.FILES_MARK),L
LD (IY + PANEL.FILES_MARK + 1),H
LD L,(IY + PANEL.BYTES_MARK)
LD H,(IY + PANEL.BYTES_MARK + 1)
LD E,(IX + FileHDR.SizeBytes)
LD D,(IX + FileHDR.SizeBytes + 1)
XOR A
SBC HL,DE
LD (IY + PANEL.BYTES_MARK),L
LD (IY + PANEL.BYTES_MARK + 1),H
LD L,(IY + PANEL.BYTES_MARK + 2)
LD H,(IY + PANEL.BYTES_MARK + 3)
LD E,(IX + FileHDR.SizeBytes + 2)
LD D,(IX + FileHDR.SizeBytes + 3)
SBC HL,DE
; [ ] fat32
ADC A,(IY + PANEL.BYTES_MARK_H)
LD (IY + PANEL.BYTES_MARK_H),A
LD (IY + PANEL.BYTES_MARK + 2),L
LD (IY + PANEL.BYTES_MARK + 3),H
RET
;[]==========================================================[]
UnMarkGroupR: CALL ResInvert
UnMarkGroupRN: LD HL,SetInvert
PUSH HL
SUB A
JR SelectGroup
MarkGroupR: CALL ResInvert
MarkGroupRN: LD HL,SetInvert
PUSH HL
LD A,0x01
SelectGroup: LD (SelMode),A
LD A,(IY+PANEL.FILES_ALL)
OR (IY+PANEL.FILES_ALL + 1)
RET Z
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 208,81,224,62
W_FILL 4,2,216,10,COLORI.BLACK
W_TEXT 82,3,COLORI.WHITE,"Select mask"
W_BUTTON 32,42,72,14
W_TEXT 60,45,COLORP.HIGHGRAY,"Ok"
W_BUTTON 120,42,72,14
W_TEXT 140,45,COLORP.HIGHGRAY,"Cancel"
W_TEXT 10,25,COLORP.HIGHGRAY,"Mark mask:"
W_BORDER 70,22,134,12
W_FILL 72,23,130,10,COLORI.WHITE
W_END
LD IX,SMaskStr
LD HL,REZ3TAB.SMaskTab
CALL InputLine
WINDOWCLOSE
RET C
LD A,(MaskLen)
OR A
RET Z
LD B,A
LD HL,CrSMask
CorMask
IF CORR_FILENAME
LD A,(HL)
CALL CorrBigChar
LD (HL),A
ENDIF
INC HL
DJNZ CorMask
LD HL,CrSMask
LD DE,SelMask
CALL MakeMask
JR C,MarkGNext
LD HL,NORMmask
LD DE,CrSMask
LD BC,MASK_SIZE
LDIR
LD HL,CrSMask
LD DE,SelMask
JP MakeMask
MarkGNext
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
;!FIXIT ¯à®¢¥à¨âì ¤«ï íâ® ®­® ¨«¨ ­¥â SAFE_PORTY
SETPORT WINSP.Y_PORT,0xC0
LD IX,CPU3
LD HL,0xC000
LD DE,SelMask
EX AF,AF' ; [ ] fat32
EXX
LD L,(IY+PANEL.BYTES_MARK)
LD H,(IY+PANEL.BYTES_MARK + 1)
LD E,(IY+PANEL.BYTES_MARK + 2)
LD D,(IY+PANEL.BYTES_MARK + 3)
LD A,(IY+PANEL.BYTES_MARK_H) ; [ ] FAT32
LD C,(IY+PANEL.FILES_MARK)
LD B,(IY+PANEL.FILES_MARK + 1)
EXX
EX AF,AF' ; [ ] fat32
PUSH IY
LD IYL,0x00
SelMode EQU $-1
LD IYH,0x00
Select1 PUSH DE
BIT DIR.B_Dir,(IX + FileHDR.Attr)
JR NZ,Select8
LD A,IYL
CP (HL)
JR Z,Select8
PUSH HL
INC HL
LD B,8
Select2 LD A,(DE)
CP '?'
JR Z,Select3
CP (HL)
JR NZ,Select6
Select3 INC HL
INC DE
DJNZ Select2
INC HL
LD B,03
Select4 LD A,(DE)
CP '?'
JR Z,Select5
CP (HL)
JR NZ,Select6
Select5 INC HL
INC DE
DJNZ Select4
Select6 POP HL
JR NZ,Select8
LD IYH,0x01
LD A,IYL
LD (HL),A
OR A
CALL Z,SUB_SIZE
CALL NZ,ADD_SIZE
Select8: LD DE,FileHDR.SIZE
ADD HL,DE
ADD IX,DE
POP DE
LD A,(IX + FileHDR.Name)
OR A
JR NZ,Select1
LD A,IYH
EX AF,AF'
POP IY
EXX
LD (IY+PANEL.BYTES_MARK),L
LD (IY+PANEL.BYTES_MARK + 1),H
LD (IY+PANEL.BYTES_MARK + 2),E
LD (IY+PANEL.BYTES_MARK + 3),D
LD (IY+PANEL.BYTES_MARK_H),A ; [ ] FAT32
LD (IY+PANEL.FILES_MARK),C
LD (IY+PANEL.FILES_MARK + 1),B
EXX
POP AF
SETPORT WINSP.CPU3,,0
EX AF,AF'
OR A
RET Z
CALL PrintDIR
JP PrnFileInfo
SMaskStr: DEFB 0x0C,0x00,0x00,0x00
MaskLen: DEFB 0x03
DEFW 282,106
DEFW 104
DEFB 0xF0
CrSMask: DEFB "*.*"
DB 10 DUP 0
SelMask: DEFB "???????????"
MakeMask LD BC,0x0902
SMaskLp LD A,(HL)
CP '!'
RET C
CP '\"'
RET Z
CP '*'
JR Z,SMask1
CP '+'
RET Z
CP ','
RET Z
CP '.'
JR Z,SMask2
CP '/'
RET Z
CP ':'
RET Z
CP ';'
RET Z
CP '<'
RET Z
CP '='
RET Z
CP '>'
RET Z
CP '['
RET Z
CP '\\'
RET Z
CP ']'
RET Z
CP '|'
RET Z
IF CORR_FILENAME
CALL CorrBigChar
ENDIF
LD (DE),A
INC HL
INC DE
DJNZ SMaskLp
AND A
RET
SMask1 LD A,'?'
INC HL
DJNZ SMask11
AND A
RET
SMask11 LD (DE),A
INC DE
DJNZ SMask11
INC B
JR SMaskLp
SMask2 LD A,' '
INC HL
DJNZ SMask21
LD B,0x04
DEC C
JR NZ,SMaskLp
AND A
RET
SMask21 LD (DE),A
INC DE
DJNZ SMask21
LD B,0x04
DEC C
JR NZ,SMaskLp
AND A
RET
;[]==========================================================[]
SelectAllR: CALL ResInvert
SelectAllRN: LD HL,SetInvert
PUSH HL
LD A,(IY + PANEL.FILES_ALL)
OR (IY + PANEL.FILES_ALL + 1)
RET Z
BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG)
RET NZ
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
SETPORT WINSP.Y_PORT,0xC0
LD IX,CPU3
LD BC,FileHDR.SIZE
EX AF,AF' ; [ ] fat32
SUB A
LD L,A
LD H,L
LD E,L
LD D,H
EXX
LD L,A
LD H,L
EXX
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)
EX AF,AF' ; [ ] fat32
ADD HL,BC
LD C,(IX + FileHDR.SizeBytes + 2)
LD B,(IX + FileHDR.SizeBytes + 3)
EX DE,HL
ADC HL,BC
EX DE,HL
ADC A,0
EX AF,AF' ; [ ] fat32
EXX
INC HL
EXX
; LD BC,FileHDR.SIZE
POP BC
.SelAll1: ADD IX,BC
LD A,(IX + FileHDR.Name)
OR A
JR NZ,.loop
POP AF
SETPORT WINSP.CPU3,,0
EXX
LD E,(IY+PANEL.FILES_MARK)
LD D,(IY+PANEL.FILES_MARK + 1)
OR A
SBC HL,DE
RET Z
ADD HL,DE
LD (IY+PANEL.FILES_MARK),L
LD (IY+PANEL.FILES_MARK + 1),H
EXX
LD (IY+PANEL.BYTES_MARK),L
LD (IY+PANEL.BYTES_MARK + 1),H
LD (IY+PANEL.BYTES_MARK + 2),E
LD (IY+PANEL.BYTES_MARK + 3),D
; [ ] FAT32
EX AF,AF'
LD (IY + PANEL.BYTES_MARK_H),A
CALL PrintDIR
JP PrnFileInfo
;[]==========================================================[]
UnSelectAllR: CALL ResInvert
UnSelectAllRN: LD HL,SetInvert
PUSH HL
LD A,(IY + PANEL.FILES_ALL)
OR (IY + PANEL.FILES_ALL + 1)
RET Z
BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG)
RET NZ
LD A,(IY + PANEL.FILES_MARK)
OR (IY + PANEL.FILES_MARK + 1)
RET Z
PUSH IY
POP HL
LD BC,PANEL.FILES_MARK
ADD HL,BC
LD B,PANEL.FILE_MASK - PANEL.FILES_MARK
.L2 LD (HL),0
INC HL
DJNZ .L2
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
SETPORT WINSP.Y_PORT,0xC0
LD HL,CPU3
LD BC,FileHDR.SIZE + 1
UnSelA1: RES 0,(HL)
ADD HL,BC
LD A,(HL)
DEC HL
OR A
JR NZ,UnSelA1
POP AF
SETPORT WINSP.CPU3,,0
CALL PrintDIR
JP PrnFileInfo
;[]==========================================================[]
InvertSelectR: CALL ResInvert
InvertSelectRN: LD HL,SetInvert
PUSH HL
LD A,(IY+PANEL.FILES_ALL)
OR (IY+PANEL.FILES_ALL + 1)
RET Z
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
SETPORT WINSP.Y_PORT,0xC0
LD IX,0xC000
LD DE,FileHDR.SIZE
LD B,0x00
EX AF,AF' ; [ ] fat32
EXX
LD L,(IY + PANEL.BYTES_MARK)
LD H,(IY + PANEL.BYTES_MARK + 1)
LD E,(IY + PANEL.BYTES_MARK + 2)
LD D,(IY + PANEL.BYTES_MARK + 3)
LD A,(IY + PANEL.BYTES_MARK_H) ; [ ] FAT32
LD C,(IY + PANEL.FILES_MARK)
LD B,(IY + PANEL.FILES_MARK + 1)
EXX
EX AF,AF' ; [ ] fat32
.loop: BIT DIR.B_Dir,(IX + FileHDR.Attr) ;!HARDCODE Dir
JR NZ,.InvSel3
LD B,FileHDR.M_MARK
LD A,(IX + FileHDR.Flag)
XOR B
LD (IX + FileHDR.Flag),A
CALL Z,SUB_SIZE
CALL NZ,ADD_SIZE
.InvSel3: ADD IX,DE
LD A,(IX + FileHDR.Name)
OR A
JR NZ,.loop
POP AF
SETPORT WINSP.CPU3,,0
EX AF,AF' ; [ ] fat32
EXX
LD (IY + PANEL.BYTES_MARK),L
LD (IY + PANEL.BYTES_MARK + 1),H
LD (IY + PANEL.BYTES_MARK + 2),E
LD (IY + PANEL.BYTES_MARK + 3),D
LD (IY + PANEL.BYTES_MARK_H),A ; [ ] FAT32
LD (IY + PANEL.FILES_MARK),C
LD (IY + PANEL.FILES_MARK + 1),B
EXX
LD A,B
OR A
RET Z
CALL PrintDIR
JP PrnFileInfo
ADD_SIZE: EX AF,AF' ; [ ] fat32
EXX
PUSH BC
LD C,(IX + FileHDR.SizeBytes)
LD B,(IX + FileHDR.SizeBytes + 1)
ADD HL,BC
LD C,(IX + FileHDR.SizeBytes + 2)
LD B,(IX + FileHDR.SizeBytes + 3)
EX DE,HL
ADC HL,BC
EX DE,HL
ADC A,0 ; [ ] fat32
POP BC
INC BC
EXX
EX AF,AF' ; [ ] fat32
RET
SUB_SIZE: EX AF,AF' ; [ ] fat32
EXX
PUSH BC
LD C,(IX + FileHDR.SizeBytes)
LD B,(IX + FileHDR.SizeBytes + 1)
OR A
SBC HL,BC
LD C,(IX + FileHDR.SizeBytes + 2)
LD B,(IX + FileHDR.SizeBytes + 3)
EX DE,HL
SBC HL,BC
EX DE,HL
SBC A,0 ; [ ] fat32
POP BC
DEC BC
EXX
EX AF,AF'
RET