; LAST UPDATE: 18.01.2026 savelij include fn_const.a80 include fn_macros.a80 PHASE BASE_ADDR START_BLOCK_1 JP MainStartFN ; entry point JP ClearScreen JP MakeWindow JP ReplaceColorRectan JP PrintTxtLine_IFF JP PrintTxtLine JP PrintTxtLineNumsChar JP PrintPathLeft JP PrintPathRight JP PrintPathCentr JP InputLine JP InputLine.InputLineExitOk JP InputLine.InputLineExitCancel JP DOSError JP InitScrollBar JP DrawHScrollBar JP DrawVScrollBar JP InitProgressBar JP DrawProgressBar DB JUMPS.JUMPSIZE * 5 DUP 0xC9 JP WaitUnpressMouse JP CheckCoordsMouse JP CMOSPrintDateTime DB JUMPS.JUMPSIZE * 1 DUP 0xC9 JP PointerMouseClock JP PointerMousePointer DB JUMPS.JUMPSIZE * 4 DUP 0xC9 JP ConvertNumbers_40b JP MoveBytesInc JP MoveBytesDec JP Mul_8X8_16b JP Mul_16X8_24b JP Mul_16X16_16b JP Mul_16X16_32b JP Mul_32X16_32b JP Div_16X16_16b_16b JP Div_24X16_8b_16b JP Div_32X16_16b_16b JP Div_32X16_32b_16b JP ConvertNumbers_32b JP ConvertNumbers_16b JP ConvertNumbers_8b JP atoi_32b JP atoi_16b JP Resident DB 0xC0 - LOW ($) DUP 0xC9 NUM_DEVICES DB 0 ; Количество устройств TreeFlag DB 0 ; Флаг дерева CMOSFlag DB 0 ; Флаг CMOS 0 - нет ; 1 - есть MouseFlag DB 1 ; Флаг мыши 0 - нет ; 1 - есть CMOSPrint: DB 1 ; Флаг разрешения печати даты времени ; 1 - запрещено, 0 - разрешено RAMPAGES .FNPAGESID DB 0 ; Индентификатор памяти где FN .FNREZ2 DB 0 ; 0 Страница с функциями FN .FNFONT DB 0 ; 1 Страница шрифтов .FNREZ3 DB 0 ; 2 Страница еще немного функций FN ; Буферные страницы под интерфейс .BufferID DB 0 ; Индентификатор памяти под буфера .FLX DB 0 ; 0 Страница для загрузки FLX плагинов .LEFTPANEL DB 0 ; 1 Страница каталога Левой панели .RIGHTPANEL DB 0 ; 2 Страница каталога Правой панели .BuffPg1 DB 0 ; 3 .BuffPg2 DB 0 ; 4 .BuffPg3 DB 0 ; 5 используется копировщиком файлов/директорий .BuffPg4 DB 0 ; 6 используется сортировкой, работа с деревом директорий .BuffPgEnd DB 0xFF ; маркер конца списка страниц .FILES_COUNT DW 0 ; количество помеченных файлов .FILES_BYTES DB 5 DUP 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 ; 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 PANEL.CURR_PATH_Size 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 PANEL.CURR_PATH_Size DUP 0 ; Путь к текущей директории thanks DZ "\r\nThank you for using Flex Navigator.\r\n" DOSError EX AF,AF' GETPORT WINSP.CPU1 PUSH AF LD A,(RAMPAGES.FNREZ2) SETPORT WINSP.CPU1,,0 EX AF,AF' CALL DOSErrorR EX AF,AF' POP AF SETPORT WINSP.CPU1,,0 EX AF,AF' RET Resident LD (.ResCall),DE IN B,(C) PUSH BC OUT (C),A CALL 0x0000 .ResCall EQU $-2 POP BC OUT (C),B RET ; (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 ; (ADR) + BCDE = (ADR) HLPBCDE: LD A,(HL) ADD A,E LD (HL),A INC HL LD A,(HL) ADC A,D LD (HL),A INC HL LD A,(HL) ADC A,C LD (HL),A INC HL LD A,(HL) ADC A,B LD (HL),A INC HL LD A,(HL) ADC A,0 LD (HL),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 GET_HANDLE_ADR 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 ; *2 ADD HL,HL ; *4 ADD HL,HL ; *8 LD E,L LD D,H ADD HL,HL ; *16 ADD HL,DE ; *18 - FileHDR.SIZE OR H LD H,A RET ; вызов функции в страницах RESIDENT ; ==============resident 2============== .CopyFiles: LD DE,CopyFilesR .FunctResident: LD A,(RAMPAGES.FNREZ2) LD C,WINSP.CPU1 JP Resident .ReName: LD DE,ReNameR jr .FunctResident .MakeDIR: LD DE,MakeDIRR jr .FunctResident .DeleteFiles: LD DE,DeleteFilesR jr .FunctResident .Setup: LD DE,SetupR jr .FunctResident .QSearch: LD DE,QSearchR jr .FunctResident IF MARK_DIR ; считалка содержимого директории в байтах .CalcDirSize LD DE,CalcDirSizeR JR .FunctResident ENDIF ; ==============resident 2============== ; ==============resident 3============== .MarkFile: LD DE,MarkFileR .HelpResident: LD A,(RAMPAGES.FNREZ3) LD C,WINSP.CPU1 JP Resident .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 .PrintFile: CALL ResInvert .PrintFileL3 LD HL,SetInvert PUSH HL LD DE,PrintFileR jr .HelpResident .FileInfo: CALL ResInvert .FileInfoL2 LD HL,SetInvert PUSH HL LD DE,FileInfoR jr .HelpResident .Version: LD DE,VersionR jr .HelpResident .DiskInfo: CALL ResInvert .DiskInfoL4: LD DE,DiskInfoR jr .HelpResident .SystemInfo: LD DE,SystemInfoR jr .HelpResident .Quit: CALL ResInvert .QuitL1 LD DE,QuitConfirmWin CALL .HelpResident JP C,SetInvert LD HL,ComExit EX (SP),HL RET ; ==============resident 3============== ; Выход ComExit CALL ResDrivers CALL ResVideoMode LD HL,thanks SPDSS DSSF.PCHARS LD A,(RAMPAGES.FNPAGESID) SPDSS DSSF.FREEMEM SPDSS DSSF.EXIT,0 include fn_win.a80 include fn_print.a80 include fn_input.a80 include fn_bar.a80 include fn_mouse.a80 include fn_sys.a80 ; Старт MainStartFN: DI LD SP,STACK ReStartFN: SETPORT BORDER,0 SETPORT WINSP.Y_PORT,0xC0 CALL InitVideoMode CALL InitDrivers CALL InitScreen CALL ClearDOSline SUB A CALL InitPanels CALL WaitUnpressMouse MainLoop: LD IX,MAINTAB.FilePanelLeft BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) JR Z,.L1 LD IX,MAINTAB.FilePanelRight .L1 CALL CheckCoordsMouse CALL TestKeys CALL C,DOSline LD A,(TreeFlag) OR A CALL NZ,TestTreeR 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 START_SORT include fn_sort.a80 END_SORT START_TREE include fn_tree.a80 END_TREE include fn_panel.a80 include fn_dos.a80 include fn_work.a80 include fn_menu.a80 include fn_init.a80 include fn_dosline.a80 include fn_tab.a80 END_BLOCK_1: DEPHASE ; BASE_ADDR ; ==============resident 2============== PHASE 0x4000 START_BLOCK_2 ; буфера чтобы память не занимали в EXE файле REZ2_BUFFERS _INIT_VAR BUF_REZ2.FlexDIRECTORY _MINUSVAR .OLDLEFTPANEL, 0x100 ; текущий путь левой панели _MINUSVAR .OLDRIGHTPANEL, 0x100 ; текущий путь правой панели _MINUSVAR .FINDCURRPATH, 0x100 ; временной текущий путь источника _MINUSVAR .FINDBUF, 0x100 ; временный буфер поиска _MINUSVAR .ENDPATHSRC, WORD ; адрес хвоста пути источника _MINUSVAR .CURR_DIRNAME, WORD ; текущий адрес в пути include rez2_fn_funct.a80 include rez2_fn_search.a80 include rez2_fn_config.a80 include rez2_fn_error.a80 include rez2_fn_tab.a80 END_BLOCK_2: DEPHASE ; 0x4000 ; ==============resident 2============== ; ==============fonts============== PHASE 0xC000 ; MAIN.FNFONT 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 ; ==============fonts============== ; ==============resident 3============== PHASE 0x4000 ; MAIN.FNREZ3 START_BLOCK_3 ; буфера чтобы память не занимали в EXE файле REZ3_BUFFERS _INIT_VAR 0x8000 ; с конца страницы _MINUSVAR .DOShistory, 0x200 ;times 0x200 db 0 _MINUSVAR .fnedit_ext, EXT_BUF_SIZE ;times 0x400 db 0 _MINUSVAR .fnview_ext, EXT_BUF_SIZE ;times 0x400 db 0 _MINUSVAR .fn_ext, EXT_BUF_SIZE ;times 0x400 db 0 include rez3_fn_extensions.a80 include rez3_fn_mark.a80 include rez3_fn_misc.a80 include rez3_fn_tab.a80 END_BLOCK_3: DEPHASE ; 0x4000 ; ==============resident 3============== 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 SORT_SIZE EQU END_SORT - START_SORT ; сортировщик TREE_SIZE EQU END_TREE - START_TREE ; работа с деревом