flex_nav/fn_main.a80
savelij13 8f458146bc - для ошибок у которых нет текста описания теперь выдает всегда
текст ошибки "Unknown Error".
- исправлена ошибка приводящая к вылету при копировании нескольких файлов
  на уже существующие и выборе отмены от продолжения копирования.
2026-01-22 17:36:03 +03:00

542 lines
12 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; 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
; <20>ãä¥à­ë¥ áâà ­¨æë ¯®¤ ¨­â¥à䥩á
.BufferID DB 0 ; ˆ­¤¥­â¨ä¨ª â®à ¯ ¬ï⨠¯®¤ ¡ãä¥à 
.FLX DB 0 ; 0 ‘âà ­¨æ  ¤«ï § £à㧪¨ FLX ¯« £¨­®¢
.LEFTPANEL DB 0 ; 1 ‘âà ­¨æ  ª â «®£  ‹¥¢®© ¯ ­¥«¨
.RIGHTPANEL DB 0 ; 2 ‘âà ­¨æ  ª â «®£  <20>à ¢®© ¯ ­¥«¨
.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 ; <20>¥à¢ë© ä ©« ­  áâà ­¨æ¥
DW 0 ; T¥ªã騩 ä ©« ­  áâà ­¨æ¥
DW 0 ; Š®«-¢® ¬ àª¨à®¢ ­­ëå ä ©«®¢
DD 0 ; Š®«-¢® ¬ àª¨à®¢ ­­ëå ¡ ©â®¢
DB 0
DB "*.*" ; Ma᪠ ¤«ï ä ©«®¢
DB 0x0A DUP 0
DB PANEL.CURR_PATH_Size DUP 0 ; <20>ãâì ª ⥪ã饩 ¤¨à¥ªâ®à¨¨
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 ; <20>¥à¢ë© ä ©« ­  áâà ­¨æ¥
DW 0 ; T¥ªã騩 ä ©« ­  áâà ­¨æ¥
DW 0 ; Š®«-¢® ¬ àª¨à®¢ ­­ëå ä ©«®¢
DD 0 ; Š®«-¢® ¬ àª¨à®¢ ­­ëå ¡ ©â®¢
DB 0
DB "*.*" ; Ma᪠ ¤«ï ä ©«®¢
DB 0x0A DUP 0
DB PANEL.CURR_PATH_Size DUP 0 ; <20>ãâì ª ⥪ã饩 ¤¨à¥ªâ®à¨¨
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 ; à ¡®â  á ¤¥à¥¢®¬