diff --git a/SHELL/Commands/DIR.ASM b/SHELL/Commands/DIR.ASM index 54b02cb..f295c1e 100644 --- a/SHELL/Commands/DIR.ASM +++ b/SHELL/Commands/DIR.ASM @@ -9,15 +9,21 @@ cmd_dir: ; зануляем все параметры на старте xor a ld (read_disk_info.full),a - + ld (.key_p),a ; выполняем/настраиваем все найденные параметры в строке - ld hl,cmd_dir_options LD C,256-3 ;!HARDCODE длина строки с командой -.parse: call RUN_OPTION - jr nc,.skip +.parse: ld hl,cmd_dir_options + call RUN_OPTION + jr nc,.end_opt 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 ; узнать тек. диск RST ToDSS ADD A,"A" @@ -26,8 +32,6 @@ cmd_dir: call read_disk_info ; прочитать метку и серийный номер диска ; pop de - ld a,#ff - ld (.key_p),a ld hl,0 ld (D88DC),hl ld (D88DE),hl @@ -205,10 +209,10 @@ cmd_dir: ;ld (de),a ; ; - LD A,(read_disk_info.full) - OR A - ld hl,has_not_full_info - JR Z,.skip_full_space + ;LD A,(read_disk_info.full) + ;OR A + ;ld hl,has_not_full_info + ;JR Z,.skip_full_space ; ld hl,(free_space) ; мл. разряд exx @@ -217,13 +221,20 @@ cmd_dir: CALL Size2Char ld hl,T8B46 ; "0 000 000 000" ; -.skip_full_space: +;.skip_full_space: ld de,PRM4 ; куда call ncopy_string ; скопир. строку (с нулем), макс.15 симв. ; ; 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: ; %1 @@ -243,7 +254,7 @@ cmd_dir: ld de,PRM3 ; 16 буфер 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 ; вывести строку ; ; @@ -625,7 +636,7 @@ read_disk_info: .good_label: POP HL PUSH HL ; лишнее -;!FIXIT сделать через аргументы %1-%9 + ; есть метка volume_label: pop DE ; лишнее @@ -676,46 +687,46 @@ volume_string_no: db "has no label",0 volume_string_yes: db "has label",0 -has_not_full_info: - db ' (?)',0 +; has_not_full_info: +; db ' (?)',0 ; cmd_dir_options: ; [ ] параметр /F - вывод количества свободного места на диске (тормозит, поэтому параметром) DB 'f' : DW cmd_dir_freeSpace - ;DB 'p' : DW cmd_dir_pause + DB 'p' : DW cmd_dir_pause .Size EQU ($-cmd_dir_options)/3 .paramLength equ 3 ; ; cmd_dir_freeSpace: - PUSH DE - PUSH BC + ;PUSH DE + ;PUSH BC ; затираем найденый ключ - ld A,'/' - ex de,hl - ld bc,4 - CPDR - inc hl - ld (hl),' ' - inc hl - ld (hl),' ' + ; ld A,'/' + ; ex de,hl + ; ld bc,4 + ; CPDR + ; inc hl + ; ld (hl),' ' + ; inc hl + ; ld (hl),' ' ; ставим опцию для API DSS DskInfo ld a,1 ld (read_disk_info.full),a - ; выводим строку о расчёте свободного места так, чтоб она затёрлась - LD DE,MAIN_MSG.CALCULATING - CALL MESSAGE + ; ; выводим строку о расчёте свободного места так, чтоб она затёрлась + ; LD DE,MAIN_MSG.CALCULATING + ; CALL MESSAGE ; возвращаемся в цикл - POP BC - POP DE + ;POP BC + ;POP DE jp cmd_dir.parse ; -; cmd_dir_pause: -; xor a -; ld (cmd_dir.key_p),a -; jp cmd_dir.parse +cmd_dir_pause: + ld a,#ff + ld (cmd_dir.key_p),a + jp cmd_dir.parse /////////////////////////////////////////////////////////////////////////////////////// Size2Char: call A8A8F ; десятичный 32-х разрядный вывод diff --git a/SHELL/Commands/ECHO.ASM b/SHELL/Commands/ECHO.ASM index 5974267..9e030b2 100644 --- a/SHELL/Commands/ECHO.ASM +++ b/SHELL/Commands/ECHO.ASM @@ -34,7 +34,7 @@ A862E: ld a,(echo_mode) ; фла or a ld de,7 ; индекс "on" jr nz,$+5 ; false - ld de,8 ; индекс "off" + ld de,MAIN_MSG.OFF ; индекс "off" call FMESAGE ; найти строку по индексу ld de,PRM1 ; куда (аргумент %1) call ncopy_string ; скопир. строку (с нулем), макс.15 симв. diff --git a/SHELL/Messages/errors.asm b/SHELL/Messages/errors_txt.asm similarity index 100% rename from SHELL/Messages/errors.asm rename to SHELL/Messages/errors_txt.asm diff --git a/SHELL/Messages/main.asm b/SHELL/Messages/main.asm deleted file mode 100644 index 9754937..0000000 --- a/SHELL/Messages/main.asm +++ /dev/null @@ -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 -; \ No newline at end of file diff --git a/SHELL/Messages/main_txt.asm b/SHELL/Messages/main_txt.asm new file mode 100644 index 0000000..e330bea --- /dev/null +++ b/SHELL/Messages/main_txt.asm @@ -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 +; \ No newline at end of file diff --git a/SHELL/Procedures/parsers.asm b/SHELL/Procedures/parsers.asm index 826fe41..5cd6346 100644 --- a/SHELL/Procedures/parsers.asm +++ b/SHELL/Procedures/parsers.asm @@ -82,10 +82,10 @@ RUN_OPTION: JR Z,.good AND A JR NZ,RUN_OPTION.loop - LD C,1 + ;LD C,1 ; -.good: push hl - dec hl +.good: dec hl + push hl ld b,cmd_dir_options.Size ;!HARDCODE ex de,hl ld a,(de) @@ -100,7 +100,27 @@ RUN_OPTION: pop hl jr RUN_OPTION ; 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 inc hl ld a,(hl) @@ -108,6 +128,6 @@ RUN_OPTION: ld h,(hl) ld l,a scf ; маркер опознаной опции - ret + ret //////////////////////////////////////////////////////////////////////// diff --git a/SHELL/SHELL.ASM b/SHELL/SHELL.ASM index 58f6514..1a36d36 100644 --- a/SHELL/SHELL.ASM +++ b/SHELL/SHELL.ASM @@ -525,8 +525,8 @@ T8C24: db "OFF",0 include 'batch.asm' ; парсинг bat-файлов include 'exec.asm' ; выполн. введ. команд с консоли include 'procedures/print.asm' ; функции вывода сообщений - include 'messages/errors.asm' ; сообщения об ошибках - include 'messages/main.asm' ; сообщения + include 'messages/errors_txt.asm' ; сообщения об ошибках + include 'messages/main_txt.asm' ; сообщения include 'procedures/parsers.asm' ; функции прочесывания и выбора include 'procedures/math.asm' ; функции математические diff --git a/SHELL/build.txt b/SHELL/build.txt index 05cf258..9754915 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -201 \ No newline at end of file +259 \ No newline at end of file