From 82ed30ef6109e71859e3e4462aa69d9b349af8cd Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 18 May 2024 01:30:26 +1000 Subject: [PATCH] ... --- DSS/API/diskINF.asm | 3 +-- DSS/build.txt | 2 +- SHELL/Commands/DIR.ASM | 36 ++++++++++++++++++++++-------------- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/DSS/API/diskINF.asm b/DSS/API/diskINF.asm index c86db8a..88ddc61 100644 --- a/DSS/API/diskINF.asm +++ b/DSS/API/diskINF.asm @@ -56,7 +56,7 @@ DISKINF: LD C,B ; EX DE,HL LD HL,FAT_STRING -1: LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length + LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length CALL .mCOPY_LOOP ; 12, 16 or 32 LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE) @@ -174,7 +174,6 @@ DISKINF: LD C,B LDIR RET ; - ; GetFreeSpace: LD A,1 LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A diff --git a/DSS/build.txt b/DSS/build.txt index 6f17eed..be9c519 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -985 \ No newline at end of file +986 \ No newline at end of file diff --git a/SHELL/Commands/DIR.ASM b/SHELL/Commands/DIR.ASM index 23008c1..ae2787e 100644 --- a/SHELL/Commands/DIR.ASM +++ b/SHELL/Commands/DIR.ASM @@ -1,7 +1,7 @@ ;/////////////////////////////////////////////////// ; ; DIR. Вывод списка файлов и папок -; +; !TODO убрать баг если в параметре маски указан путь до папки или даже до другого диска ;/////////////////////////////////////////////////// cmd_dir: push de ;;;; [ ] поддержка параметров @@ -21,11 +21,12 @@ cmd_dir: push de jr z,.skip LD DE,MAIN_MSG.CALCULATING CALL MESSAGE + ; .skip: ld c,Dss.CurDisk ; узнать тек. диск RST ToDSS - ADD A,"A" - ld (root_path),a ; номер диска - SUB "A" + ;ADD A,"A" + ;ld (root_path),a ; номер диска + ;SUB "A" call read_disk_info ; прочитать метку и серийный номер диска ; pop de @@ -41,11 +42,15 @@ cmd_dir: push de ex de,hl ld de,work_buffer1 ; 80 ld c,Dss.GSwitch ; выделить параметр ком-строки + ;!TODO тут в work_buffer1 лежит путь и/или/либо маска файла + ; надо разобрать её Dss.EX_Path выделить если есть диск, путь и маску, после чего уже + ; отпечатывать путь в шапке, узнавать CurDisk как в .skip выше. Делать это до вызова + ; процедуры read_disk_info. Лучше делать это после метки .skip RST ToDSS ; ld a,(work_buffer1) or a - jr nz,.skipMask ; задана маска имен + jr nz,.skipMask ; задана маска имён ; ld hl,mask_fname ; "*.*" ld de,work_buffer1 @@ -647,18 +652,19 @@ read_disk_info: OR #80 call hex16 .get_label: ; ищем метку в корне ФС раздела ; уст. корень диска - ld hl,root_path ; "x:\",0 - ld c,Dss.ChDir - RST ToDSS + ; ld hl,root_path ; "x:\",0 + ; ld c,Dss.ChDir + ; RST ToDSS ; поиск метки - ld hl,mask_fname ; "*.*" имя метки + ;ld hl,mask_fname ; "*.*" имя метки + ld hl,SlashMaskFname ; "\*.*" имя метки ld de,work_buffer1 ; куда ld a,FAT_ATTR.VOLUME_ID ; атрибут метки тома ld bc,Dss.F_First.FATname ; f_first, формат 11 RST ToDSS - push af - call restore_path ; восст. тек. путь - pop af + ;push af + ;call restore_path ; восст. тек. путь + ;pop af ld hl,work_buffer1 + BUFFER_FIND.REC_Name ; начало метки в буфере f_first jr nc,volume_label ; метка в корневом каталоге ; берём метку из BPB @@ -715,12 +721,14 @@ unknown_serial: ; JP read_disk_info.get_label ; - +;---------------; +SlashMaskFname: db '\' ; ; маска файлов mask_fname: db "*.*",0 +;---------------; ; корень диска -root_path: db 'X:\',0 +;root_path: db 'X:\',0 ; Серийный номер диска serial_string: db "xxxx-xxxx"