; 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 - адрес таблицы активных зон ; B - текущий пункт меню ; C - количество пунктов подменю 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 ; Выход по Esc MenuKExt: POP DE WINDOWCLOSE JP PullLoop ; временное сохранение флагов вывода панели 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) ; запуск по левой кнопке LD B,(IX + FORMTABL.FIRELEFTH) LD A,B OR C RET Z BIT FORMTABL.B_EXECNORETLMB,(IX + FORMTABL.FLAGL) ; запуск без возврата 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 ; буфер сохранения текущего пути SPDSS DSSF.CURDIR LD HL,StackTree LD (.CURRNAME),HL LD HL,FLXDir ; путь до диры с плагинами 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-количество найденых плагинов LD HL,StackTree LD DE,WorkBuffer + 0x200 EXX LD HL,.ADR00 LD BC,7 EXX ; уложить адрес текста .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 ; генерация меню запуска плагина 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