flex_nav/fntree.a80
savelij13 881739653b CDplayer.flx 1.1:
- плагин доделан, описание/history в cdplayer.txt рядом с плагином.
FE 1.09
- исправлено: при выходе из редактора с несохраненным файлом и запросе на сохранение
  клавиша Enter теперь работает как подтверждение сохранения.
FN 1.16
- встроенный editor переехал в плагин откуда и запускается по F4, из FN удален.
- встроенный viewer переехал в плагин откуда и запускается по F3, из FN удален.
- встроенный help переехал в плагин откуда и запускается при нажатии F1, из FN удален.
- загрузка плагина отделена от запуска, теперь можно запускать плагины не
  только из панели FN.
- добавлен макрос формирования заголовка для плагинов.
- добавлена поддержка работы плагинов в адреса 0x4000-0x7FFF (окно 1) в дополнение
  к старым 0xC000-0xBFFF (окно 3), пока используется в плагине cdplayer.
- в окнах с ошибкой переделан на 2 типа окон вместо многих под каждую ошибку.
- исправлена потеря цвета при печати текста по указанному адресу.
- текстовым файлам вернул кодировку CP866, readme.md оставлен в кодировке UTF8.
2025-07-25 16:01:19 +03:00

735 lines
11 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; LAST UPDATE: 24.07.2025 savelij
MAX_LEVEL_DIR EQU 21
;[]----------------------------------------------------------[]
ReadTreeR PUSH IY
POP HL
LD BC,PANEL.FILES_ALL
ADD HL,BC
LD B,PANEL.FILE_MASK - PANEL.FILES_ALL
.LL1 LD (HL),0
INC HL
DJNZ .LL1
LD HL,BegDIR
PUSH IY
SPDSS DSSF.CHDIR
POP IY
LD HL,TreeName
PUSH IY
SPDSS DSSF.OPEN,,0
POP IY
JP NC,LoadTreeR
; ä ©« á ¤¥à¥¢®¬ ª â «®£®¢ ­¥ ­ ©¤¥­, ᪠­¨à㥬 ¨ á®§¤ ¥¬
.ScanTree
GETPORT WINSP.CPU1
LD C,A
GETPORT WINSP.CPU3
LD B,A
PUSH BC
LD A,(RAMPAGES.BuffPg3)
SETPORT WINSP.CPU1,,0
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
PUSH IY
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 240,96,160,40
W_FILL 4,2,152,10,COLORI.BLACK
W_TEXT 44,3,COLORI.WHITE,"Scanning tree"
W_TEXT 32,20,COLORP.HIGHGRAY,"Directories:"
W_END
LD (.TreeSP1),SP
SUB A
LD (CurTree),A
LD SP,STACKTREE
LD HL,0
PUSH HL
LD (LoadItemDIRR.CurTAdr),HL
LD HL,CPU3 + TreeHead_Size
LD (EndTree),HL
LD B,0x10
SUB A
.L2 LD (HL),A
INC HL
DJNZ .L2
LD HL,1
LD (TreeDIRS),HL
CALL LoadItemDIRR
JR NC,.TreeExit ; NC - ­¥â ¤¨à¥ªâ®à¨©
.TreeLoop PUSH HL
SPDSS DSSF.SCANKEY
LD A,E
SUB 0x1B
POP HL
JP Z,AbortTree
LD A,(CurTree)
INC A
CP MAX_LEVEL_DIR
JR Z,.DIRSend
LD (CurTree),A
LD DE,(TreeDIRS)
BIT 2,D ; DE >= 1024
JR NZ,.TreeExit
PUSH HL
LD A,(HL)
OR A
JR Z,.DIRSend
LD (LoadItemDIRR.CurTAdr),HL
SPDSS DSSF.CHDIR
CALL LoadItemDIRR
JR C,.TreeLoop ; C - ¥áâì ¤¨à¥ªâ®à¨¨
.DIRSend
SPDSS DSSF.SCANKEY
LD A,E
SUB 0x1B
JP Z,AbortTree
POP HL
LD A,H
OR L
JR Z,.TreeExit
PUSH HL
LD HL,CurTree
DEC (HL)
LD HL,UpDIR
SPDSS DSSF.CHDIR
POP HL
LD DE,0x000F
ADD HL,DE
LD A,(HL)
INC HL
INC A
JR NZ,.TreeLoop
JR .DIRSend
.TreeExit
SETPORT WINSP.Y_PORT,0xC0
LD SP,STACKTREE
LD IX,0
PUSH IX
LD HL,CPU1
LD DE,TreeHead
LD BC,TreeHead_Size
EX DE,HL
LDIR ; § ­¥á«¨ § £®«®¢®ª ¤¥à¥¢  ª â «®£®¢ FN
LD HL,(TreeDIRS)
DEC HL
LD A,H
OR L
JR Z,.TreeExit1
LD HL,CPU3 + TreeHead_Size
.TreeEndLp INC IXL
PUSH HL
PUSH DE
LD A,IXL
CP IXH
JR C,.L3
LD IXH,A
.L3 LD (DE),A
INC DE
SUB A
LD (DE),A
INC DE
LD BC,0x000C
LDIR
LD (DE),A
INC DE
LD (DE),A
INC DE
INC HL
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD A,(HL)
AND 0x80
POP HL
OR (HL)
LD (HL),A
LD L,C
LD H,B
LD A,H
OR L
JR NZ,.TreeEndLp
.TreeEndLp1 DEC IXL
POP HL
LD A,H
OR L
JR Z,.TreeExit1
LD BC,0x000F
ADD HL,BC
LD A,(HL)
INC HL
INC A
JR NZ,.TreeEndLp
JR .TreeEndLp1
.TreeExit1 LD (EndTree),DE
DEC DE
LD A,0xFF
LD (DE),A
LD SP,0
.TreeSP1 EQU $-2
POP IY
RES VIEWFLAG.B_SHORTTREE,(IY+PANEL.VIEWFLAG)
LD A,IXH
CP 0x0B
JR C,.L4
SET VIEWFLAG.B_SHORTTREE,(IY+PANEL.VIEWFLAG)
.L4
GETPORT WINSP.CPU3
LD (RAMPAGES.BuffPg3),A
GETPORT WINSP.CPU1
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD HL,RAMPAGES.LEFTPANEL
JR Z,.L5
LD HL,RAMPAGES.RIGHTPANEL
.L5 LD (HL),A
WINDOWCLOSE
POP BC
LD A,B
SETPORT WINSP.CPU3,,0
LD A,C
SETPORT WINSP.CPU1,,0
LD HL,(TreeDIRS)
LD (IY+PANEL.FILES_ALL),L ; EQUIP FIL
LD (IY+PANEL.FILES_ALL + 1),H
PUSH IY
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L6
LD A,(RAMPAGES.RIGHTPANEL)
.L6
SETPORT WINSP.CPU3,,0
LD HL,BegDIR
SPDSS DSSF.CHDIR
LD HL,TreeName
SPDSS DSSF.CREATE,,0
JR C,.TreeErr
PUSH AF
LD HL,CPU3
LD DE,(EndTree)
RES 6,D
SPDSS DSSF.WRITE
POP AF
SPDSS DSSF.CLOSE
.TreeErr LD A,1
LD (CPU3 + 1),A
POP AF
SETPORT WINSP.CPU3,,0
POP IY
JP LoadTreeR.TreeOkey
; § £à㧪  ¤¥à¥¢  ª â «®£®¢ ¨§ ä ©« 
LoadTreeR EX AF,AF'
PUSH IY
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
EX AF,AF'
PUSH AF
LD HL,CPU3
LD DE,0x4000
SPDSS DSSF.READ
EX AF,AF'
LD HL,CPU3
LD DE,WorkBuffer
LD BC,0x0010
LDIR
POP AF
SPDSS DSSF.CLOSE
POP AF
SETPORT WINSP.CPU3,,0
POP IY
EX AF,AF'
JP C,ReadTreeR.ScanTree ; Error
LD HL,WorkBuffer + 2
LD DE,TreeHead + 2
LD B,TreeHead_Size - 3
.L2 LD A,(DE)
CP (HL)
JP NZ,ReadTreeR.ScanTree ; Error
INC HL
INC DE
DJNZ .L2
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L3
LD A,(RAMPAGES.RIGHTPANEL)
.L3
SETPORT WINSP.CPU3,,0
LD HL,CPU3
LD DE,0x000E
LD BC,0
LD IXH,0
.LoadTr1 LD A,(HL)
AND 0x7F
CP IXH
JR C,.L4
LD IXH,A
.L4 INC HL
LD (HL),0
INC BC
ADD HL,DE
LD A,(HL)
INC HL
INC A
JR NZ,.LoadTr1
RES VIEWFLAG.B_SHORTTREE,(IY+PANEL.VIEWFLAG)
LD A,IXH
CP 0x0B
JR C,.L5
SET VIEWFLAG.B_SHORTTREE,(IY+PANEL.VIEWFLAG)
.L5 LD (IY+PANEL.FILES_ALL),C ; EQUIP FILES
LD (IY+PANEL.FILES_ALL + 1),B
BIT PANELFLAG.B_PRNDOSPATH,(IY+PANEL.PANELFLAG)
LD A,1
JR NZ,.L6
LD A,3
.L6 LD (CPU3 + 1),A
POP AF
SETPORT WINSP.CPU3,,0
.TreeOkey PUSH IY
POP HL
LD DE,PANEL.CURR_PATH
ADD HL,DE
INC HL
INC HL
JP FindTreeDIRR
AbortTree LD SP,(ReadTreeR.TreeSP1)
POP IY
POP BC
LD A,B
SETPORT WINSP.CPU3,,0
LD A,C
SETPORT WINSP.CPU1,,0
RES VIEWFLAG.B_SHORTTREE,(IY+PANEL.VIEWFLAG)
RES VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
WINDOWCLOSE
LD HL,InitPanels
EX (SP),HL
SUB A
RET
TreeName DZ FILENAME.FNTREE_FLN
TreeHead DB 0,0,0x5C,0,0,0,0xAE,"FlexTree",0
TreeHead_Size EQU $ - TreeHead
BegDIR DB 0x5C,0
UpDIR DB "..",0
CurTree DB 0
TreeDIRS DW 0 ; ª®«¨ç¥á⢮ ­ ©¤¥­ëå ¤¨à
EndTree DW 0 ; ⥪ã騩  ¤à¥á ¢ â ¡«¨æ¥ ¤¨à¥ªâ®à¨©
; ç⥭¨¥ ®¯¨á â¥«¥© ¤¨à¥ªâ®à¨©
LoadItemDIRR: LD DE,(EndTree)
PUSH DE
LD IX,0
LD HL,NORMmask
LD DE,WorkBuffer
LD A,(FileAtribut)
AND DIR.M_Archive + \
DIR.M_Dir + \
DIR.M_System + \
DIR.M_Hidden + \
DIR.M_ReadOnly
PUSH IX
PUSH DE
SPDSS DSSF.F_FIRST,1
POP HL
POP IX
JR C,.FndFLtrE ; ­¨ç¥£® ­¥ ­ ©¤¥­®? ­  ¢ë室
.FndFLtr LD A,(WorkBuffer + 0x20)
AND DIR.M_Dir ; íâ® ¤¨à ?
CALL NZ,.ADD_DIR ; ¥á«¨ ¤  â® ¤®¡ ¢«ï¥¬
JR C,.FndFLtrE ; ®è¨¡ª  ¤®¡ ¢«¥­¨ï? ¢ë室¨¬
; ç¨â ¥¬ á«¥¤ãî騩 ®¯¨á â¥«ì
LD DE,WorkBuffer
PUSH IX
PUSH DE
SPDSS DSSF.F_NEXT
POP HL
POP IX
JR NC,.FndFLtr
; § ¢¥à襭¨¥ á®§¤ ­¨ï ¤¥à¥¢ 
.FndFLtrE LD HL,(EndTree)
DEC HL
LD (HL),0xFF
LD C,IXL
LD B,IXH
LD HL,(TreeDIRS)
ADD HL,BC
LD (TreeDIRS),HL
POP HL
LD A,B
OR C
RET Z
PUSH HL
CALL .PRT_NUM_DIR ; ®¡­®¢«ï¥¬ ª®«¨ç¥á⢮ ­ ©¤¥­­ëå ¤¨à
POP HL
LD DE,0
.CurTAdr EQU $-2
LD A,D
OR E
SCF
RET Z
EX DE,HL
LD BC,0x000D
ADD HL,BC
LD (HL),E
INC HL
LD (HL),D
EX DE,HL
SCF
RET
; § ­¥á¥­¨¥ ¢ â ¡«¨æã í«¥¬¥­â  ¤¨à¥ªâ®à¨¨
.ADD_DIR EX DE,HL
LD HL,(EndTree)
LD BC,0x0010
ADD HL,BC
SBC HL,BC
EX DE,HL
RET C
LD BC,FFIRST.Name
ADD HL,BC
LD A,(HL)
CP '.' ; ¯¥à¢ë© ᨬ¢®« ¨¬¥­¨ â®çª ?
RET Z
LD C,0x10 ; ¤«¨­  í«¥¬¥­â  ¢ â ¡«¨æ¥
SUB A
; ¯¥à¥­®á ¨¬¥­¨ ¤® 0
.L1 LDI
CP (HL)
JR NZ,.L1
LD B,C
; ®áâ â®ª § ¯®«­ï¥¬ ­ã«¥¬
.L2 LD (DE),A
INC DE
DJNZ .L2
LD (EndTree),DE
INC IX
RET
; ª®­¢¥àá¨ï ¨ ¯¥ç âì ç¨á«  ª®«¨ç¥á⢠ ¤¨à¥ªâ®à¨© ¢ ¤¥à¥¢¥
.PRT_NUM_DIR LD HL,(TreeDIRS)
DEC HL
LD DE,.CurDNumb
PUSH DE
LD B,4
LD A,' '
.L3 LD (DE),A
INC DE
DJNZ .L3
POP DE
EXX
LD C,0
EXX
LD BC,1000 ; 1'000
CALL .GetN16
LD BC,100 ; 100
CALL .GetN16
LD BC,10 ; 10
CALL .GetN16
LD A,L
ADD A,'0'
LD (DE),A
LD HL,.CurDNumb
LD DE,336 ; X pos
LD BC,116 ; Y pos
LD A,COLORP.HIGHGRAY
JP PrnTxtLnIFF
.GetN16 LD A,'0' - 1
OR A
.L4 INC A
SBC HL,BC
JR NC,.L4
ADD HL,BC
CP '0'
JR Z,.L5
EXX
SET 0,C
EXX
.L5 EXX
BIT 0,C
EXX
RET Z
LD (DE),A
INC DE
RET
.CurDNumb DEFB " ",0
;[]=========================================================[]
TestTreeR BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET Z
LD B,0x28
.TstTree PUSH BC
SPMOUSE MOUSEF.READ_STATE
POP BC
OR A
RET NZ
PUSH BC
SPDSS DSSF.TESTKEY
POP BC
RET NZ
HALT
DJNZ .TstTree
IFNDEF TREE_DIR_ENTER
LD A,E
CP 0x0D ; ᬥ­  ¤¨à¥ªâ®à¨¨ ¨§ ¤¥à¥¢  ⮫쪮 ¯® ENTER
RET NZ
ENDIF
.TestTreeBeg
GETPORT WINSP.CPU1
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L14
LD A,(RAMPAGES.RIGHTPANEL)
.L14
SETPORT WINSP.CPU1,,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
ADD HL,HL
ADD HL,HL
ADD HL,HL
SET 6,H
INC HL
BIT 0,(HL)
JR NZ,.L2
EX DE,HL
LD HL,CPU1
LD BC,0x000E
.L1 INC HL
RES 0,(HL)
ADD HL,BC
LD A,(HL)
INC HL
INC A
JR NZ,.L1
EX DE,HL
SET 0,(HL)
CALL PrintDIR
CALL SetInvert
CALL MakeTreePathR
PUSH IY
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD IY,RightPanel
JR Z,.L3
LD IY,LeftPanel
.L3 CALL NewDIRECTORY
POP IY
.L2 POP AF
SETPORT WINSP.CPU1,,0
RET
;[]==========================================================[]
MakeTreePathR
GETPORT WINSP.CPU1
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L5
LD A,(RAMPAGES.RIGHTPANEL)
.L5
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
ADD HL,HL
ADD HL,HL
ADD HL,HL
SET 6,H
LD DE,WorkBuffer+0xFF
LD BC,0x0010
SUB A
LD (DE),A
DEC DE
LD A,(HL)
OR A
JR Z,.L4
AND 0x7F
INC A
LD IXL,A
ADD HL,BC
INC DE
.L3 SBC HL,BC
PUSH HL
LD A,(HL)
INC HL
AND 0x7F
CP IXL
JR NC,.L2
LD IXL,A
LD B,0xFF
SUB A
.L6 INC B
INC HL
CP (HL)
JR NZ,.L6
.L1 DEC HL
DEC DE
LD A,(HL)
LD (DE),A
DJNZ .L1
DEC DE
LD A,'\\'
LD (DE),A
.L2 POP HL
LD A,(HL)
AND 0x7F
CP 2
JR NC,.L3
.L4 EX DE,HL
LD (HL),'\\'
POP AF
SETPORT WINSP.CPU1,,0
RET
;[]==========================================================[]
FindTreeDIRR
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.Y_PORT,0xC0
LD IX,LeftPanel
BIT VIEWFLAG.B_TREE,(IX+PANEL.VIEWFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR NZ,.L14
LD A,(RAMPAGES.RIGHTPANEL)
.L14
SETPORT WINSP.CPU1,,0
LD DE,CPU1
LD BC,0
.L1 LD A,(DE)
AND 0x7F
LD IXL,A
.L2 PUSH HL
PUSH DE
LD A,(DE)
AND 0x7F
CP IXL
JR NZ,.L4
INC DE
INC DE
.L3 LD A,(DE)
CP (HL)
JR NZ,.L4
INC HL
INC DE
LD A,(DE)
OR A
JR Z,.L6
LD A,(HL)
CP '\\'
JR NZ,.L3
.L4 POP HL
LD DE,0x000F
ADD HL,DE
EX DE,HL
POP HL
INC BC
LD A,(DE)
INC DE
INC A
JR NZ,.L2
.L5 POP AF
SETPORT WINSP.CPU1,,0
SCF
RET
.L6 LD A,IXL
OR A
JR Z,.L7
LD A,(HL)
INC HL
CP '\\'
JR Z,.L7
DEC HL
OR A
JR NZ,.L4
.L7 POP DE
INC SP
INC SP
LD A,E
ADD A,0x0F
LD E,A
JR NC,.L15
INC D
.L15 INC BC
LD A,(HL)
OR A
JR Z,.L8
LD A,(DE)
INC DE
INC A
JR Z,.L5
JR .L1
.L8 DEC BC
PUSH BC
LD HL,CPU1
LD BC,0x000E
.L9 INC HL
LD (HL),B
ADD HL,BC
LD A,(HL)
INC HL
INC A
JR NZ,.L9
POP HL
LD A,E
SUB 0x0E
LD E,A
JR NC,.L10
DEC D
.L10 LD IX,LeftPanel
BIT VIEWFLAG.B_TREE,(IX+PANEL.VIEWFLAG)
JR NZ,.L11
LD IX,RightPanel
.L11 BIT PANELFLAG.B_PRNDOSPATH,(IX+PANEL.PANELFLAG)
LD A,1
JR NZ,.L12
LD A,3
.L12 LD (DE),A
POP AF
SETPORT WINSP.CPU1,,0
LD E,L
LD D,H
LD BC,4
OR A
SBC HL,BC
JR NC,.L13
LD HL,0
.L13 LD (IX+PANEL.FIRST_FILE),L
LD (IX+PANEL.FIRST_FILE + 1),H
EX DE,HL
OR A
SBC HL,DE
LD (IX+PANEL.CURR_FILE),L
LD (IX+PANEL.CURR_FILE + 1),H
OR A
RET