flex_nav/fndosline.a80

711 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: 28.05.2025 savelij
;[]==========================================================[]
DOSline SUB A
LD (HistCurrent),A
SPDSS DSSF.TESTKEY
BIT KEYBSTAT.B_ALT,B
JR Z,DOSln0
LD A,D
AND 0x7F
CP SC.1 ; 0x02
JR C,DOSlnEx
CP SC.BKSP ; 0x0E
JP C,RESIDENT.QSearch
CP SC.Q ; 0x10
JR C,DOSlnEx
CP SC.QSKOBKAL ; 0x1A
JP C,RESIDENT.QSearch
CP SC.A ; 0x1D
JR C,DOSlnEx
CP SC.DOTZAP ; 0x26
JP C,RESIDENT.QSearch
CP SC.Z ; 0x2A
JR C,DOSlnEx
CP SC.ZAP ; 0x31
JP C,RESIDENT.QSearch
JR DOSlnEx
DOSln0 LD A,E
CP 0x0D
JP Z,RunDOSline
CP 0x1B
JP Z,ClrDOSln1
CP '!' ; 0x21
JR NC,DOSloop
CP ' ' ; 0x20
JR NZ,DOSln1
LD A,(DOSstr.slen)
OR A
JR NZ,DOSloop
; ¯®¬¥âª  ä ©«  ¯® SPACE
SPDSS DSSF.SCANKEY
JP RESIDENT.MarkFile
DOSln1 LD A,D
CP SC.ENTER | SC.RUS ; 0xA8
JR Z,DOSloop
CP SC.QSKOBKAL | SC.RUS ; 0x9A
JR Z,DOSloop
CP SC.QSKOBKAR | SC.RUS ; 0x9B
JR Z,DOSloop
CP SC.E | SC.RUS ; 0x92
JR Z,DOSloop
DOSlnEx
SPDSS DSSF.SCANKEY
RET
DOSloop SUB A
LD (HistCurrent),A
LD IX,DOSstr
LD HL,DOSTab
CALL DOSInputLine
RET C
JR Z,RunDOSline
SPDSS DSSF.TESTKEY
LD A,E
CP 0x1B
RET NZ
LD A,(DOSstr.slen)
OR A
RET Z
CALL ClearDOSline
SPDSS DSSF.SCANKEY
JR DOSloop
;[]----------------------------------------------------------[]
ClrDOSln1
SPDSS DSSF.SCANKEY
LD A,(DOSstr.slen)
OR A
JP Z,ShowDOSscreen
ClearDOSline SUB A
LD (HistCurrent),A
LD A,(DOSstr.slen)
OR A
RET Z
LD HL,DOSinp
SUB A
LD B,0x80
.L1 LD (HL),A
INC HL
DJNZ .L1
LD (DOSstr.slen),A
LD (DOSstr.posX),A
LD (DOSstr.addX),A
MAKEWINDOW WINSUBOBJ.WOBIND
W_FILL 254,229,380,10,COLORI.PANEL
W_END
RET
;[]----------------------------------------------------------[]
RunDOSline
SPDSS DSSF.SCANKEY
LD A,(DOSstr.slen)
OR A
JP Z,OpenFile
CALL SaveDOSline
LD HL,DOSinp
LD A,(HL)
CP 0x20
JP Z,ClearDOSline
LD A,(DOSstr.slen)
LD B,A
LD C,0x00
LD A,0x20
RunDLn0 CP (HL)
JR Z,RunDLine
INC HL
INC C
DJNZ RunDLn0
RunDLine DEC HL
LD A,'\\'
CP (HL)
JP NZ,RunDOSexe
LD HL,DOSinp
LD DE,WorkBuffer
PUSH DE
LD B,0x00
LDIR
SUB A
LD (DE),A
CALL ClearDOSline
POP HL
LD A,(DOSinp + 1)
CP ':'
JR NZ,.L1
LD (IY + PANEL.CURRPATH),0x00
.L1 CALL NewDIRECTORY
LD A,(TreeFlag)
OR A
RET Z
BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG)
RET NZ
PUSH IY
BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG)
LD IY,LeftPanel
LD HL,RightPanel
JR NZ,.L2
LD IY,RightPanel
LD HL,LeftPanel
.L2 LD DE,PANEL.CURRPATH
ADD HL,DE
INC HL
INC HL
IF TREE_REZID
CALL RESIDENT.FindTreeDIR
ELSE
CALL FindTreeDIRR
ENDIF
CALL PrintDIR
CALL PrnFileInfo
PUSH IY
POP IX
LD DE,PANEL.BARXL
ADD IX,DE
CALL PrnVScrBar
POP IY
RET
RunDOSexe LD HL,DOSinp - 1
RunDE1 INC HL
LD A,(HL)
CP '!'
JR C,RunDOSexe1
CP '.'
JR NZ,RunDE1
INC HL
LD A,(HL)
RES 5,A
CP 'F'
JR NZ,RunDOSexe1
INC HL
LD A,(HL)
RES 5,A
CP 'L'
JR NZ,RunDOSexe1
INC HL
LD A,(HL)
RES 5,A
CP 'X'
JR NZ,RunDOSexe1
LD HL,DOSinp
LD DE,WorkBuffer
SUB A
.L1 LDI
CP (HL)
JR NZ,.L1
LD (DE),A
CALL ClearDOSline
CALL RunFLX
JP C,DOSError
RET
RunDOSexe1 ld hl,WorkBuffer
ld de,WorkBuffer + 1
ld bc,0x0100
ld (hl),0
ldir
LD DE,WorkBuffer
call GetFileName
jp c,.error
ld hl,DOSinp
call SkipWord
ld a,(hl)
and a
jr z,.endOfLine
dec hl
ld de,WorkBuffer
call ConcatString
.endOfLine: ld hl,WorkBuffer
ld de,WorkBuffer + 0x0100
SPDSS DSSF.EX_PATH,4
jr c,.error
and 2
jr z,.unknown
ld hl,(WorkBuffer + 0x0100)
ld de,'XE' ;0x5845 - 'EX'
sbc hl,de
jr nz,.noExe
ld a,(WorkBuffer + 0x0102)
cp 'E'
jr nz,.noExe
;!TODO ¬¥áâ® ¤«ï ᯥæ¨ä¨ç­®£® § ¯ã᪠ exe?
; ... ... ...
;
.unknown: ld hl,WorkBuffer
ld de,WorkBuffer + 0x0100
ld bc,0x0100
ldir
jr .noBatch
.noExe: ld hl,ShellFile ;ª®¯¨à㥬 ¯ãâì ª 襫«ã
ld de,WorkBuffer + 0x0100
call CopyString
ld hl,WorkBuffer
call ConcatString
.noBatch: CALL ResDrivers
SUB A
CALL ClearScreen
CALL ResVideoMode
LD HL,ReStartPoint
EX (SP),HL
LD HL,WorkBuffer + 0x0100
SPDSS DSSF.EXEC,0
RET NC
PUSH AF
SETPORT BORDER,0
CALL InitVideoMode
CALL InitDrivers
CALL InitScreen
CALL ClearDOSline
SUB A
CALL InitPanels
POP AF
.error: CALL DOSError
LD HL,MainLoop
EX (SP),HL
RET
; ¢áâ ¢ª  ¨§ ¡ãä¥à  ¢¢®¤  ª®¬.áâப¨ ¨¬¥­¨ ¨á¯®«­ï¥¬®£® ä ©« 
; ¥á«¨ 㪠§ ­  ¡á®«îâ­ë© ¯ãâì ª ä ©«ã á ¨¬¥­¥¬ ¤¨áª , â® ®­ ª®¯¨àã¥âáï æ¥«¨ª®¬
; ¥á«¨ ¯à®áâ® ¨¬ï ä ©« , â® ¯à®¨§¢®¤¨âáï ¯®¯ë⪠ ¯®¨áª  ä ©«  ¢
; ª â «®£¥ ⥪ã饩 ¯ ­¥«¨ ¨ ¯®¤áâ ¢«ï¥âáï ¥£®  ¡á®«îâ­ë© ¯ãâì, ¥á«¨ ­¥â, â® ¯à®áâ® ¨¬ï ä ©« 
; DE - ¡ãä¥à ¤«ï ¨¬¥­¨ ä ©« 
GetFileName: LD A,(DOSinp + 1) ; ¢ ª®¬.áâப¥ 㪠§ ­  ¡á®«îâ­ë© ¯ãâì ª ä ©«ã (á ¤¨áª®¬)
CP ':'
JR nz,.panelSearch
.notFound: ld hl,DOSinp ;ª®¯¨à㥬 ¡ãä¥à ª®¬.áâப¨ ¢ ¡ãä¥à
jp CopyWord
.panelSearch: ex hl,de
ld (.str),hl
bit PANELFLAG.B_SIDE,(iy + PANEL.PANELFLAG)
ld hl,RightPanel + PANEL.CURRPATH
jr nz,.next
ld hl,LeftPanel + PANEL.CURRPATH
.next: ld de,WorkBuffer + 0x0100
call CopyString
ld a,'\\'
ld (de),a
inc de
; ‚뤥«¨âì ¨¬ï ä ©«  ¨§ áâப¨
ld hl,DOSinp ; ®âªã¤ 
SPDSS DSSF.EX_PATH,3
ret c ; ¨¬ï ä ©«  ­¥ ­ ©¤¥­®
bit 1,a
jr z,.noExt ; ¨¬ï ¨á¯®«­ï¥¬®£® ä ©«  㪠§ ­® á à áè¨à¥­¨¥¬, ¨áª âì ­¥ ­ã¦­®
ld hl,EndOfString
jr .found1
.noExt: ld hl,BATExtension
call PrepareFilename
call SearchFilename
jr nc,.found
ld hl,EXEExtension
.found1: call PrepareFilename
call SearchFilename
.found: ld de,0
.str EQU $-2
jr c,.notFound
ld hl,WorkBuffer + 0200h
jp CopyString
;<3B>®¤£®â®¢ª  ¨¬¥­¨ ä ©«  ¤«ï ¯®¨áª 
PrepareFilename:
ld de,WorkBuffer + 0200h
push hl
ld hl,WorkBuffer + 0x0100
call CopyString
pop hl
jp ConcatString
;¯®¨áª ä ©« 
SearchFilename: ld hl,WorkBuffer + 0200h ;¯®¨áª ä ©«  ¢ ª â «®£¥ ⥪ã饩 ¯ ­¥«¨
ld de,WorkBuffer + 0300h
SPDSS DSSF.F_FIRST,1,DIR.M_Archive + DIR.M_ReadOnly
ret
;[]----------------------------------------------------------[]
SaveDOSline
GETPORT WINSP.CPU1
PUSH AF
LD A,(RAMPAGES.FNHELP)
SETPORT WINSP.CPU1,,0
SETPORT WINSP.Y_PORT,0xC0
LD IX,DOSstr
LD HL,(HistSpace)
LD C,(IX + DOSstr.slen - DOSstr)
LD B,0x00
.L4 OR A
SBC HL,BC
JR C,.L1
JR NZ,.L3
.L1 LD A,(HistCount)
DEC A
LD (HistCount),A
PUSH BC
CALL FindHistory
POP BC
LD DE,DOShistory + DOShistory_Size
OR A
EX DE,HL
SBC HL,DE
JR .L4
.L3 DEC HL
LD (HistSpace),HL
PUSH BC
LD A,(HistCount)
CALL FindHistory
LD E,L
LD D,H
ADD HL,BC
INC HL
EX DE,HL
PUSH HL
LD BC,DOShistory
OR A
SBC HL,BC
LD C,L
LD B,H
POP HL
LD A,B
OR C
JR Z,.L2
DEC HL
DEC DE
LDDR
.L2 POP BC
LD HL,DOSinp
LD DE,DOShistory
LD A,C
INC A
LD (DE),A
INC DE
LDIR
SUB A
LD (HistCurrent),A
POP AF
SETPORT WINSP.CPU1,,0
LD HL,HistCount
INC (HL)
RET
GetDOShistory LD IX,DOSstr
LD HL,HistCount
LD A,(HistCurrent)
INC (HL)
DEC (HL)
JP Z,ClearDOSline
CP (HL)
RET Z
EX AF,AF'
GETPORT WINSP.CPU1
PUSH AF
LD A,(RAMPAGES.FNHELP)
SETPORT WINSP.CPU1,,0
EX AF,AF'
PUSH AF
CALL FindHistory
LD DE,DOSinp
LD A,(HL)
INC HL
DEC A
LD (IX + DOSstr.slen - DOSstr),A
LD (IX + DOSstr.posX - DOSstr),A
LD C,A
LD B,0x00
LDIR
SUB A
LD (IX + DOSstr.addX - DOSstr),A
POP AF
INC A
LD (HistCurrent),A
POP AF
SETPORT WINSP.CPU1,,0
RET
FindHistory LD HL,DOShistory
OR A
RET Z
LD B,A
LD D,0x00
.L1 LD E,(HL)
ADD HL,DE
DJNZ .L1
RET
;[]----------------------------------------------------------[]
DOSInputLine LD (InpLnData),IX
LD (InputLine.InpMous),HL
RES 7,(IX + 0x01)
SET 6,(IX + 0x01)
SPDSS DSSF.TESTKEY
JR NZ,.L1
RES 6,(IX + 0x01)
.L1 CALL InsInpLnCol
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX + 0x04)
ADD HL,DE
LD (HL),D
CALL PrintInpLn + 3
DOSLineLp HALT
CALL ChCursor
LD IX,(InputLine.InpMous)
CALL TestCoords
SPDSS DSSF.TESTKEY
JR Z,DOSLineLp
RES 7,D
BIT KEYBSTAT.B_ALT,B
JR NZ,DOSLineLp1;DOSLineLp ; ¢ë室, §¤¥áì ­¥â ª®¬¡¨­ æ¨© á ALT
LD IX,DOSTable2 ; ª®¬¡¨­ æ¨ï á CTRL
BIT KEYBSTAT.B_CTRL,B
JR NZ,DOSKeys
LD IX,DOSTable1 ; ¢¢®¤ ¡¥§ ¬®¤¨ä¨ª â®à®¢
DOSKeys LD L,(IX + 0x00) ; ASCII code
INC IX
INC L
JR Z,DOSLineLp1
DEC L
LD H,(IX + 0x00) ; position code
INC IX
LD C,(IX + 0x00) ; adr LOW
INC IX
LD B,(IX + 0x00) ; adr HIGH
INC IX
OR A
SBC HL,DE
JR NZ,DOSKeys
LD IX,(InpLnData)
RES 6,(IX + 0x01)
LD A,E
CP 0x1B
JR NZ,DOSLnNx
CALL ResCursor
LD A,0x01
OR A
RET
DOSLnNx LD HL,DOSLineLp
PUSH HL
PUSH BC
PUSH IX
SPDSS DSSF.SCANKEY
POP IX
RET
DOSLineLp1 LD IX,(InpLnData)
LD A,E
CP 0x20
JR NC,DOSLineLp2
BIT 6,(IX + 0x01)
JR Z,DOSLnE0
PUSH IX
SPDSS DSSF.SCANKEY
POP IX
DOSLnE0 CALL ResCursor
LD A,0x01
OR A
RET
DOSLineLp2 RES 6,(IX + 0x01)
LD HL,DOSLineLp
PUSH HL
PUSH IX
SPDSS DSSF.SCANKEY
POP IX
LD A,E
JP InsertSymbol
DOSLnExtN POP HL
LD IX,(InpLnData)
CALL ResCursor
XOR A
RET
DOSLnExtC POP HL
LD IX,(InpLnData)
CALL ResCursor
SCF
RET
DOSTable1 DW SC.ESC << 8 | 0x1B, InputLine.InpLnExtC ; 0x011B,InpLnExtC
DW SC.ENTER << 8 | 0x0D,InputLine.InpLnExtN ; 0x280D,InpLnExtN
DW SC.X4 << 8, ILleft ; 0x5400,ILleft
DW SC.X6 << 8, ILright ; 0x5600,ILright
DW SC.BKSP << 8 | 8, ILdelet ; 0x0E08,ILdelet
DW SC.XDEL << 8, IL_del_ ; 0x4F00,IL_del_
DW SC.X7 << 8, ILhome ; 0x5700,ILhome
DW SC.X1 << 8, ILend ; 0x5100,ILend
DB 0xFF
DOSTable2 DW SC.X4 << 8, ILwordL ; 0x5400,ILwordL
DW SC.X6 << 8, ILwordR ; 0x5600,ILwordR
DW SC.BKSP << 8, ILdelWR ; 0x0E00,ILdelWR
DW SC.ENTER << 8, InsFileName ; 0x2800,InsFileName
DW SC.QSKOBKAL << 8, InsLeftPath ; 0x1A00,InsLeftPath
DW SC.QSKOBKAR << 8, InsRightPath ; 0x1B00,InsRightPath
DW SC.E << 8, InsHistory ; 0x1200,InsHistory
DB 0xFF
InsFileName
GETPORT WINSP.CPU1
PUSH AF
BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU1,,0
LD L,(IY + PANEL.FFL)
LD H,(IY + PANEL.FFH)
LD E,(IY + PANEL.CFL)
LD D,(IY + PANEL.CFH)
ADD HL,DE
BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG)
JR Z,InsFN1
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
SET 6,H
INC HL
INC HL
LD DE,TempName
LD BC,0x000D
LDIR
JR InsFN2
InsFN1 ADD HL,HL
ADD HL,HL
ADD HL,HL
LD E,L
LD D,H
ADD HL,HL
ADD HL,DE
SET 6,H
INC HL
LD DE,TempName
CALL MakeDOSname
InsFN2 POP AF
SETPORT WINSP.CPU1,,0
LD HL,TempName
LD A,(HL)
CP '.'
RET Z
CP '\\'
RET Z
PUSH HL
SUB A
LD C,A
.L1 INC C
INC HL
CP (HL)
JR NZ,.L1
LD (HL),0x20
INC HL
LD (HL),A
INC C
POP HL
JP InsertWord
TempName DB 14 DUP 0
InsLeftPath LD HL,LeftPanel + PANEL.CURRPATH
JR InsPath
InsRightPath LD HL,RightPanel + PANEL.CURRPATH
InsPath LD DE,WorkBuffer + 0x100
PUSH DE
SUB A
LD C,A
.L1 LDI
CP (HL)
JR NZ,.L1
DEC HL
LD A,'\\'
CP (HL)
JR Z,.L2
LD (DE),A
INC DE
DEC C
.L2 SUB A
SUB C
LD C,A
POP HL
JP InsertWord
InsertWord LD A,(IX + 0x04) ;InpytSymb
ADD A,C
RET C
SUB (IX + 0x00) ;Max len
RET NC
PUSH HL
LD A,(IX + 0x04)
SUB (IX + 0x02)
JR Z,NotInsWord
; ‚¢®¤ ¢ á¥à¥¤¨­ã ⥪áâ 
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX + 0x04)
ADD HL,DE
LD E,L
LD D,H
LD B,0x00
ADD HL,BC
EX DE,HL
DEC HL
DEC DE
PUSH BC
LD C,A
LDDR
POP BC
NotInsWord PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX + 0x02)
ADD HL,DE
EX DE,HL
POP HL
PUSH BC
LD B,0x00
LDIR
POP BC
LD A,(IX + 0x04)
ADD A,C
LD (IX + 0x04),A
LD A,(IX + 0x02)
ADD A,C
LD (IX + 0x02),A
JP PrintInpLn
InsHistory CALL GetDOShistory
JP PrintInpLn
;[]----------------------------------------------------------[]
ShellFile: db "X:\\SYSTEM.EXE /C ",0 ; 襫«
BATExtension: db ".BAT",0
EXEExtension: db ".EXE"
EndOfString: db 0
DOSstr DB 0x80,0x00
.posX DB 0x00
.addX DB 0x00
.slen DB 0x00
DW 256,231,376
DB COLORP.PANEL + COLORI.FILES
DOSinp DB 0x81 DUP 0
HistSpace DEFW 0x200
HistCount DEFB 0x00
HistCurrent DEFB 0x00
;[]----------------------------------------------------------[]