flex_nav/fndos.a80

314 lines
5.1 KiB
Plaintext

; LAST UPDATE: 27.04.2025 savelij
;[]----------------------------------------------------------[]
BegDIRECTORY LD HL,BegDIR
NewDIRECTORY PUSH HL
CALL ResInvert
POP HL
CALL SetClock
PUSH IY
SPDSS DSSF.CHDIR
POP IY
CALL C,DOSError
PUSH IY
SPDSS DSSF.CURDISK
POP IY
PUSH IY
POP HL
LD DE,PANEL.CURRPATH
ADD HL,DE
ADD A,'A'
CP (HL)
PUSH AF
LD (HL),A
INC HL
LD (HL),':'
INC HL
PUSH IY
SPDSS DSSF.CURDIR
POP IY
POP AF
JR Z,NewDIRECT1
LD A,(TreeFlag)
OR A
JP Z,InitPanel
BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG)
JP NZ,InitPanel
BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG)
LD HL,LeftPanel + PANEL.CURRPATH
LD DE,RightPanel + PANEL.CURRPATH
JR Z,NewDIR0
LD HL,RightPanel + PANEL.CURRPATH
LD DE,LeftPanel + PANEL.CURRPATH
NewDIR0 SUB A
.L1 LDI
CP (HL)
JR NZ,.L1
LD (DE),A
JP InitPanels
NewDIRECT1 BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG)
PUSH AF
CALL NZ,NewDIRTree
POP AF
CALL Z,ReadDIR
CALL PrintPath
BIT PANELFLAG.B_PRNDOSPATH,(IY + PANEL.PANELFLAG)
CALL NZ,PrintDOSPath
CALL PrintDIR
CALL SetInvert
CALL PrnFileInfo
PUSH IY
POP IX
LD DE,PANEL.BARXL
ADD IX,DE
CALL InitScrollBar
LD A,(IY + PANEL.VIEWFLAG)
AND VIEWFLAG.MASK
PUSH AF
CALL Z,PrnHScrBar
POP AF
CALL NZ,PrnVScrBar
JP SetMouse
NewDIRTree PUSH IY
POP HL
LD DE,PANEL.CURRPATH
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
JR Z,.L1
LD IY,LeftPanel
.L1 CALL NewDIRECTORY
POP IY
RET
;[]----------------------------------------------------------[]
RefreshDIR BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG)
JR NZ,RfDIRn1
CALL ReadDIR
CALL PrintDIR
CALL PrnFileInfo
PUSH IY
POP IX
LD DE,PANEL.BARXL
ADD IX,DE
CALL InitScrollBar
LD A,(IY + PANEL.VIEWFLAG)
AND VIEWFLAG.MASK
PUSH AF
CALL Z,PrnHScrBar
POP AF
CALL NZ,PrnVScrBar
RfDIRn1 LD HL,LeftPanel + PANEL.CURRPATH
LD DE,RightPanel + PANEL.CURRPATH
RefrDIR LD A,(DE)
CP (HL)
RET NZ
INC HL
INC DE
LD A,(HL)
OR A
JR NZ,RefrDIR
LD A,(DE)
OR A
RET NZ
PUSH IY
BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG)
LD IY,RightPanel
JR Z,.L1
LD IY,LeftPanel
.L1 BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG)
JR NZ,RefrDex
CALL ReadDIR
CALL PrintDIR
CALL PrnFileInfo
PUSH IY
POP IX
LD DE,PANEL.BARXL
ADD IX,DE
CALL InitScrollBar
LD A,(IY + PANEL.VIEWFLAG)
AND VIEWFLAG.MASK
PUSH AF
CALL Z,PrnHScrBar
POP AF
CALL NZ,PrnVScrBar
RefrDex POP IY
RET
;[]----------------------------------------------------------[]
FindPrevFile LD A,(IY + PANEL.EFL)
OR (IY + PANEL.EFH)
RET Z
BIT PANELFLAG.B_PRNDOSPATH,(IY + PANEL.PANELFLAG)
RET Z
GETPORT WINSP.CPU1
PUSH AF
BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU1,,0
LD IX,0x4000
LD HL,0x4001
LD BC,0x0000
FndPrFile0 PUSH HL
BIT DIR.B_Dir,(IX + FileHDR.Attr)
JR NZ,FndPrFileNxt
LD DE,WorkBuffer
PUSH DE
PUSH BC
CALL MakeDOSname
POP BC
POP HL
LD DE,PrevFile
FndPrFile1 LD A,(DE)
OR A
JR Z,FndPrFileE
CP (HL)
JR NZ,FndPrFileNxt
INC HL
INC DE
JR FndPrFile1
FndPrFileNxt POP HL
LD DE,FileHDR.SIZE
ADD HL,DE
ADD IX,DE
INC BC
LD A,(HL)
OR A
JR NZ,FndPrFile0
JP FndTreeExt
FndPrFileE LD A,(HL)
OR A
JR NZ,FndPrFileNxt
JR FndTree
PrevFile DB 13 DUP 0
;[]----------------------------------------------------------[]
FindPrevDIR LD A,(IY + PANEL.EFL)
OR (IY + PANEL.EFH)
RET Z
BIT PANELFLAG.B_PRNDOSPATH,(IY + PANEL.PANELFLAG)
RET Z
GETPORT WINSP.CPU1
PUSH AF
BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU1,,0
LD IX,0x4000
LD HL,0x4001
LD BC,0x0000
FndPrDIR0 PUSH HL
BIT DIR.B_Dir,(IX + FileHDR.Attr)
JR Z,FndPrDIRnxt
LD DE,WorkBuffer
PUSH DE
PUSH BC
CALL MakeDOSname
POP BC
POP HL
LD DE,PrevDIR
FndPrDIR1 LD A,(DE)
OR A
JR Z,FndPrDIRe
CP (HL)
JR NZ,FndPrDIRnxt
INC HL
INC DE
JR FndPrDIR1
FndPrDIRnxt POP HL
LD DE,FileHDR.SIZE
ADD HL,DE
ADD IX,DE
INC BC
LD A,(HL)
OR A
JR NZ,FndPrDIR0
JR FndTreeExt
FndPrDIRe LD A,(HL)
OR A
JR NZ,FndPrDIRnxt
FndTree INC SP
INC SP
LD L,C
LD H,B
LD C,(IY + PANEL.FPL)
LD B,(IY + PANEL.FPH)
LD DE,0x0000
EX DE,HL
OR A
SBC HL,BC
EX DE,HL
.L1 EX DE,HL
ADD HL,BC
EX DE,HL
OR A
SBC HL,BC
JR NC,.L1
ADD HL,BC
LD (IY + PANEL.CFL),L
LD (IY + PANEL.CFH),H
LD (IY + PANEL.FFL),E
LD (IY + PANEL.FFH),D
FndTreeExt POP AF
SETPORT WINSP.CPU1,,0
RET
PrevDIR DB 13 DUP 0
;[]----------------------------------------------------------[]
MakeDOSname LD BC,0x0820
.L1 LD A,(HL)
CP C
JR Z,.L2
INC HL
LD (DE),A
INC DE
DJNZ .L1
JR .L5
.L2
; LD A,B
; OR A
; JR Z,.L5
INC HL
DJNZ .L2
.L5 LD B,0x03
INC HL
LD A,(HL)
CP C
JR Z,.L4
LD A,'.'
LD (DE),A
INC DE
.L3 LD A,(HL)
INC HL
LD (DE),A
INC DE
DJNZ .L3
.L4 SUB A
LD (DE),A
RET