добавлены ключи /f и /p для команды DIR

This commit is contained in:
Anatoliy Belyanskiy 2023-11-26 06:28:22 +10:00
parent ce4125e4c6
commit c5ca8e7597
8 changed files with 136 additions and 92 deletions

View File

@ -9,15 +9,21 @@ cmd_dir:
; § ­ã«ï¥¬ ¢á¥ ¯ à ¬¥âàë ­  áâ à⥠; § ­ã«ï¥¬ ¢á¥ ¯ à ¬¥âàë ­  áâ àâ¥
xor a xor a
ld (read_disk_info.full),a ld (read_disk_info.full),a
ld (.key_p),a
; ¢ë¯®«­ï¥¬/­ áâà ¨¢ ¥¬ ¢á¥ ­ ©¤¥­­ë¥ ¯ à ¬¥âàë ¢ áâப¥ ; ¢ë¯®«­ï¥¬/­ áâà ¨¢ ¥¬ ¢á¥ ­ ©¤¥­­ë¥ ¯ à ¬¥âàë ¢ áâப¥
ld hl,cmd_dir_options
LD C,256-3 ;!HARDCODE ¤«¨­  áâப¨ á ª®¬ ­¤®© LD C,256-3 ;!HARDCODE ¤«¨­  áâப¨ á ª®¬ ­¤®©
.parse: call RUN_OPTION .parse: ld hl,cmd_dir_options
jr nc,.skip call RUN_OPTION
jr nc,.end_opt
jp (hl) jp (hl)
; .end_opt:
; ¢ë¢®¤¨¬ áâப㠮 à áçñ⥠᢮¡®¤­®£® ¬¥áâ  â ª, ç⮡ ®­  § âñà« áì
ld a,(read_disk_info.full)
and a
jr z,.skip
LD DE,MAIN_MSG.CALCULATING
CALL MESSAGE
.skip: ld c,Dss.CurDisk ; ã§­ âì ⥪. ¤¨áª .skip: ld c,Dss.CurDisk ; ã§­ âì ⥪. ¤¨áª
RST ToDSS RST ToDSS
ADD A,"A" ADD A,"A"
@ -26,8 +32,6 @@ cmd_dir:
call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª  call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª 
; ;
pop de pop de
ld a,#ff
ld (.key_p),a
ld hl,0 ld hl,0
ld (D88DC),hl ld (D88DC),hl
ld (D88DE),hl ld (D88DE),hl
@ -205,10 +209,10 @@ cmd_dir:
;ld (de),a ;ld (de),a
; ;
; ;
LD A,(read_disk_info.full) ;LD A,(read_disk_info.full)
OR A ;OR A
ld hl,has_not_full_info ;ld hl,has_not_full_info
JR Z,.skip_full_space ;JR Z,.skip_full_space
; ;
ld hl,(free_space) ; ¬«. à §àï¤ ld hl,(free_space) ; ¬«. à §àï¤
exx exx
@ -217,13 +221,20 @@ cmd_dir:
CALL Size2Char CALL Size2Char
ld hl,T8B46 ; "0 000 000 000" ld hl,T8B46 ; "0 000 000 000"
; ;
.skip_full_space: ;.skip_full_space:
ld de,PRM4 ; ªã¤  ld de,PRM4 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢. call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.
; ;
; ;
ld de,MAIN_MSG.DIR_2 ; ¨­¤¥ªá " %1 file(s) %2 bytes" ld de,MAIN_MSG.DIR_2 ; ¨­¤¥ªá " %1 file(s) %2 bytes"
jp MESSAGE ; ¢ë¢¥á⨠áâபã CALL MESSAGE ; ¢ë¢¥á⨠áâபã
ld a,(read_disk_info.full)
and a
ld de,MAIN_MSG.DIR_4 ;
jp nz,MESSAGE
ld de,MAIN_MSG.CRLF ;
jp MESSAGE
.Print_Header: .Print_Header:
; %1 ; %1
@ -243,7 +254,7 @@ cmd_dir:
ld de,PRM3 ; 16 ¡ãä¥à ld de,PRM3 ; 16 ¡ãä¥à
CALL copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬) CALL copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
; ;
ld de,MAIN_MSG.DIR_1 ; ¨­¤¥ªá "Volume in drive %1..." ;!HARDCODE ­®¬¥à áâப¨ MSG0 ld de,MAIN_MSG.DIR_1 ; ¨­¤¥ªá "Volume in drive %1..."
JP MESSAGE ; ¢ë¢¥á⨠áâபã JP MESSAGE ; ¢ë¢¥á⨠áâபã
; ;
; ;
@ -625,7 +636,7 @@ read_disk_info:
.good_label: .good_label:
POP HL POP HL
PUSH HL ; «¨è­¥¥ PUSH HL ; «¨è­¥¥
;!FIXIT ᤥ« âì ç¥à¥§  à£ã¬¥­âë %1-%9
; ¥áâì ¬¥âª  ; ¥áâì ¬¥âª 
volume_label: volume_label:
pop DE ; «¨è­¥¥ pop DE ; «¨è­¥¥
@ -676,46 +687,46 @@ volume_string_no:
db "has no label",0 db "has no label",0
volume_string_yes: volume_string_yes:
db "has label",0 db "has label",0
has_not_full_info: ; has_not_full_info:
db ' (?)',0 ; db ' (?)',0
; ;
cmd_dir_options: cmd_dir_options:
; [ ] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬) ; [ ] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
DB 'f' : DW cmd_dir_freeSpace DB 'f' : DW cmd_dir_freeSpace
;DB 'p' : DW cmd_dir_pause DB 'p' : DW cmd_dir_pause
.Size EQU ($-cmd_dir_options)/3 .Size EQU ($-cmd_dir_options)/3
.paramLength equ 3 .paramLength equ 3
; ;
; ;
cmd_dir_freeSpace: cmd_dir_freeSpace:
PUSH DE ;PUSH DE
PUSH BC ;PUSH BC
; § â¨à ¥¬ ­ ©¤¥­ë© ª«îç ; § â¨à ¥¬ ­ ©¤¥­ë© ª«îç
ld A,'/' ; ld A,'/'
ex de,hl ; ex de,hl
ld bc,4 ; ld bc,4
CPDR ; CPDR
inc hl ; inc hl
ld (hl),' ' ; ld (hl),' '
inc hl ; inc hl
ld (hl),' ' ; ld (hl),' '
; áâ ¢¨¬ ®¯æ¨î ¤«ï API DSS DskInfo ; áâ ¢¨¬ ®¯æ¨î ¤«ï API DSS DskInfo
ld a,1 ld a,1
ld (read_disk_info.full),a ld (read_disk_info.full),a
; ¢ë¢®¤¨¬ áâப㠮 à áçñ⥠᢮¡®¤­®£® ¬¥áâ  â ª, ç⮡ ®­  § âñà« áì ; ; ¢ë¢®¤¨¬ áâப㠮 à áçñ⥠᢮¡®¤­®£® ¬¥áâ  â ª, ç⮡ ®­  § âñà« áì
LD DE,MAIN_MSG.CALCULATING ; LD DE,MAIN_MSG.CALCULATING
CALL MESSAGE ; CALL MESSAGE
; ¢®§¢à é ¥¬áï ¢ 横« ; ¢®§¢à é ¥¬áï ¢ 横«
POP BC ;POP BC
POP DE ;POP DE
jp cmd_dir.parse jp cmd_dir.parse
; ;
; cmd_dir_pause: cmd_dir_pause:
; xor a ld a,#ff
; ld (cmd_dir.key_p),a ld (cmd_dir.key_p),a
; jp cmd_dir.parse jp cmd_dir.parse
/////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////
Size2Char: Size2Char:
call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤ call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤

View File

@ -34,7 +34,7 @@ A862E: ld a,(echo_mode) ; 䫠
or a or a
ld de,7 ; ¨­¤¥ªá "on" ld de,7 ; ¨­¤¥ªá "on"
jr nz,$+5 ; false jr nz,$+5 ; false
ld de,8 ; 身丰花 "off" ld de,MAIN_MSG.OFF ; 身丰花 "off"
call FMESAGE ; ­ ©â¨ áâப㠯® ¨­¤¥ªáã call FMESAGE ; ­ ©â¨ áâப㠯® ¨­¤¥ªáã
ld de,PRM1 ; ªã¤  ( à£ã¬¥­â %1) ld de,PRM1 ; ªã¤  ( à£ã¬¥­â %1)
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢. call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.

View File

@ -1,46 +0,0 @@
;!TODO ­¥ § ¡ëâì § ¬¥­¨âì æ¨äàë ­  í⨠¬¥âª¨
MAIN_MSG:
.DIR_1 EQU 0
.VERSION EQU 1
.DATE EQU 2
.TIME EQU 3
.PAUSE EQU 4
.INVALID EQU 5
.ECHO EQU 6
.ON EQU 7
.OFF EQU 8
.DIR_2 EQU 9
.DIR_3 EQU 10
.HELP EQU 11
.CALCULATING EQU 12
.CRLF EQU 13
.TABLE: db 0
/* 0 */ db "Volume in drive %1 %4 %5",CR,LF
db "Volume Serial Number is %2",CR,LF
db CR,LF,"Directory of %3",CR,LF,LF,0
/* 1 */ db "Estex DSS version %1. Shell version %2.",CR,LF,0 ;R13
/* 2 */ db "Current date: %1",CR,LF,0
/* 3 */ db "Current time: %1",CR,LF,0
/* 4 */ db "Press any key to continue . . .",CR,0
/* 5 */ db "Invalid parametr",CR,LF,0
/* 6 */ db "Echo is %1",CR,LF,0
/* 7 */ db "on",0
/* 8 */ db "off",0
/* 9 */ db " %1 File(s) %2 bytes",CR,LF
db " %3 Dir(s) %4 bytes free",CR,LF,LF,0
; db " %3 Dir(s)",CR,LF,LF,0
/* 10 */ db "%1 %2 %3 %4 - %5",CR,LF,0 ;FILENAME EXT SIZE DATE TIME
/* 11 */ DB "COMMANDS:",CR,LF,CR,LF
DB "DIR REN | RENAME PATH HELP ",CR,LF
DB "CD | CHDIR DEL | ERASE SET VER | VERSION ",CR,LF
DB "MD | MKDIR TIME ECHO EXIT ",CR,LF
DB "RD | RMDIR DATE CLS REBOOT ",CR,LF,LF,0
/* 12 */ DB "Calculating free space...",CR,0
/* 13 */ DB CR,LF,0
;R11
DB 0
DZ "Unknown command"
;
.TABLE.Size EQU $-.TABLE
;

View File

@ -0,0 +1,59 @@
MACRO stN Name?
@Name? EQU txtCounter
!txtCounter=txtCounter+1
ENDM
MAIN_MSG:
; ¤«ï 㤮¡á⢠:
.DIR_1 EQU .DIR_1_
.VERSION EQU .VERS_
.DATE EQU .DATE_
.TIME EQU .TIME_
.PAUSE EQU .PAUSE_
.INVALID EQU .INV_
.ECHO EQU .ECHO_
.ON EQU .ON_
.OFF EQU .OFF_
.DIR_2 EQU .DIR_2_
.DIR_3 EQU .DIR_3_
.DIR_4 EQU .DIR_4_
.HELP EQU .HELP_
.CALCULATING EQU .CALC_
.CRLF EQU .CRLF_
;
!txtCounter DEFL 0
;
.TABLE: : db 0
stN .DIR_1_ : db "Volume in drive %1 %4 %5",CR,LF
db "Volume Serial Number is %2",CR,LF
db CR,LF,"Directory of %3",CR,LF,LF,0
stN .VERS_ : db "Estex DSS version %1. Shell version %2.",CR,LF,0 ;R13
stN .DATE_ : db "Current date: %1",CR,LF,0
stN .TIME_ : db "Current time: %1",CR,LF,0
stN .PAUSE_ : db "Press any key to continue . . .",CR,0
stN .INV_ : db "Invalid parametr",CR,LF,0
stN .ECHO_ : db "Echo is %1",CR,LF,0
stN .ON_ : db "on",0
stN .OFF_ : db "off",0
stN .DIR_2_ : db " %1 File(s) %2 bytes",CR,LF
db " %3 Dir(s) ",0
stN .DIR_4_ : db "%4 bytes free",CR,LF,0
; db " %3 Dir(s) %4 bytes free",CR,LF,LF,0
; : db " %3 Dir(s)",CR,LF,LF,0
stN .DIR_3_ : db "%1 %2 %3 %4 - %5",CR,LF,0 ;FILENAME EXT SIZE DATE TIME
stN .HELP_ : db "COMMANDS:",CR,LF,CR,LF
db "DIR REN | RENAME PATH HELP ",CR,LF
db "CD | CHDIR DEL | ERASE SET VER | VERSION ",CR,LF
db "MD | MKDIR TIME ECHO EXIT ",CR,LF
db "RD | RMDIR DATE CLS REBOOT ",CR,LF,LF,0
stN .CALC_ : db "Calculating free space...",CR,0
stN .CRLF_ : db CR,LF,0
; ;R11
db 0
DZ "Unknown command"
; ;
.TABLE.Size EQU $-.TABLE
;
!txtCounter=0
;

View File

@ -82,10 +82,10 @@ RUN_OPTION:
JR Z,.good JR Z,.good
AND A AND A
JR NZ,RUN_OPTION.loop JR NZ,RUN_OPTION.loop
LD C,1 ;LD C,1
; ;
.good: push hl .good: dec hl
dec hl push hl
ld b,cmd_dir_options.Size ;!HARDCODE ld b,cmd_dir_options.Size ;!HARDCODE
ex de,hl ex de,hl
ld a,(de) ld a,(de)
@ -100,7 +100,27 @@ RUN_OPTION:
pop hl pop hl
jr RUN_OPTION jr RUN_OPTION
; found ; found
.found: pop de .found: ; § â¨à ¥¬ ­ ©¤¥­ë© ª«îç
pop de
ex de,hl
ld (hl),' '
dec hl
ld (hl),' '
inc hl
inc hl
inc hl
ex de,hl
;ld A,'/'
;ex de,hl
;ld bc,4
;CPDR
;inc hl
;ld (hl),' '
;inc hl
;ld (hl),' '
;inc hl
;ex de,hl
;
LD B,C LD B,C
inc hl inc hl
ld a,(hl) ld a,(hl)
@ -108,6 +128,6 @@ RUN_OPTION:
ld h,(hl) ld h,(hl)
ld l,a ld l,a
scf ; ¬ àª¥à ®¯®§­ ­®© ®¯æ¨¨ scf ; ¬ àª¥à ®¯®§­ ­®© ®¯æ¨¨
ret ret
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////

View File

@ -525,8 +525,8 @@ T8C24: db "OFF",0
include 'batch.asm' ; ¯ àᨭ£ bat-ä ©«®¢ include 'batch.asm' ; ¯ àᨭ£ bat-ä ©«®¢
include 'exec.asm' ; ¢ë¯®«­. ¢¢¥¤. ª®¬ ­¤ á ª®­á®«¨ include 'exec.asm' ; ¢ë¯®«­. ¢¢¥¤. ª®¬ ­¤ á ª®­á®«¨
include 'procedures/print.asm' ; ä㭪樨 ¢ë¢®¤  á®®¡é¥­¨© include 'procedures/print.asm' ; ä㭪樨 ¢ë¢®¤  á®®¡é¥­¨©
include 'messages/errors.asm' ; á®®¡é¥­¨ï ®¡ ®è¨¡ª å include 'messages/errors_txt.asm' ; á®®¡é¥­¨ï ®¡ ®è¨¡ª å
include 'messages/main.asm' ; á®®¡é¥­¨ï include 'messages/main_txt.asm' ; á®®¡é¥­¨ï
include 'procedures/parsers.asm' ; ä㭪樨 ¯à®ç¥á뢠­¨ï ¨ ¢ë¡®à  include 'procedures/parsers.asm' ; ä㭪樨 ¯à®ç¥á뢠­¨ï ¨ ¢ë¡®à 
include 'procedures/math.asm' ; ä㭪樨 ¬ â¥¬ â¨ç¥áª¨¥ include 'procedures/math.asm' ; ä㭪樨 ¬ â¥¬ â¨ç¥áª¨¥

View File

@ -1 +1 @@
201 259