flex_nav/fnmenu.a80
savelij13 499aa7968d - исправлена проверка запускаемого файла по расширению.
- доки переведены на UTF8 кодировку.
- поправлена CorrBigChar.
2025-06-24 21:36:47 +03:00

1235 lines
22 KiB
Plaintext
Raw Permalink Blame History

; LAST UPDATE: 27.05.2025 savelij
;[]==========================================================[]
PullDown: CALL ResInvert
CALL SetPullInvert
PullLoop: LD IX,PullTab
CALL TestCoords
SPDSS DSSF.SCANKEY
JR Z,PullLoop
LD A,B
OR A
JR NZ,PullLoop
LD HL,PullLoop
PUSH HL
LD A,E
CP 0x1B
JR Z,PullExit
CP 0x0D
JR Z,PullEnter
OR A
RET NZ
LD A,D
CP SC.X2
JR Z,PullEnter
CP SC.X8
JR Z,PullEnter
CP SC.X4
JR Z,PullLeft
CP SC.X6
JR Z,PullRight
RET
PullExit: POP DE
.L1 CALL ResPullInvert
JP SetInvert
PullLeft: LD A,(CurrMenu)
DEC A
JP P,.L1
LD A,MainPullMenu-1
.L1 LD (CurrMenu),A
CALL ResPullInvert
JP SetPullInvert
PullRight: LD A,(CurrMenu)
INC A
CP MainPullMenu
JR NZ,.L1
SUB A
.L1 LD (CurrMenu),A
CALL ResPullInvert
JP SetPullInvert
PullEnter: LD A,0x01
LD (MKeyFlg),A
LD HL,MFile
LD A,(CurrMenu)
OR A
JR Z,.L1
LD HL,MSelect
DEC A
JR Z,.L1
LD HL,MOption
DEC A
JR Z,.L1
LD HL,MView
DEC A
JR Z,.L1
LD HL,MConfig
DEC A
JR Z,.L1
LD HL,MAbout
.L1 EX (SP),HL
RET
ResPullInvert: LD DE,(COLORP.BLUE + COLORI.WHITE) << 8 | (COLORP.HIGHGRAY + COLORI.BLACK);0x4F80
LD A,0
PrevMenu EQU $-1
JR PullInvert
SetPullInvert: LD DE,(COLORP.HIGHGRAY + COLORI.BLACK) << 8 | (COLORP.BLUE + COLORI.WHITE);0x804F
LD A,0
CurrMenu EQU $-1
LD (PrevMenu),A
PullInvert: LD L,A
LD H,0
ADD HL,HL ; *2
ADD HL,HL ; *4
ADD HL,HL ; *8
ADD HL,HL ; *16
LD BC,PullTab
ADD HL,BC
PUSH HL
POP IX
LD L,(IX + FORMTABL.XMINL)
LD H,(IX + FORMTABL.XMINH)
LD C,(IX + FORMTABL.YMINL)
LD B,(IX + FORMTABL.YMINH)
LD A,(IX + FORMTABL.XMAXL)
SUB (IX + FORMTABL.XMINL)
EX AF,AF'
LD A,(IX + FORMTABL.YMAXL)
SUB (IX + FORMTABL.YMINL)
LD IXH,A
EX AF,AF'
SRL A
LD IXL,A
JP InvertRectan
MFile: CALL ResPullInvert
JP MenuFile.L1
MSelect: CALL ResPullInvert
JP MenuSelect.L1
MOption: CALL ResPullInvert
JP MenuOption.L1
MView: CALL ResPullInvert
JP MenuView.L7
MConfig: CALL ResPullInvert
JP MenuConfig.L1
MAbout: CALL ResPullInvert
JP MenuAbout.L1
;[]==========================================================[]
MenuFile: CALL ResInvert
.L2 SUB A
LD (MKeyFlg),A
.L1 CALL STORE_PANELFLAG
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 4,26,160,54
W_TEXT 16,6,COLORP.HIGHGRAY,"File info..."
W_TEXT 100,6,COLORP.HIGHGRAY,"ALT+ENT"
W_TEXT 16,20,COLORP.HIGHGRAY,"Print"
W_TEXT 100,20,COLORP.HIGHGRAY,"CTRL+F9"
W_HORIZLINE 4,33,152
W_TEXT 16,40,COLORP.HIGHGRAY,"Exit"
W_TEXT 100,40,COLORP.HIGHGRAY,"F10"
W_END
LD HL,FileTab
LD BC,3
JP MenuWork
MenuSelect: CALL ResInvert
.L2 SUB A
LD (MKeyFlg),A
.L1 CALL STORE_PANELFLAG
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 40,26,160,76
W_TEXT 16,6,COLORP.HIGHGRAY,"Mark group..."
W_TEXT 112,6,COLORP.HIGHGRAY,"+"
W_TEXT 16,20,COLORP.HIGHGRAY,"Unmark group..."
W_TEXT 112,20,COLORP.HIGHGRAY,"-"
W_TEXT 16,34,COLORP.HIGHGRAY,"Mark all"
W_TEXT 112,34,COLORP.HIGHGRAY,"CTRL+"
W_TEXT 16,48,COLORP.HIGHGRAY,"Unmark all"
W_TEXT 112,48,COLORP.HIGHGRAY,"CTRL-"
W_TEXT 16,62,COLORP.HIGHGRAY,"Invert selection"
W_TEXT 112,62,COLORP.HIGHGRAY,"*"
W_END
LD HL,SelectTab
LD BC,1 << 8 | 5
JP MenuWork
MenuOption: CALL ResInvert
.L2 SUB A
LD (MKeyFlg),A
.L1 CALL STORE_PANELFLAG
MAKEWINDOW WINSUBOBJ.STORE
IF PLUGS_ENABLE
W_MAIN 84,26,208,54+14
ELSE
W_MAIN 84,26,208,54
ENDIF
W_TEXT 16,6,COLORP.HIGHGRAY,"Refresh tree" ; 00
W_TEXT 152,6,COLORP.HIGHGRAY,"ALT+F10"
W_TEXT 16,20,COLORP.HIGHGRAY,"Disk info..." ; 01
W_TEXT 152,20,COLORP.HIGHGRAY,"CTRL+L"
W_HORIZLINE 4,33,200
W_TEXT 16,40,COLORP.HIGHGRAY,"System information..." ; 02
IF PLUGS_ENABLE
W_TEXT 16,54,COLORP.HIGHGRAY,"Plugins..." ; 03
ENDIF
W_END
LD HL,OptionTab
IF PLUGS_ENABLE
LD BC,2 << 8 | 4
ELSE
LD BC,2 << 8 | 3
ENDIF
JP MenuWork
MenuView: CALL ResInvert
.L8 SUB A
LD (MKeyFlg),A
.L7 CALL STORE_PANELFLAG
LD A,(IY + PANEL.VIEWFLAG)
OR A
LD BC,0xFFFE
LD E,0xFE
JR Z,.L1
LD BC,0xFEFF
LD E,0xFE
BIT VIEWFLAG.B_FULL,A
JR NZ,.L1
LD BC,0xFEFE
LD E,0xFF
.L1 LD A,B
LD (MenuView.view1),A
LD A,C
LD (MenuView.view2),A
LD A,E
LD (MenuView.view3),A
LD A,(IY + PANEL.SORTFLAG)
AND SORTFLAG.MASKH
LD BC,0xFFFE
LD E,0xFE
JR Z,.L2
BIT SORTFLAG.B_EXEC,A
LD BC,0xFEFF
LD E,0xFE
JR NZ,.L2
LD BC,0xFEFE
LD E,0xFF
.L2 LD A,B
LD (MenuView.filt1),A
LD A,C
LD (MenuView.filt2),A
LD A,E
LD (MenuView.filt3),A
LD A,(IY + PANEL.SORTFLAG)
AND SORTFLAG.MASK
LD BC,0xFEFE
LD DE,0xFEFE
LD L,0xFF
JR Z,.L3
BIT SORTFLAG.B_NAME,A
LD BC,0xFFFE
LD DE,0xFEFE
LD L,0xFE
JR NZ,.L3
BIT SORTFLAG.B_EXT,A
LD BC,0xFEFF
LD DE,0xFEFE
LD L,0xFE
JR NZ,.L3
BIT SORTFLAG.B_DATE,A
LD BC,0xFEFE
LD DE,0xFFFE
LD L,0xFE
JR NZ,.L3
LD BC,0xFEFE
LD DE,0xFEFF
LD L,0xFE
.L3 LD A,B
LD (MenuView.sort1),A
LD A,C
LD (MenuView.sort2),A
LD A,D
LD (MenuView.sort3),A
LD A,E
LD (MenuView.sort4),A
LD A,L
LD (MenuView.sort5),A
PUSH IY
POP HL
LD BC,PANEL.FILEMASK
ADD HL,BC
LD DE,MenuView.Tfilter
LD C,STRLEN("*.* ");0x0C
SUB A
.L4 LDI
CP (HL)
JR NZ,.L4
LD A,C
OR A
JR Z,.L6
LD B,A
LD A,' '
.L5 LD (DE),A
INC DE
DJNZ .L5
.L6
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 138,26,190,186
W_TEXT 16,6,COLORP.HIGHGRAY,"Brief"
W_TEXT 110,6,COLORP.HIGHGRAY,"\xFE CTRL+F1"
.view1 EQU $ - STRLEN ("v CTRL+F1v")
W_TEXT 16,20,COLORP.HIGHGRAY,"Full"
W_TEXT 110,20,COLORP.HIGHGRAY,"\xFE CTRL+F2"
.view2 EQU $ - STRLEN ("v CTRL+F2 ")
W_TEXT 16,34,COLORP.HIGHGRAY,"Tree"
W_TEXT 110,34,COLORP.HIGHGRAY,"\xFE CTRL+F8"
.view3 EQU $ - STRLEN("v CTRL+F8v")
W_HORIZLINE 4,47,182
W_TEXT 16,54,COLORP.HIGHGRAY,"All files"
W_TEXT 110,54,COLORP.HIGHGRAY,"\xFE CTRL+F10"
.filt1 EQU $ - STRLEN("v CTRL+F10v")
W_TEXT 16,68,COLORP.HIGHGRAY,"Execute files"
W_TEXT 110,68,COLORP.HIGHGRAY,"\xFE CTRL+F11"
.filt2 EQU $ - STRLEN("v CTRL+F11v")
W_TEXT 16,82,COLORP.HIGHGRAY,"*.* "
.Tfilter EQU $ - STRLEN("*.* ")
W_TEXT 110,82,COLORP.HIGHGRAY,"\xFE"
.filt3 EQU $ - 2
W_TEXT 16,96,COLORP.HIGHGRAY,"Filter..."
W_TEXT 110,96,COLORP.HIGHGRAY,"\xFE CTRL+F12"
W_HORIZLINE 4,109,182
W_TEXT 16,116,COLORP.HIGHGRAY,"Name"
W_TEXT 110,116,COLORP.HIGHGRAY,"\xFE CTRL+F3"
.sort1 EQU $ - STRLEN("v CTRL+F3v")
W_TEXT 16,130,COLORP.HIGHGRAY,"Extension"
W_TEXT 110,130,COLORP.HIGHGRAY,"\xFE CTRL+F4"
.sort2 EQU $ - STRLEN("v CTRL+F4v")
W_TEXT 16,144,COLORP.HIGHGRAY,"Date"
W_TEXT 110,144,COLORP.HIGHGRAY,"\xFE CTRL+F5"
.sort3 EQU $ - STRLEN("v CTRL+F5v")
W_TEXT 16,158,COLORP.HIGHGRAY,"Size"
W_TEXT 110,158,COLORP.HIGHGRAY,"\xFE CTRL+F6"
.sort4 EQU $ - STRLEN("v CTRL+F6v")
W_TEXT 16,172,COLORP.HIGHGRAY,"Unsorted"
W_TEXT 110,172,COLORP.HIGHGRAY,"\xFE CTRL+F7"
.sort5 EQU $ - STRLEN("v CTRL+F7v")
W_END
LD HL,ViewTab
LD BC,3 << 8 | 12
JP MenuWork
MenuConfig: CALL ResInvert
.L2 SUB A
LD (MKeyFlg),A
.L1 CALL STORE_PANELFLAG
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 174,26,96,20
W_TEXT 16,6,COLORP.HIGHGRAY,"Setup..."
W_END
LD HL,ConfigTab
LD BC,4 << 8 | 1
JP MenuWork
MenuAbout: CALL ResInvert
.L2 SUB A
LD (MKeyFlg),A
.L1 CALL STORE_PANELFLAG
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 222,26,112,20
W_TEXT 16,6,COLORP.HIGHGRAY,"Version..."
W_END
LD HL,AboutTab
LD BC,5 << 8 | 1
; HL - <20><><EFBFBD><EFBFBD><EFBFBD><><E2A0A1><EFBFBD><EFBFBD> <20><><EFBFBD><E2A8A2><EFBFBD> <20><><EFBFBD>
; B - ⥪<><20><EFBFBD> <20><><EFBFBD><EFBFBD>
; C - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20>㭪⮢ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MenuWork: LD (CurWTab),HL
LD A,C
LD (MaxLines),A
LD A,B
LD (CurrMenu),A
LD (PrevMenu),A
SUB A
LD (CurMLine),A
LD IX,(CurWTab)
CALL TestCoords
CALL TestInvert
JR NZ,MenuLoop
LD A,0
MKeyFlg EQU $-1
OR A
CALL NZ,SetMSelect
MenuLoop: LD IX,0x0000
CurWTab EQU $-2
CALL TestCoords
SPDSS DSSF.SCANKEY
JR Z,MenuLoop
LD A,B
OR A
JR NZ,MenuLoop
LD HL,MenuLoop
PUSH HL
LD A,E
CP 0x1B
JR Z,MenuKExt
CP 0x0D
JP Z,ChangeSet
CP ' '
JP Z,ChangeSet
OR A
RET NZ
LD A,D
CP SC.X4
JR Z,MenuLeft
CP SC.X6
JP Z,MenuRight
CP SC.X8
JP Z,MenuUp
CP SC.X2
JP Z,MenuDown
CP SC.X7
JP Z,MenuHome
CP SC.X1
JP Z,MenuEnd
RET
TestInvert: LD HL,(CurWTab)
LD DE,FORMTABL.FLAGH
ADD HL,DE
LD A,0
MaxLines EQU $-1
LD B,A
LD C,0
LD DE,FORMTABL.SIZE
.L2 BIT FORMTABL.B_FIRENOINV,(HL)
JR Z,.L1
LD A,C
SET 7,A
LD (CurMLine),A
.L1 INC C
ADD HL,DE
DJNZ .L2
LD A,0
CurMLine EQU $-1
BIT 7,A
RES 7,A
LD (CurMLine),A
RET
; <20><><20><> Esc
MenuKExt: POP DE
WINDOWCLOSE
JP PullLoop
; <20><EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><EFBFBD><><E4ABA0><EFBFBD> <20><EFBFBD><EBA2AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
STORE_PANELFLAG LD A,(IY + PANEL.SORTFLAG)
LD (PANEL_SORTFLAG),A
LD A,(IY + PANEL.VIEWFLAG)
LD (PANEL_VIEWFLAG),A
RET
MenuExit: LD A,0
PANEL_VIEWFLAG EQU $-1
CP (IY+PANEL.VIEWFLAG)
JP NZ,InitPanel
LD A,0
PANEL_SORTFLAG EQU $-1
CP (IY+PANEL.SORTFLAG)
JP NZ,InitPanel
JP SetInvert
MenuLeft:
WINDOWCLOSE
LD A,(CurrMenu)
DEC A
JP P,.L1
LD A,MainPullMenu-1
.L1 LD (CurrMenu),A
JP PullEnter
MenuRight:
WINDOWCLOSE
LD A,(CurrMenu)
INC A
CP MainPullMenu
JR NZ,.L1
SUB A
.L1 LD (CurrMenu),A
JP PullEnter
MenuUp: CALL TestInvert
JR Z,.L1
LD A,(MaxLines)
DEC A
RET Z
CALL ResMSelect
LD A,(CurMLine)
OR A
JR NZ,.L2
.L1 LD A,(MaxLines)
.L2 DEC A
LD (CurMLine),A
JP SetMSelect
MenuDown: CALL TestInvert
JR Z,.L1
LD A,(MaxLines)
DEC A
RET Z
CALL ResMSelect
LD A,(MaxLines)
LD B,A
LD A,(CurMLine)
INC A
CP B
JR NZ,.L2
.L1 SUB A
.L2 LD (CurMLine),A
JP SetMSelect
MenuHome: CALL TestInvert
JR Z,.L1
LD A,(CurMLine)
OR A
RET Z
CALL ResMSelect
.L1 SUB A
LD (CurMLine),A
JP SetMSelect
MenuEnd: CALL TestInvert
JR Z,.L1
LD A,(MaxLines)
LD B,A
LD A,(CurMLine)
INC A
CP B
RET Z
CALL ResMSelect
.L1 LD A,(MaxLines)
DEC A
LD (CurMLine),A
JP SetMSelect
ResMSelect: LD HL,ResSelect1
JR SetMSelect.L1
SetMSelect: LD HL,SetSelect1
.L1 PUSH HL
LD A,(CurMLine)
LD L,A
LD H,0x00
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,(CurWTab)
ADD HL,BC
PUSH HL
POP IX
RET
ChangeSet: CALL TestInvert
JP Z,MenuKExt
LD A,(CurMLine)
LD L,A
LD H,0x00
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,(CurWTab)
ADD HL,BC
PUSH HL
POP IX
LD C,(IX + FORMTABL.FIRELEFTL) ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LD B,(IX + FORMTABL.FIRELEFTH)
LD A,B
OR C
RET Z
BIT FORMTABL.B_EXECNORETLMB,(IX + FORMTABL.FLAGL) ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JR Z,.L1
POP AF
.L1 PUSH BC
BIT FORMTABL.B_INV1,(IX + FORMTABL.FLAGL)
CALL NZ,ResSelect1
CALL ResSelect2
BIT FORMTABL.B_CLOSEWIN,(IX + FORMTABL.FLAGH)
RET Z
WINDOWCLOSE
RET
; brief
ChView1: RES VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
RES VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP MenuExit
; full
ChView2: SET VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
RES VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP MenuExit
; tree
ChView3: LD A,(TreeFlag)
OR A
JP NZ,MenuExit
RES VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
SET VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP MenuExit
; all files
ChFilt1: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP NZ,MenuExit
RES SORTFLAG.B_EXEC,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_FILTER,(IY+PANEL.SORTFLAG)
JP MenuExit
; execute files
ChFilt2: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP NZ,MenuExit
SET SORTFLAG.B_EXEC,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_FILTER,(IY+PANEL.SORTFLAG)
JP MenuExit
; filter
ChFilt3: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP NZ,MenuExit
RES SORTFLAG.B_EXEC,(IY+PANEL.SORTFLAG)
SET SORTFLAG.B_FILTER,(IY+PANEL.SORTFLAG)
JP MenuExit
; name
ChSort1: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP NZ,MenuExit
SET SORTFLAG.B_NAME,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_EXT,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_DATE,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_SIZE,(IY+PANEL.SORTFLAG)
JP MenuExit
; extension
ChSort2: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP NZ,MenuExit
RES SORTFLAG.B_NAME,(IY+PANEL.SORTFLAG)
SET SORTFLAG.B_EXT,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_DATE,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_SIZE,(IY+PANEL.SORTFLAG)
JP MenuExit
; date
ChSort3: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP NZ,MenuExit
RES SORTFLAG.B_NAME,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_EXT,(IY+PANEL.SORTFLAG)
SET SORTFLAG.B_DATE,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_SIZE,(IY+PANEL.SORTFLAG)
JP MenuExit
; size
ChSort4: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP NZ,MenuExit
RES SORTFLAG.B_NAME,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_EXT,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_DATE,(IY+PANEL.SORTFLAG)
SET SORTFLAG.B_SIZE,(IY+PANEL.SORTFLAG)
JP MenuExit
; unsorted
ChSort5: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP NZ,MenuExit
LD A,(IY+PANEL.SORTFLAG)
AND SORTFLAG.MASKH
LD (IY+PANEL.SORTFLAG),A
JP MenuExit
;[]==========================================================[]
Brief: LD A,(IY+PANEL.VIEWFLAG)
AND VIEWFLAG.MASK
RET Z
RES VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
RES VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP InitPanel
Full: BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
RET NZ
SET VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
RES VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP InitPanel
Tree: LD A,(TreeFlag)
OR A
RET NZ
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
RES VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
SET VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP InitPanel
AllFiles: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
LD A,(IY+PANEL.SORTFLAG)
AND SORTFLAG.MASKEXECFILTER
RET Z
RES SORTFLAG.B_EXEC,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_FILTER,(IY+PANEL.SORTFLAG)
JP InitPanel
ExeFiles: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
BIT SORTFLAG.B_EXEC,(IY+PANEL.SORTFLAG)
RET NZ
SET SORTFLAG.B_EXEC,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_FILTER,(IY+PANEL.SORTFLAG)
JP InitPanel
NameS: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
BIT SORTFLAG.B_NAME,(IY+PANEL.SORTFLAG)
RET NZ
SET SORTFLAG.B_NAME,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_EXT,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_DATE,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_SIZE,(IY+PANEL.SORTFLAG)
JP InitPanel
Extention: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
BIT SORTFLAG.B_EXT,(IY+PANEL.SORTFLAG)
RET NZ
RES SORTFLAG.B_NAME,(IY+PANEL.SORTFLAG)
SET SORTFLAG.B_EXT,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_DATE,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_SIZE,(IY+PANEL.SORTFLAG)
JP InitPanel
Data: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
BIT SORTFLAG.B_DATE,(IY+PANEL.SORTFLAG)
RET NZ
RES SORTFLAG.B_NAME,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_EXT,(IY+PANEL.SORTFLAG)
SET SORTFLAG.B_DATE,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_SIZE,(IY+PANEL.SORTFLAG)
JP InitPanel
Size: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
BIT SORTFLAG.B_SIZE,(IY+PANEL.SORTFLAG)
RET NZ
RES SORTFLAG.B_NAME,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_EXT,(IY+PANEL.SORTFLAG)
RES SORTFLAG.B_DATE,(IY+PANEL.SORTFLAG)
SET SORTFLAG.B_SIZE,(IY+PANEL.SORTFLAG)
JP InitPanel
UnSort: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
LD A,(IY+PANEL.SORTFLAG)
AND SORTFLAG.MASK
RET Z
LD A,(IY+PANEL.SORTFLAG)
AND SORTFLAG.MASKH
LD (IY+PANEL.SORTFLAG),A
JP InitPanel
;[]==========================================================[]
RefreshTree: LD A,(TreeFlag)
OR A
JR Z,RfTree1
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JR NZ,RfTree1
PUSH IY
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD IY,RightPanel
JR Z,.L1
LD IY,LeftPanel
.L1 CALL RfTree1
POP IY
RET
RfTree1: LD HL,BegDIR
PUSH IY
SPDSS DSSF.CHDIR
POP IY
RET C
LD HL,TreeName
PUSH IY
SPDSS DSSF.DELETE,,0
POP IY
RES VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
SET VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JP InitPanel
;[]==========================================================[]
NewFilter: CALL ResInvert
.L1 LD HL,SetInvert
PUSH HL
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 98,3,COLORI.WHITE,"Filter"
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 16,25,COLORP.HIGHGRAY,"New filter:"
W_BORDER 70,22,134,12
W_FILL 72,23,130,10,COLORI.WHITE
W_END
PUSH IY
POP HL
LD BC,PANEL.FILEMASK
ADD HL,BC
LD DE,CurFilt
SUB A
LD C,A
.L3 LDI
CP (HL)
JR NZ,.L3
LD A,C
NEG
LD (FiltLen),A
LD IX,FilterStr
LD HL,FilterTab
CALL InputLine
WINDOWCLOSE
RET C
LD A,(FiltLen)
OR A
RET Z
LD HL,CurFilt
LD DE,SelMask
CALL MakeMask
RET NC
PUSH IY
POP HL
LD DE,PANEL.FILEMASK
ADD HL,DE
EX DE,HL
LD HL,CurFilt
LD A,(FiltLen)
LD B,A
.L2 LD A,(HL)
IF CORR_FILENAME
CALL CorrBigChar
ENDIF
LD (DE),A
INC HL
INC DE
DJNZ .L2
SUB A
LD (DE),A
LD A,(IY+PANEL.SORTFLAG)
AND SORTFLAG.MASK
SET SORTFLAG.B_FILTER,A
LD (IY+PANEL.SORTFLAG),A
POP HL
JP InitPanel
FilterStr: DEFB 0x0C,0x00,0x00,0x00
FiltLen: DEFB 0x00
DEFW 0x011A,0x006A
DEFW 0x0068
DEFB 0xF0
CurFilt: DUPL 0x0D,0x00
;[]==========================================================[]
LeftDrive: CALL ResInvert
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 32,92,224,36
W_FILL 4,2,216,10,COLORI.BLACK
W_TEXT 86,3,COLORI.WHITE,"Left drive"
W_END
LD HL,LeftTab
LD DE,DriveTab
LD BC,0x0020
LDIR
LD IX,LeftPanel
LD HL,0x0032
JP ChangeDrv
LeftTab: DEFW 0x0000,0x0020,0x0000,0x0100,0x20,0x0000,DriveExit,0x0000
DEFW 0x0100,0x0280,0x0000,0x0100,0x20,0x0000,DriveExit,0x0000
RightDrive: CALL ResInvert
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 352,92,224,36
W_FILL 4,2,216,10,COLORI.BLACK
W_TEXT 86,3,COLORI.WHITE,"Right drive"
W_END
LD HL,RightTab
LD DE,DriveTab
LD BC,0x0020
LDIR
LD IX,RightPanel
LD HL,0x0172
JR ChangeDrv
RightTab: DEFW 0x0000,0x0160,0x0000,0x0100,0x20,0x0000,DriveExit,0x0000
DEFW 0x0240,0x0280,0x0000,0x0100,0x20,0x0000,DriveExit,0x0000
ChangeDrv: PUSH IY
PUSH IX
POP IY
LD IX,BegDrive
LD A,(NUM_DEVICES)
ADD A,A
LD C,A
ADD A,A
ADD A,A
ADD A,A
ADD A,C
SUB 11*0x12
NEG
SRL A
ADD A,L
LD E,A
LD A,H
ADC A,0x00
LD D,A
LD HL,Drive
LD (HL),'A'
LD BC,0x0070
LD A,(NUM_DEVICES)
.Drive1 PUSH AF
PUSH IX
PUSH HL
PUSH DE
PUSH BC
LD A,0x80
CALL PrnTxtLnIFF
POP BC
POP DE
POP HL
POP IX
LD A,E
SUB 0x06
LD (IX+0x00),A
LD A,D
SBC A,0x00
LD (IX+0x01),A
LD A,E
ADD A,0x12
LD E,A
JR NC,.L1
INC D
.L1 LD A,E
SUB 0x06
LD (IX+0x02),A
LD A,D
SBC A,0x00
LD (IX+0x03),D
LD A,IXL
ADD A,0x10
LD IXL,A
JR NC,.L2
INC IXH
.L2 INC (HL)
POP AF
DEC A
JR NZ,.Drive1
LD (IX+0x00),0x00
LD (IX+0x01),0x80
LD A,(IY + PANEL.CURRPATH)
SUB 'A'
LD (CurDrive),A
CALL SetDriveInv
DriveLoop: LD IX,DriveTab
CALL TestCoords
SPDSS DSSF.SCANKEY
JR Z,DriveLoop
LD A,B
OR A
JR NZ,DriveLoop
LD A,E
CP 0x1B
JR Z,DriveExit
CP 0x0D
JR Z,DriveEnter
OR A
JR Z,DriveLoop1
LD A,(NUM_DEVICES)
LD C,A
LD A,E
RES 5,A
SUB 'A'
JR C,DriveLoop
CP C
JR NC,DriveLoop
LD (CurDrive),A
JR DriveEnter
DriveLoop1: LD HL,DriveLoop
PUSH HL
LD A,D
CP 0x54
JR Z,DriveLeft
CP 0x56
JR Z,DriveRight
RET
DriveExit:
WINDOWCLOSE
POP IY
JP SetInvert
DriveLeft: LD A,(NUM_DEVICES)
DEC A
RET Z
LD A,(CurDrive)
OR A
JR NZ,.L1
LD A,(NUM_DEVICES)
.L1 DEC A
PUSH AF
CALL ResDriveInv
POP AF
LD (CurDrive),A
JP SetDriveInv
DriveRight: LD A,(NUM_DEVICES)
CP 0x01
RET Z
LD B,A
LD A,(CurDrive)
INC A
CP B
JR NZ,.L1
SUB A
.L1 PUSH AF
CALL ResDriveInv
POP AF
LD (CurDrive),A
JP SetDriveInv
DriveMouse: LD IX,BegDrive
LD C,(IX+0x00)
LD B,(IX+0x01)
OR A
SBC HL,BC
LD BC,0x0012
LD A,0xFF
.L1 INC A
SBC HL,BC
JR NC,.L1
JR SetDrive
DriveEnter: LD A,(CurDrive)
SetDrive: LD HL,NewDrive
ADD A,'A'
LD (HL),A
LD (IY+PANEL.CURRPATH),0x00
WINDOWCLOSE
EX (SP),IY
CALL SetInvert
EX (SP),IY
LD HL,NewDrive
CALL NewDIRECTORY
ld a,0
AutoActivatePanel EQU $-1
and a
jr nz,.old
bit 7,(IY+0x00)
jp z,.chPanel
push ix
pop hl
jr .readDir
.chPanel: pop iy
jp ChPanel
.old: LD HL,LeftPanel
BIT 7,(HL)
JR NZ,.readDir
LD HL,RightPanel
.readDir: LD DE,PANEL.CURRPATH
ADD HL,DE
SPDSS DSSF.CHDIR
POP IY
RET
ResDriveInv: LD DE,0x4F80 ; TODO
LD A,(CurDrive)
JR DriveInvert
SetDriveInv: LD DE,0x804F ; TODO
LD A,(CurDrive)
DriveInvert: LD L,A
LD H,0x00
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,BegDrive
ADD HL,BC
PUSH HL
POP IX
LD L,(IX + FORMTABL.XMINL)
LD H,(IX + FORMTABL.XMINH)
LD C,(IX + FORMTABL.YMINL)
LD B,(IX + FORMTABL.YMINH)
LD A,(IX + FORMTABL.XMAXL)
SUB (IX + FORMTABL.XMINL)
EX AF,AF'
LD A,(IX + FORMTABL.YMAXL)
SUB (IX + FORMTABL.YMINL)
LD IXH,A
EX AF,AF'
SRL A
LD IXL,A
JP InvertRectan
CurDrive: DEFB 0x00
Drive: DEFB " ",0
IF PLUGS_ENABLE
GetPlugins: LD HL,WorkBuffer + 0x300 ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><EFBFBD><><EFBFBD> <20><><EFBFBD><EFBFBD>
SPDSS DSSF.CURDIR
LD HL,StackTree
LD (.CURRNAME),HL
LD HL,FLXDir ; <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SPDSS DSSF.CHDIR
LD HL,FLXExt
LD DE,WorkBuffer + 0x200
PUSH DE
SPDSS DSSF.F_FIRST,0, DIR.M_Archive + \
DIR.M_System + \
DIR.M_Hidden + \
DIR.M_ReadOnly
POP HL
RET C
.L1 CALL .ADDFILENAME
LD DE,WorkBuffer + 0x200
PUSH DE
SPDSS DSSF.F_NEXT
POP HL
JR NC,.L1
LD HL,(.CURRNAME)
LD DE,StackTree
AND A
SBC HL,DE
LD A,L
SRL H
RRA
SRL H
RRA
SRL H
RRA ; A-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LD HL,StackTree
LD DE,WorkBuffer + 0x200
EXX
LD HL,.ADR00
LD BC,7
EXX
; 㫮<><E3ABAE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><><E2A5AA><EFBFBD>
.L2 PUSH DE
EXX
POP DE
LD (HL),E
INC HL
LD (HL),D
ADD HL,BC
EXX
LD BC,8
LDIR
EX DE,HL
LD (HL),B
INC HL
EX DE,HL
DEC A
JR NZ,.L2
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 300,20,108,166
W_FILL 4,2,100,10,COLORI.BLUE
W_TEXT 40,3,COLORI.WHITE,"Plugins"
W_ADRTEXT 16,14,COLORP.HIGHGRAY,0
.ADR00 EQU $-2
W_ADRTEXT 16,28,COLORP.HIGHGRAY,0
.ADR01 EQU $-2
W_ADRTEXT 16,42,COLORP.HIGHGRAY,0
.ADR02 EQU $-2
W_ADRTEXT 16,56,COLORP.HIGHGRAY,0
.ADR03 EQU $-2
W_ADRTEXT 16,70,COLORP.HIGHGRAY,0
.ADR04 EQU $-2
W_ADRTEXT 16,84,COLORP.HIGHGRAY,0
.ADR05 EQU $-2
W_ADRTEXT 16,98,COLORP.HIGHGRAY,0
.ADR06 EQU $-2
W_ADRTEXT 16,112,COLORP.HIGHGRAY,0
.ADR07 EQU $-2
W_ADRTEXT 16,126,COLORP.HIGHGRAY,0
.ADR08 EQU $-2
W_ADRTEXT 16,140,COLORP.HIGHGRAY,0
.ADR09 EQU $-2
W_ADRTEXT 16,154,COLORP.HIGHGRAY,0
.ADR10 EQU $-2
W_BUTTON 30,176,72,14
W_TEXT 50,179,COLORP.HIGHGRAY,"Cancel"
W_END
.Loop LD IX,PluginsTab
CALL TestCoords
SPDSS DSSF.SCANKEY
JR Z,.Loop
LD A,B
; AND 0x3F
; JR Z,SetupLoop0
BIT 4,B
JR NZ,.Loop
; BIT 5,B
; JR Z,SetupLoop
; LD HL,SetupLoop
; PUSH HL
; LD A,D
; AND 0x7F
; CP SC.R
; JP Z,InputRED
; CP SC.G
; JP Z,InputGREEN
; CP SC.B
; JP Z,InputBLUE
RET
.ADDFILENAME LD DE,FFIRST.Name
ADD HL,DE
LD DE,0
.CURRNAME EQU $-2
LD BC,8
LDIR
LD (.CURRNAME),DE
RET
SelectPlugin
.NUM00
.NUM01
.NUM02
.NUM03
.NUM04
.NUM05
.NUM06
.NUM07
.NUM08
.NUM09
.NUM10
.CANCEL
JR $
FLXDir: DZ "C:\\FN\\FLX"
FLXExt: DZ "*.FLX"
ENDIF