; LAST UPDATE: 24.07.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 .FNREZ2 DB 0 ; Страница с функциями FN .FNFONT DB 0 ; Страница шрифтов .FNREZ3 DB 0 ; Страница еще немного функций FN IFDEF ENABLE.VIEW .FNVIEW DB 0 ; Страница с FileViewer ENDIF IFDEF ENABLE.EDIT .FNEDIT DB 0 ; Страница с FileEditor ENDIF .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.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 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 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 ; Путь к текущей директории ;[]=======================================================================[] 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.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 ;[]----------------------------------------------------------[] .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.FNREZ3) LD C,WINSP.CPU1 JP Resident IF MARK_DIR .GetDirSize: LD DE,GetDirSizeR JR .HelpResident .MkdirsDst LD DE,MkdirsDstR 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 ; MAIN.FNREZ2 START_BLOCK_2 ;FlexDIRECTORY: DB 0x100 DUP 0 ;FLXdir: 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 ;[]=======================================================================[] 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 ;[]-----------------------------------------------------------------------[] PHASE 0x4000 ; MAIN.FNREZ3 START_BLOCK_3 include rez3_fnnext.a80 include rez3_fnmark.a80 ; буфера чтобы память не занимали в EXE файле INIT_VAR 0x8000 ; с конца страницы MINUSVAR fnedit_ext, WorkBuffer_Size ;times 0x400 db 0 MINUSVAR fnview_ext, WorkBuffer_Size ;times 0x400 db 0 MINUSVAR fn_ext, WorkBuffer_Size ;times 0x400 db 0 MINUSVAR DOShistory, 0x200 ;times 0x200 db 0 IFDEF ENABLE.HELP WINSP_CPU EQU WINSP.CPU3 ; окно проецирования WINSP_ADR EQU 0xC000 ; адрес окна include plugins/help/help.a80 HelpText: include plugins/help/help_t.a80 HelpTextEnd: ENDIF END_BLOCK_3: DEPHASE ; 0x4000 ;[]-----------------------------------------------------------------------[] IFDEF ENABLE.VIEW ; MAIN.FNVIEW START_BLOCK_VIEWER PHASE 0xC000 include plugins/fnviewer/fviewer.a80 DEPHASE ; 0xC000 END_BLOCK_VIEWER ENDIF IFDEF ENABLE.EDIT ; MAIN.FNEDIT START_BLOCK_EDITOR PHASE 0xC000 include plugins/fneditor/feditor.a80 DEPHASE ; 0xC000 END_BLOCK_EDITOR ENDIF ;[]-----------------------------------------------------------------------[] ; чисто для отладки 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 IFDEF ENABLE.EDIT EDITOR_SIZE EQU END_BLOCK_EDITOR - START_BLOCK_EDITOR ; редактор ENDIF IFDEF ENABLE.VIEW VIEWER_SIZE EQU END_BLOCK_VIEWER - START_BLOCK_VIEWER ; вьювер ENDIF SORT_SIZE EQU END_SORT - START_SORT ; сортировщик TREE_SIZE EQU END_TREE - START_TREE ; работа с деревом