; LAST UPDATE: 03.06.2025 savelij ;[]=======================================================================[] ; FLEX NAVIGATOR ; ; v1.11 ; ; Last edition: 03/02/2000 ; ;[]=======================================================================[] ; flex navigator equs include fn_const.a80 include fn_macros.a80 ;[]-----------------------------------------------------------------------[] ; org BASE_ADDR ;0x8000 ; section .bss ;WorkBuffer: EQU 0x8000 ;resb 0x400 ; work buffer for func/procs ;[]-----------------------------------------------------------------------[] ; ; org 0x8400 ; section .bss ;PagesList: EQU 0x8400 ;resb 0x100 ; buffer for memory pages ;[]-----------------------------------------------------------------------[] ; ; org 0x8500 ; section .text PHASE BASE_ADDR START_BLOCK_1 ;[]=======================================================================[] ; section .text ;EntryPoint: JP StartPoint ; entry point JP ClearScreen ; 8603->86BB JP MakeWindow ; 8606->86F0 JP InvertRectan ; 8609->8DA0 JP PrnTxtLnIFF ; 860C->8FB0 JP PrnTxtLnNorm ; 860F->9024 JP PrnTxtLnNormC ; 8612->909B JP PrnRangPathL ; 8615->8E48 JP PrnRangPathR ; 8618->8EB2 JP PrnRangPathC ; 861B->8F36 JP InputLine ; 861E->915F JP InputLine.InpLnExtN ; 8621->9205 JP InputLine.InpLnExtC ; 8624->920F JP DOSError ; 8627->86A8 JP InitScrollBar ; 862A->96EB JP PrnHScrBar ; 862D->9729 JP PrnVScrBar ; 8630->9882 JP InitProcess ; 8633->99DA JP PrnProcess ; 8636->9A39 JP InitScrollBar DB JUMPS.JUMPSIZE * 4 DUP 0xC9 JP ResFire ; 8648->9B01 JP TestCoords ; 864B->9B10 JP SetCMOSPrint ; 864E->9EA9 JP ResCMOSPrint ; 8651->9EF3 JP SetClock ; 8654->A08E JP SetMouse ; 8657->A0BB DB JUMPS.JUMPSIZE * 4 DUP 0xC9 JP ConvNumTxt40 ; 8666->A1F7 JP MoveBytes ; 8669->A3B6 JP MoveBytesUp ; 866C->A3E3 JP Mult8 ; 866F->A0E8 JP Mult16X8 ; 8672->A124 JP Mult16 ; 8675->A110 JP Mult16X16 ; 8678->A124 JP Mult32 ; 867B->A149 JP Divis16X16 ; 867E->A16B JP Divis24X16 ; 8681->A195 JP Divis32X16 ; 8684->A1B8 JP Divis32 ; 8687->A1CD JP ConvNumTxt32 ; 868A->A236 JP ConvNumTxt16 ; 868D->A2AA JP ConvNumTxt8 ; 8690->A2DE JP ConvTxtNum32 ; 8693->A35D JP ConvTxtNum16 ; 8696->A395 JP Resident ; 8699->A40B DB 0xC0 - LOW ($) DUP 0xC9 ;[]-----------------------------------------------------------------------[] ; flex navigator settings NUM_DEVICES DB 0 ; Кол-во устройств TreeFlag DB 0 ; Флаг дерева CMOSFlag DB 0 ; Флаг CMOS 0 - нет ; 1 - есть MouseFlag DB 1 ; Флаг мыши 0 - нет ; 1 - есть CMOSPrint: DB 1 RAMPAGES .FNPAGESID DB 0 ; Индеф.памяти где FN .FNFUNCT DB 0 ; Страница с функциями FN .FNVIEW DB 0 ; Страница с FileViewer .FNEDIT DB 0 ; Страница с FileEditor .FNHELP DB 0 ; Страница FN HELP .FNFONT DB 0 ; Страница шрифтов .BufferID DB 0 ; Индентификатор памяти под буфера .FLX DB 0 ; Страница для подгрузки FLX просмотр. FLX утилит .LEFTPANEL DB 0 ; Страница каталога Левой панели .RIGHTPANEL DB 0 ; Страница каталога Правой панели ; Буферные страницы под интерфейс .BuffPg1 DB 0 DB 0 .BuffPg3 DB 0 DB 0 DB 0 DB LOW (-$) DUP 0 ;UI palette & stack memory ;PALETTE: B G R DB 0x00,0x00,0x00,0x00 ; Black 00 00 DB 0x00,0x00,0xFF,0x00 ; B.Red 01 DB 0x00,0x80,0x00,0x00 ; Green 02 08 DB 0x00,0xFF,0xFF,0x00 ; B.Yellow 03 DB 0x80,0x00,0x00,0x00 ; Blue 04 10 DB 0xFF,0xFF,0x00,0x00 ; Invert paper 05 DB 0x80,0x00,0x00,0x00 ; Invert ink 06 18 DB 0x80,0x80,0x80,0x00 ; BlackGray 07 DB 0xC0,0xC0,0xC0,0x00 ; HighGray 08 20 DB 0x80,0x00,0x00,0x00 ; Panel 09 DB 0xFF,0xFF,0x00,0x00 ; Files 0A 28 DB 0x00,0xFF,0xFF,0x00 ; Select Files 0B DB 0x00,0xFF,0xFF,0x00 ; InvSel Files 0C 30 DB 0xC0,0xC0,0xC0,0x00 ; Reserved 0D DB 0xFF,0xFF,0xFF,0x00 ; White 0E 38 DB 0xFF,0xFF,0xFF,0x00 ; White 0F DOSError EX AF,AF' GETPORT WINSP.CPU1 PUSH AF LD A,(RAMPAGES.FNFUNCT) SETPORT WINSP.CPU1,,0 EX AF,AF' CALL DOSErrorR EX AF,AF' POP AF SETPORT WINSP.CPU1,,0 EX AF,AF' RET include fnwin.a80 include fnprint.a80 include fninput.a80 include fnbar.a80 include fnmouse.a80 include fnsys.a80 ;[]=======================================================================[] ;Старт StartPoint: DI LD SP,STACK ReStartPoint: SETPORT BORDER,0 SETPORT WINSP.Y_PORT,0xC0 CALL InitVideoMode CALL InitDrivers CALL InitScreen CALL ClearDOSline SUB A CALL InitPanels CALL ResFire MainLoop: LD IX,FilePanelLeft BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) JR Z,.L1 LD IX,FilePanelRight .L1 CALL TestCoords CALL TestKeys CALL C,DOSline LD A,(TreeFlag) OR A IF TREE_REZID CALL NZ,RESIDENT.TestTree ELSE CALL NZ,TestTreeR ENDIF JR MainLoop ;[]-----------------------------------------------------------------------[] TestKeys SPDSS DSSF.TESTKEY JR Z,KeyExit RES 7,D LD A,B AND KEYBSTAT.M_ALT | KEYBSTAT.M_CTRL CP KEYBSTAT.M_ALT | KEYBSTAT.M_CTRL RET Z LD IX,HOTKEYS.SHIFTKeys LD A,B AND KEYBSTAT.M_LEFTSHIFT | KEYBSTAT.M_RIGHTSHIFT JR NZ,.L1 LD IX,HOTKEYS.CTRLKeys BIT KEYBSTAT.B_CTRL,B JR NZ,.L1 LD IX,HOTKEYS.ALTKeys BIT KEYBSTAT.B_ALT,B JR NZ,.L1 LD IX,HOTKEYS.ASCIIKeys .L1 LD L,(IX+0x00) ; скан код INC IX INC L SCF RET Z DEC L LD H,(IX+0x00) ; ASCII код INC IX LD C,(IX+0x00) ; LOW адрес вызова INC IX LD B,(IX+0x00) ; HIGH адрес вызова INC IX OR A SBC HL,DE JR NZ,.L1 LD (KeyCALL),BC SPDSS DSSF.SCANKEY CALL 0x0000 KeyCALL EQU $-2 KeyExit XOR A RET ;[]-----------------------------------------------------------------------[] MouseOnOff LD A,(MouseFlag) XOR 0x01 LD (MouseFlag),A LD C,MOUSEF.INIT JR NZ,.L1 LD C,MOUSEF.HIDE .L1 SPMOUSE RET ;[]-----------------------------------------------------------------------[] ComExit CALL ResDrivers CALL ResVideoMode LD HL,thanks SPDSS DSSF.PCHARS LD A,(RAMPAGES.FNPAGESID) SPDSS DSSF.FREEMEM SPDSS DSSF.EXIT,0 thanks DZ "\r\nThank you for using Flex Navigator.\r\n" ; (ADR) + BCDE = BCDE BCDEHLP: LD A,(HL) INC HL ADD A,E LD E,A LD A,(HL) INC HL ADC A,D LD D,A LD A,(HL) INC HL ADC A,C LD C,A LD A,(HL) ADC A,B LD B,A RET GET_DWORD: LD E,(HL) INC HL LD D,(HL) INC HL LD C,(HL) INC HL LD B,(HL) RET SET_DWORD: LD (HL),E INC HL LD (HL),D INC HL LD (HL),C INC HL LD (HL),B RET ;[]=======================================================================[] ; discription of flex navigator file panels LeftPanel: DB 0x80 ; Флаг панели бит 7 - бит выделенности ; бит 0 - номер панели DB 0x00 ; Флаг вида панели 0 - краткая панель ; бит 0 - подробная панель ; бит 1 - дерево ; бит 2 - ужатое дерево DB 0x01 ; Вид сортировки ; бит 0 - по имени ; бит 1 - по расширению ; бит 2 - по размеру ; бит 3 - по дате ; бит 4 - execute file ; бит 5 - file mask DW 4 ; X позиция панели DW 0 ; X позиция скролбара DW 0 ; Y позиция скролбара DW 0 ; Max длина скролбара DW 0 ; тек.длина скролбара DW 0 ; Адрес ячейки BarLeft DW 0 ; Адрес ячейки BarRight DW 0 ; Кол-во файлов на странице DW 0 ; Общее кол-во файлов DW 0 ; Первый файл на странице DW 0 ; Tекущий файл на странице DW 0 ; Кол-во маркированных файлов DD 0 ; Кол-во маркированных байтов DB 0 DB "*.*" ; Maска для файлов DB 0x0A DUP 0 DB 0x100 DUP 0 ; Путь к текущей директории RightPanel: DB 0x01 ; Флаг панели бит 7 - бит выделенности ; бит 0 - номер панели DB 0x00 ; Флаг вида панели 0 - краткая панель ; бит 0 - подробная панель ; бит 1 - дерево ; бит 2 - ужатое дерево DB 0x01 ; Вид сортировки ; бит 0 - по имени ; бит 1 - по расширению ; бит 2 - по размеру ; бит 3 - по дате ; бит 4 - execute file ; бит 5 - file mask DW 324 ; X позиция панели DW 0 ; X позиция скролбара DW 0 ; Y позиция скролбара DW 0 ; Max длина скролбара DW 0 ; тек.длина скролбара DW 0 ; Адрес ячейки BarLeft DW 0 ; Адрес ячейки BarRight DW 0 ; Кол-во файлов на странице DW 0 ; Общее кол-во файлов DW 0 ; Первый файл на странице DW 0 ; Tекущий файл на странице DW 0 ; Кол-во маркированных файлов DD 0 ; Кол-во маркированных байтов DB 0 DB "*.*" ; Maска для файлов DB 0x0A DUP 0 DB 0x100 DUP 0 ; Путь к текущей директории ;[]=======================================================================[] START_SORT include fnsort.a80 END_SORT IF TREE_REZID = 0 START_TREE include fntree.a80 END_TREE ENDIF include fnpanel.a80 include fndos.a80 include fnwork.a80 ; вызов функции в страницах RESIDENT ;[]----------------------------------------------------------[] .CopyFiles: LD DE,CopyFilesR ; resident 2 .FunctResident: LD A,(RAMPAGES.FNFUNCT) LD C,WINSP.CPU1 JP Resident ;[]----------------------------------------------------------[] .ReName: LD DE,ReNameR jr .FunctResident ;[]----------------------------------------------------------[] .MakeDIR: LD DE,MakeDIRR jr .FunctResident ;[]----------------------------------------------------------[] .DeleteFiles: LD DE,DeleteFilesR jr .FunctResident ;[]----------------------------------------------------------[] .Quit: CALL ResInvert .QuitL1 LD DE,QuitConfirmWin CALL .FunctResident JP C,SetInvert LD HL,ComExit EX (SP),HL RET ;[]==========================================================[] .Setup: LD DE,SetupR jr .FunctResident ;[]----------------------------------------------------------[] .FileInfo: CALL ResInvert .FileInfoL2 LD HL,SetInvert PUSH HL LD DE,FileInfoR jr .FunctResident ;[]----------------------------------------------------------[] .PrintFile: CALL ResInvert .PrintFileL3 LD HL,SetInvert PUSH HL LD DE,PrintFileR jr .FunctResident ;[]----------------------------------------------------------[] .DiskInfo: CALL ResInvert .DiskInfoL4: LD DE,DiskInfoR jr .FunctResident ;[]----------------------------------------------------------[] .SystemInfo: LD DE,SystemInfoR jr .FunctResident ;[]----------------------------------------------------------[] .Version: LD DE,VersionR jr .FunctResident ;[]----------------------------------------------------------[] .QSearch: LD DE,QSearchR jr .FunctResident IF TREE_REZID .TestTree LD DE,TestTreeR jr .FunctResident .TestTreeBeg LD DE,TestTreeR.TestTreeBeg jr .FunctResident .ReadTree LD DE,ReadTreeR jr .FunctResident .MakeTreePath LD DE,MakeTreePathR jr .FunctResident .FindTreeDIR LD DE,FindTreeDIRR jr .FunctResident ENDIF ;[]==========================================================[] .MarkFile: LD DE,MarkFileR ; resident 3 .HelpResident: LD A,(RAMPAGES.FNHELP) LD C,WINSP.CPU1 JP Resident IF MARK_DIR .GetDirSize: LD DE,GetDirSizeR JR .HelpResident ENDIF .UnMarkGroup: LD DE,UnMarkGroupR jr .HelpResident .UnMarkGroupN: LD DE,UnMarkGroupRN jr .HelpResident .MarkGroup: LD DE,MarkGroupR jr .HelpResident .MarkGroupN: LD DE,MarkGroupRN jr .HelpResident .SelectAll: LD DE,SelectAllR jr .HelpResident .SelectAllN: LD DE,SelectAllRN jr .HelpResident .UnSelectAll: LD DE,UnSelectAllR jr .HelpResident .UnSelectAllN: LD DE,UnSelectAllRN jr .HelpResident .InvertSelect: LD DE,InvertSelectR jr .HelpResident .InvertSelectN: LD DE,InvertSelectRN jr .HelpResident include fnmenu.a80 include fninit.a80 include fndosline.a80 include fntab.a80 END_BLOCK_1: DEPHASE ; BASE_ADDR ;[]=======================================================================[] PHASE 0x4000 ; section .text START_BLOCK_2 FlexDIRECTORY: DB 0x100 DUP 0 include rez2_fnfunct.a80 include rez2_fnmisc.a80 include rez2_fnsearch.a80 include rez2_fnconfig.a80 include rez2_fnerror.a80 include rez2_fntab1.a80 IF TREE_REZID include fntree.a80 ENDIF END_BLOCK_2: DEPHASE ; 0x4000 START_BLOCK_EDITOR PHASE 0xC000 include plugins/fnviewer/fviewer.a80 DEPHASE ; 0xC000 END_BLOCK_EDITOR START_BLOCK_VIEWER PHASE 0xC000 include plugins/fneditor/feditor.a80 DEPHASE ; 0xC000 END_BLOCK_VIEWER ;[]-----------------------------------------------------------------------[] PHASE 0x4000 ; section .text START_BLOCK_3 DOShistory: DB DOShistory_Size DUP 0 ;times 0x200 db 0 fn_ext: DB WorkBuffer_Size DUP 0 ;times 0x400 db 0 fnview_ext: DB WorkBuffer_Size DUP 0 ;times 0x400 db 0 fnedit_ext: DB WorkBuffer_Size DUP 0 ;times 0x400 db 0 include rez3_fnnext.a80 include rez3_fnmark.a80 WINSP_CPU EQU WINSP.CPU3 ; окно проецирования WINSP_ADR EQU 0xC000 ; адрес окна include plugins/help/help.a80 HelpText: include plugins/help/help_t.a80 HelpTextEnd: END_BLOCK_3: DEPHASE ; 0x4000 ;[]=======================================================================[] PHASE 0xC000 ; section .data START_BLOCK_4 FONT_RAW_PACK binclude tmp/font_raw.pack IFFFONT_RAW_PACK binclude tmp/iff_font_raw.pack IFFFONT_RAW_END END_BLOCK_4: DEPHASE ; 0xC000 ; чисто для отладки BLOCK1_SIZE EQU END_BLOCK_1 - START_BLOCK_1 ; основной код BLOCK2_SIZE EQU END_BLOCK_2 - START_BLOCK_2 ; резидент 2 BLOCK3_SIZE EQU END_BLOCK_3 - START_BLOCK_3 ; резидент 3 EDITOR_SIZE EQU END_BLOCK_EDITOR - START_BLOCK_EDITOR ; редактор VIEWER_SIZE EQU END_BLOCK_VIEWER - START_BLOCK_VIEWER ; вьювер SORT_SIZE EQU END_SORT - START_SORT ; сортировщик TREE_SIZE EQU END_TREE - START_TREE ; работа с деревом