flex_nav/rez3_fnmark.a80
savelij13 499aa7968d - исправлена проверка запускаемого файла по расширению.
- доки переведены на UTF8 кодировку.
- поправлена CorrBigChar.
2025-06-24 21:36:47 +03:00

876 lines
16 KiB
Plaintext

; LAST UPDATE: 02.06.2025 savelij
;[]==========================================================[]
MarkFileR LD A,(IY+PANEL.EFL)
OR (IY+PANEL.EFH)
RET Z
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
LD L,(IY+PANEL.FFL)
LD H,(IY+PANEL.FFH)
LD E,(IY+PANEL.CFL)
LD D,(IY+PANEL.CFH)
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
SET 6,H
SET 7,H ; | 0xC000
LD E,(HL) ; FileHDR.Flag
POP AF
SETPORT WINSP.CPU3,,0
BIT FileHDR.B_MARK,E
PUSH AF
CALL Z,SelectFile
POP AF
CALL NZ,UnSelectFile
CALL CursDown
CALL PrnFileInfo
LD B,0x07
.L2 PUSH BC
SPMOUSE MOUSEF.READ_STATE
POP BC
BIT 1,A
RET Z
HALT
DJNZ .L2
RET
;[]==========================================================[]
SelectFile: LD IXL,0x01
JR UnSelectFile.L1
UnSelectFile: LD IXL,0x00
.L1
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L2
LD A,(RAMPAGES.RIGHTPANEL)
.L2
SETPORT WINSP.CPU3,,0
SETPORT WINSP.Y_PORT,0xC0
LD L,(IY+PANEL.FFL)
LD H,(IY+PANEL.FFH)
LD E,(IY+PANEL.CFL)
LD D,(IY+PANEL.CFH)
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
SET 6,H
SET 7,H ; | 0xC000
PUSH HL
LD DE,FileHDR.Attr
ADD HL,DE
LD C,(HL) ; FileHDR.Attr (ä« £¨ ®¯¨á â¥«ï FAT ä ©« )
POP HL
BIT DIR.B_Dir,C ; íâ® ¤¨à ?
IF MARK_DIR
CALL NZ,COUNTING_DIR
ELSE
JR NZ,.MrFile1
ENDIF
; íâ® ä ©«
LD B,(HL) ; áâ à®¥ á®áâ®ï­¨¥ ¯®¬¥âª¨ ä ©« 
LD A,IXL
LD (HL),A ; ­®¢®¥ á®áâ®ï­¨¥ ¯®¬¥âª¨ ä ©« 
LD DE,WorkBuffer
PUSH BC
LD BC,FileHDR.SIZE
LDIR
IF MARK_DIR
LD HL,COUNTING_DIR.FILES_SIZE
LD DE,WorkBuffer + FileHDR.SizeBytes
LD BC,DWORD
LDIR
ENDIF
POP BC
.MrFile1 POP AF
SETPORT WINSP.CPU3,,0
IF MARK_DIR = 0
BIT DIR.B_Dir,C
RET NZ ; ¢ë室 ¥á«¨ ¤¨à 
ENDIF
LD A,B
CP IXL
RET Z ; ¢ë室 ¥á«¨ áâ à®¥ ¨ ­®¢®¥ á®áâ®ï­¨¥ ¯®¬¥âª¨ ᮢ¯ «¨
BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG)
JR NZ,.MarkFull
; ¯à¨ ªà âª®¬ ¯®ª §¥ ä ©«®¢
LD L,(IY+PANEL.CFL)
LD H,(IY+PANEL.CFH)
LD E,L
LD D,H
ADD HL,HL
ADD HL,DE
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD DE,PositTABLeft
JR Z,.L3
LD DE,PositTABRight
.L3 ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
LD B,0x00
EX DE,HL
LD A,IXL
OR A
PUSH AF
LD DE,(COLORP.INVERTPAPER + COLORI.INVERTINK) << 8 | (COLORP.INVERTPAPER + COLORI.INVSELFILES)
JR NZ,.L4
LD DE,(COLORP.INVERTPAPER + COLORI.INVSELFILES) << 8 | (COLORP.INVERTPAPER + COLORI.INVERTINK)
.L4 LD IX,8 << 8 + 48
DEC HL
DEC HL
CALL InvertRectan
POP AF
JR NZ,.MarkExit1
JR .MarkExit2
; ¯à¨ ¯®«­®¬ ¯®ª §¥ ä ©«®¢
.MarkFull LD L,(IY+PANEL.CFL)
LD H,(IY+PANEL.CFH)
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,0x003F
ADD HL,BC
LD C,L
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD HL,6
JR Z,.L5
LD HL,326
.L5 LD A,IXL
OR A
PUSH AF
LD DE,(COLORP.INVERTPAPER + COLORI.INVERTINK) << 8 | (COLORP.INVERTPAPER + COLORI.INVSELFILES)
JR NZ,.L6
LD DE,(COLORP.INVERTPAPER + COLORI.INVSELFILES) << 8 | (COLORP.INVERTPAPER + COLORI.INVERTINK)
.L6 LD IX,8 << 8 + 146
CALL InvertRectan
POP AF
JR Z,.MarkExit2
; ãáâ ­®¢ª  ¢ë¡®à ä ©« 
.MarkExit1 LD IX,WorkBuffer
LD L,(IY + PANEL.MFL)
LD H,(IY + PANEL.MFH)
INC HL
LD (IY + PANEL.MFL),L
LD (IY + PANEL.MFH),H ; ®¡­®¢«¥­¨¥ ª®«¨ç¥á⢠ ¯®¬¥ç¥­­ëå ä ©«®¢
LD L,(IX + FileHDR.SizeBytes)
LD H,(IX + FileHDR.SizeBytes + 1)
LD E,(IY + PANEL.MBL1)
LD D,(IY + PANEL.MBH1)
XOR A ; [ ] fat32
ADD HL,DE
LD (IY + PANEL.MBL1),L
LD (IY + PANEL.MBH1),H ; ®¡­®¢«¥­¨¥ à §¬¥à  ¯®¬¥ç¥­­ëå ä ©«®¢ ¡¨âë 15-0
LD L,(IX + FileHDR.SizeBytes + 2)
LD H,(IX + FileHDR.SizeBytes + 3)
; [ ] fat32
LD E,(IY + PANEL.MBL2)
LD D,(IY + PANEL.MBH2)
ADC HL,DE
; [ ] fat32
ADC A,(IY + PANEL.MBL3)
LD (IY + PANEL.MBL3),A ; ®¡­®¢«¥­¨¥ à §¬¥à  ¯®¬¥ç¥­­ëå ä ©«®¢ ¡¨âë 32-39
LD (IY + PANEL.MBL2),L
LD (IY + PANEL.MBH2),H ; ®¡­®¢«¥­¨¥ à §¬¥à  ¯®¬¥ç¥­­ëå ä ©«®¢ ¡¨âë 31-15
RET
; á­ï⨥ ¢ë¡®à  ä ©« 
.MarkExit2 LD IX,WorkBuffer
LD L,(IY + PANEL.MFL)
LD H,(IY + PANEL.MFH)
DEC HL
LD (IY + PANEL.MFL),L
LD (IY + PANEL.MFH),H
LD L,(IY + PANEL.MBL1)
LD H,(IY + PANEL.MBH1)
LD E,(IX + FileHDR.SizeBytes)
LD D,(IX + FileHDR.SizeBytes + 1)
XOR A
SBC HL,DE
LD (IY + PANEL.MBL1),L
LD (IY + PANEL.MBH1),H
LD L,(IY + PANEL.MBL2)
LD H,(IY + PANEL.MBH2)
LD E,(IX + FileHDR.SizeBytes + 2)
LD D,(IX + FileHDR.SizeBytes + 3)
SBC HL,DE
; [ ] fat32
ADC A,(IY + PANEL.MBL3)
LD (IY + PANEL.MBL3),A
LD (IY + PANEL.MBL2),L
LD (IY + PANEL.MBH2),H
RET
;[]==========================================================[]
UnMarkGroupR: CALL ResInvert
UnMarkGroupRN: LD HL,SetInvert
PUSH HL
SUB A
JR SelectGroup
MarkGroupR: CALL ResInvert
MarkGroupRN: LD HL,SetInvert
PUSH HL
LD A,0x01
SelectGroup: LD (SelMode),A
LD A,(IY+PANEL.EFL)
OR (IY+PANEL.EFH)
RET Z
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
MAKEWINDOW WINSUBOBJ.STORE
W_MAIN 208,81,224,62
W_FILL 4,2,216,10,COLORI.BLACK
W_TEXT 82,3,COLORI.WHITE,"Select mask"
W_BUTTON 32,42,72,14
W_TEXT 60,45,COLORP.HIGHGRAY,"Ok"
W_BUTTON 120,42,72,14
W_TEXT 140,45,COLORP.HIGHGRAY,"Cancel"
W_TEXT 10,25,COLORP.HIGHGRAY,"Mark mask:"
W_BORDER 70,22,134,12
W_FILL 72,23,130,10,COLORI.WHITE
W_END
LD IX,SMaskStr
LD HL,SMaskTab
CALL InputLine
WINDOWCLOSE
RET C
LD A,(MaskLen)
OR A
RET Z
LD B,A
LD HL,CrSMask
CorMask
IF CORR_FILENAME
LD A,(HL)
CALL CorrBigChar
LD (HL),A
ENDIF
INC HL
DJNZ CorMask
LD HL,CrSMask
LD DE,SelMask
CALL MakeMask
JR C,MarkGNext
LD HL,NORMmask
LD DE,CrSMask
LD BC,MASK_SIZE
LDIR
LD HL,CrSMask
LD DE,SelMask
JP MakeMask
MarkGNext
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
;!FIXIT ¯à®¢¥à¨âì ¤«ï íâ® ®­® ¨«¨ ­¥â SAFE_PORTY
SETPORT WINSP.Y_PORT,0xC0
LD IX,CPU3
LD HL,0xC000
LD DE,SelMask
EX AF,AF' ; [ ] fat32
EXX
LD L,(IY+PANEL.MBL1)
LD H,(IY+PANEL.MBH1)
LD E,(IY+PANEL.MBL2)
LD D,(IY+PANEL.MBH2)
LD A,(IY+PANEL.MBL3) ; [ ] FAT32
LD C,(IY+PANEL.MFL)
LD B,(IY+PANEL.MFH)
EXX
EX AF,AF' ; [ ] fat32
PUSH IY
LD IYL,0x00
SelMode EQU $-1
LD IYH,0x00
Select1 PUSH DE
BIT DIR.B_Dir,(IX + FileHDR.Attr)
JR NZ,Select8
LD A,IYL
CP (HL)
JR Z,Select8
PUSH HL
INC HL
LD B,8
Select2 LD A,(DE)
CP '?'
JR Z,Select3
CP (HL)
JR NZ,Select6
Select3 INC HL
INC DE
DJNZ Select2
INC HL
LD B,03
Select4 LD A,(DE)
CP '?'
JR Z,Select5
CP (HL)
JR NZ,Select6
Select5 INC HL
INC DE
DJNZ Select4
Select6 POP HL
JR NZ,Select8
LD IYH,0x01
LD A,IYL
LD (HL),A
OR A
CALL Z,SUB_SIZE
CALL NZ,ADD_SIZE
Select8: LD DE,FileHDR.SIZE
ADD HL,DE
ADD IX,DE
POP DE
LD A,(IX + FileHDR.Name)
OR A
JR NZ,Select1
LD A,IYH
EX AF,AF'
POP IY
EXX
LD (IY+PANEL.MBL1),L
LD (IY+PANEL.MBH1),H
LD (IY+PANEL.MBL2),E
LD (IY+PANEL.MBH2),D
LD (IY+PANEL.MBL3),A ; [ ] FAT32
LD (IY+PANEL.MFL),C
LD (IY+PANEL.MFH),B
EXX
POP AF
SETPORT WINSP.CPU3,,0
EX AF,AF'
OR A
RET Z
CALL PrintDIR
JP PrnFileInfo
SMaskStr: DEFB 0x0C,0x00,0x00,0x00
MaskLen: DEFB 0x03
DEFW 282,106
DEFW 104
DEFB 0xF0
CrSMask: DEFB "*.*"
DB 10 DUP 0
SelMask: DEFB "???????????"
MakeMask LD BC,0x0902
SMaskLp LD A,(HL)
CP '!'
RET C
CP '\"'
RET Z
CP '*'
JR Z,SMask1
CP '+'
RET Z
CP ','
RET Z
CP '.'
JR Z,SMask2
CP '/'
RET Z
CP ':'
RET Z
CP ';'
RET Z
CP '<'
RET Z
CP '='
RET Z
CP '>'
RET Z
CP '['
RET Z
CP '\\'
RET Z
CP ']'
RET Z
CP '|'
RET Z
IF CORR_FILENAME
CALL CorrBigChar
ENDIF
LD (DE),A
INC HL
INC DE
DJNZ SMaskLp
AND A
RET
SMask1 LD A,'?'
INC HL
DJNZ SMask11
AND A
RET
SMask11 LD (DE),A
INC DE
DJNZ SMask11
INC B
JR SMaskLp
SMask2 LD A,' '
INC HL
DJNZ SMask21
LD B,0x04
DEC C
JR NZ,SMaskLp
AND A
RET
SMask21 LD (DE),A
INC DE
DJNZ SMask21
LD B,0x04
DEC C
JR NZ,SMaskLp
AND A
RET
;[]==========================================================[]
SelectAllR: CALL ResInvert
SelectAllRN: LD HL,SetInvert
PUSH HL
LD A,(IY+PANEL.EFL)
OR (IY+PANEL.EFH)
RET Z
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
SETPORT WINSP.Y_PORT,0xC0
LD IX,CPU3
LD BC,FileHDR.SIZE
EX AF,AF' ; [ ] fat32
SUB A
LD L,A
LD H,L
LD E,L
LD D,H
EXX
LD L,A
LD H,L
EXX
EX AF,AF' ; [ ] fat32
.loop: BIT DIR.B_Dir,(IX + FileHDR.Attr) ;!HARDCODE DIRECTORY
JR NZ,.SelAll1
SET FileHDR.B_MARK,(IX + FileHDR.Flag)
LD C,(IX + FileHDR.SizeBytes)
LD B,(IX + FileHDR.SizeBytes + 1)
EX AF,AF' ; [ ] fat32
ADD HL,BC
LD C,(IX + FileHDR.SizeBytes + 2)
LD B,(IX + FileHDR.SizeBytes + 3)
EX DE,HL
ADC HL,BC
EX DE,HL
ADC A,0
EX AF,AF' ; [ ] fat32
EXX
INC HL
EXX
LD BC,FileHDR.SIZE
.SelAll1: ADD IX,BC
LD A,(IX + FileHDR.Name)
OR A
JR NZ,.loop
POP AF
SETPORT WINSP.CPU3,,0
EXX
LD E,(IY+PANEL.MFL)
LD D,(IY+PANEL.MFH)
OR A
SBC HL,DE
RET Z
ADD HL,DE
LD (IY+PANEL.MFL),L
LD (IY+PANEL.MFH),H
EXX
LD (IY+PANEL.MBL1),L
LD (IY+PANEL.MBH1),H
LD (IY+PANEL.MBL2),E
LD (IY+PANEL.MBH2),D
; [ ] FAT32
EX AF,AF'
LD (IY+PANEL.MBL3),A
CALL PrintDIR
JP PrnFileInfo
;[]==========================================================[]
UnSelectAllR: CALL ResInvert
UnSelectAllRN: LD HL,SetInvert
PUSH HL
LD A,(IY+PANEL.EFL)
OR (IY+PANEL.EFH)
RET Z
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
LD A,(IY+PANEL.MFL)
OR (IY+PANEL.MFH)
RET Z
PUSH IY
POP HL
LD BC,PANEL.MFL
ADD HL,BC
LD B,PANEL.FILEMASK - PANEL.MFL
.L2 LD (HL),0
INC HL
DJNZ .L2
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
SETPORT WINSP.Y_PORT,0xC0
LD HL,CPU3
LD BC,FileHDR.SIZE + 1
UnSelA1: RES 0,(HL)
ADD HL,BC
LD A,(HL)
DEC HL
OR A
JR NZ,UnSelA1
POP AF
SETPORT WINSP.CPU3,,0
CALL PrintDIR
JP PrnFileInfo
;[]==========================================================[]
InvertSelectR: CALL ResInvert
InvertSelectRN: LD HL,SetInvert
PUSH HL
LD A,(IY+PANEL.EFL)
OR (IY+PANEL.EFH)
RET Z
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET NZ
GETPORT WINSP.CPU3
PUSH AF
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD A,(RAMPAGES.LEFTPANEL)
JR Z,.L1
LD A,(RAMPAGES.RIGHTPANEL)
.L1
SETPORT WINSP.CPU3,,0
SETPORT WINSP.Y_PORT,0xC0
LD IX,0xC000
LD DE,FileHDR.SIZE
LD B,0x00
EX AF,AF' ; [ ] fat32
EXX
LD L,(IY + PANEL.MBL1)
LD H,(IY + PANEL.MBH1)
LD E,(IY + PANEL.MBL2)
LD D,(IY + PANEL.MBH2)
LD A,(IY + PANEL.MBL3) ; [ ] FAT32
LD C,(IY + PANEL.MFL)
LD B,(IY + PANEL.MFH)
EXX
EX AF,AF' ; [ ] fat32
.loop: BIT DIR.B_Dir,(IX + FileHDR.Attr) ;!HARDCODE Dir
JR NZ,.InvSel3
LD B,FileHDR.M_MARK
LD A,(IX + FileHDR.Flag)
XOR B
LD (IX + FileHDR.Flag),A
CALL Z,SUB_SIZE
CALL NZ,ADD_SIZE
.InvSel3: ADD IX,DE
LD A,(IX + FileHDR.Name)
OR A
JR NZ,.loop
POP AF
SETPORT WINSP.CPU3,,0
EX AF,AF' ; [ ] fat32
EXX
LD (IY + PANEL.MBL1),L
LD (IY + PANEL.MBH1),H
LD (IY + PANEL.MBL2),E
LD (IY + PANEL.MBH2),D
LD (IY + PANEL.MBL3),A ; [ ] FAT32
LD (IY + PANEL.MFL),C
LD (IY + PANEL.MFH),B
EXX
LD A,B
OR A
RET Z
CALL PrintDIR
JP PrnFileInfo
ADD_SIZE: EX AF,AF' ; [ ] fat32
EXX
PUSH BC
LD C,(IX + FileHDR.SizeBytes)
LD B,(IX + FileHDR.SizeBytes + 1)
ADD HL,BC
LD C,(IX + FileHDR.SizeBytes + 2)
LD B,(IX + FileHDR.SizeBytes + 3)
EX DE,HL
ADC HL,BC
EX DE,HL
ADC A,0 ; [ ] fat32
POP BC
INC BC
EXX
EX AF,AF' ; [ ] fat32
RET
SUB_SIZE: EX AF,AF' ; [ ] fat32
EXX
PUSH BC
LD C,(IX + FileHDR.SizeBytes)
LD B,(IX + FileHDR.SizeBytes + 1)
OR A
SBC HL,BC
LD C,(IX + FileHDR.SizeBytes + 2)
LD B,(IX + FileHDR.SizeBytes + 3)
EX DE,HL
SBC HL,BC
EX DE,HL
SBC A,0 ; [ ] fat32
POP BC
DEC BC
EXX
EX AF,AF'
RET
IF MARK_DIR
; ¯®¤áç¥â ¢ ¡ ©â å à §¬¥à  ®â¬¥ç¥­­®© ¤¨à¥ªâ®à¨¨
COUNTING_DIR PUSH IX
PUSH IY
PUSH HL
PUSH BC
GETPORT WINSP.CPU3
PUSH AF
PUSH HL
XOR A
LD H,A
LD L,A
LD IXH,A ; ®¡­ã«¥­¨¥ ã஢­ï ¢å®¦¤¥­¨ï ¢ ¤¨àë
LD (.FILES_SIZE),HL
LD (.FILES_SIZE + 2),HL ; ®¡­ã«¥­¨¥ à §¬¥à  ¤¨àë
LD HL,CPU3
LD (.CURR_DIRNAME),HL
; á®åà ­¥­¨¥ ⥪ã饣® ¯ã⨠¤«ï ¢®§¢à â 
SPDSS DSSF.CURDISK
LD HL,WorkBuffer + 0x300 ; á®åà ­¥­ë© ¯ãâì ¤«ï ¢®§¢à â 
ADD A,'A'
LD (HL),A
INC HL
LD (HL),':'
INC HL
SPDSS DSSF.CURDIR
POP DE
JR C,.END_COUNT
; ¢å®¤ ¢ ¤¨à¥ªâ®à¨î
LD HL,FileHDR.Name
ADD HL,DE
LD DE,.DIR_NAME
PUSH DE
LD BC,FileHDR.Name_Size
LDIR ; § ¡à «¨ ¨¬ï ¤¨àë ¤«ï ¨§¬¥à¥­¨ï
LD A,(RAMPAGES.FLX)
SETPORT WINSP.CPU3,,0
CALL .ADD_2DOT ; ¢®§¢à â ¢ ¯à¥¤ë¤ãéãî ¤¨àã
POP HL
LD DE,(.CURR_DIRNAME)
LD BC,FileHDR.Name_Size
LDIR ; ¨¬ï ¤¨àë ¤«ï ¢å®¤ 
LD (.CURR_DIRNAME),DE
XOR A
LD (DE),A
CALL .SET_PATH ; ãáâ ­®¢ª  ⥪ã饣® ¯ãâ¨
INC IXH ; á«¥¤ãî騩 ã஢¥­ì ¤¨àë
.CONTINUE CALL .ADD_2DOT
CALL .COUNT_FILES
LD A,IXL
AND A ; §¤¥áì ¤¨àë ¥áâì?
JR Z,.PREV_DIR ; ¤¨àë ­¥ ­ ©¤¥­ë
CALL .SET_PATH ; ¢å®¤ ¢ ¤¨àã ¨§ ᯨ᪠
INC IXH ; á«¥¤ãî騩 ã஢¥­ì ¤¨àë
JR .CONTINUE
; ¢ë室 ¢ ¯à¥¤ë¤ãéãî ¤¨àã
.PREV_DIR CALL .OUT_DIR
LD A,IXH ; ã஢¥­ì ¤¨àë?
AND A
JR Z,.END_COUNT
CALL .GET_NAME
CALL .GET_NAME
LD HL,(.CURR_DIRNAME)
LD DE,-FileHDR.Name_Size
ADD HL,DE
LD A,(HL)
CP '.'
JR Z,.PREV_DIR
CALL .SET_PATH
INC IXH ; á«¥¤ãî騩 ã஢¥­ì ¤¨àë
JR .CONTINUE
; ¢®§¢à â ⥪ã饣® ¯ãâ¨
.END_COUNT POP AF
SETPORT WINSP.CPU3,,0
LD HL,WorkBuffer + 0x300 ; á®åà ­¥­ë© ¯ãâì ¤«ï ¢®§¢à â 
SPDSS DSSF.CHDIR
POP BC
POP HL
POP IY
POP IX
RET
.GET_NAME LD HL,(.CURR_DIRNAME)
LD (HL),0
LD DE,-FileHDR.Name_Size
ADD HL,DE
LD (.CURR_DIRNAME),HL
RET
.OUT_DIR DEC IXH ; ¯à¥¤ë¤ã騩 ã஢¥­ì ¤¨àë
LD HL,.RET_DIR
JR .SP1
; ¯¥à¥å®¤ ¢ ¤¨àã ¨§ ᯨ᪠
.SET_PATH LD HL,(.CURR_DIRNAME)
LD DE,-FileHDR.Name_Size
ADD HL,DE
LD DE,.DIR_NAME
PUSH DE
LD BC,FFIRST.Name_Size
LDIR
POP HL
.SP1 PUSH IX
SPDSS DSSF.CHDIR
SPDSS DSSF.CURDISK
LD HL,WorkBuffer + 0x200
ADD A,'A'
LD (HL),A
INC HL
LD (HL),':'
INC HL
SPDSS DSSF.CURDIR
POP IX
RET
; ¤®¡ ¢«¥­¨¥ ¨¬¥­¨ ¤¨àë ¤«ï ¢ë室  ¢ ¯à¥¤ë¤ãéãî ¤¨àã
.ADD_2DOT PUSH HL
LD HL,.RET_DIR
LD DE,(.CURR_DIRNAME)
LD BC,FFIRST.Name_Size
LDIR
LD (.CURR_DIRNAME),DE
POP HL
RET
; ¯¥à¥áç¨â뢠¥¬ à §¬¥àë ä ©«®¢ ¢ ⥪ã饩 ¤¨à¥ªâ®à¨¨
; ¨ ¢ë£à¥¡ ¥¬ ¨¬¥­  ¤¨à ¢ â ¡«¨çªã
.COUNT_FILES LD IXL,0 ; ª®«¨ç¥á⢮ ¤¨à ¢ ⥪ã饩 ¤¨à¥
CALL .F_FIRST ; ¨é¥¬ ¯¥à¢ë© ®¯¨á â¥«ì
RET C
.L2 LD DE,FFIRST.Attr
ADD HL,DE
LD A,(HL)
SBC HL,DE
BIT DIR.B_Dir,A
JR Z,.L4
; ¤«ï ¤¨àë ª®¯¨à㥬 ¨¬ï ¢ â ¡«¨çªã
LD DE,FFIRST.Name
ADD HL,DE
LD A,(HL)
CP '.' ; . ¨ .. ¯à®¯ã᪠¥¬
JR Z,.L5
LD DE,(.CURR_DIRNAME)
LD BC,FFIRST.Name_Size
LDIR
LD (.CURR_DIRNAME),DE
INC IXL
JR .L5
; ¤«ï ä ©«  ¤®¡ ¢«ï¥¬ ¤«¨­ã
.L4 LD DE,FFIRST.FileSize
ADD HL,DE
CALL GET_DWORD ; ¢§ïâì à §¬¥à ¨§ ®¯¨á â¥«ï
LD HL,.FILES_SIZE
PUSH HL
CALL BCDEHLP ; ¤®¡ ¢¨«¨ ª ⥪ã饬ã à §¬¥àã
POP HL
CALL SET_DWORD ; ¯®«®¦¨«¨ ®¡à â­®
.L5 CALL .F_NEXT
JR NC,.L2
RET
; ¯®¨áª ¯¥à¢®£® ®¯¨á â¥«ï
.F_FIRST LD A, DIR.M_Archive + \
DIR.M_System + \
DIR.M_Hidden + \
DIR.M_ReadOnly + \
DIR.M_Dir
.FFF1 LD HL,.FILES_MASK
LD DE,WorkBuffer + 0x300
PUSH DE
PUSH IX
SPDSS DSSF.F_FIRST,0
POP IX
POP HL
RET
; ¯®¨áª á«¥¤ãî饣® ®¯¨á â¥«ï
.F_NEXT LD DE,WorkBuffer + 0x300
PUSH DE
PUSH IX
SPDSS DSSF.F_NEXT
POP IX
POP HL
RET
.FILES_SIZE DD 0
.FILES_MASK DZ "*.*"
.RET_DIR DZ ".. "
.DIR_NAME DZ " "
.CURR_DIRNAME DW 0
GetDirSizeR CALL COUNTING_DIR
LD HL,COUNTING_DIR.FILES_SIZE
JP GET_DWORD
ENDIF