;----------------------------------------------------------- ; Заполнить банку каталога + размер файлов списка ; выход: CF - ошибка чтения диска ;----------------------------------------------------------- read_new_folder: call read_new_list ; заполнить банку новым списком + размер файлов ret c ld a,(format_mode) ; формат акт. панели and form_trd ;jp z,msdos_scan_folder ; сканир. папку -> scan_folder ? ret z ;------------------------------------------------------------- ; Вычислить объем файлов спек-имиджа (инфа из 9-го сектора) ;------------------------------------------------------------- ld a,(cash_left_dir) ; номер банки каталога акт. панели out (SLOT3),a ; подкл. страницу каталога ; весь объем диска ld hl,0Ah ; 655,360 (000A:0000) ld (total_space_disk+2),hl ; ст. разряд ld hl,0 ld (total_space_disk),hl ; мл. разряд ; расчитать общ. размер файлов exx ld bc,16 ; размер trd-записи ld hl,0 ; ст. разряд exx ld hl,0 ; мл. разряд ld ix,0C000h+11 ; ячейка размера файла ld bc,(all_files) ; число файлов диска spec_scan_loop: ld e,(ix+0) ld d,(ix+1) add hl,de ; мл.разряд exx ld de,0 adc hl,de ; ст.разряд add ix,bc ; на след. запись exx dec bc ; --число файлов ld a,c or b jr nz,spec_scan_loop exx ld (files_size+2),hl ; ст.разряд exx ld (files_size),hl ; мл. разряд ; расчитать своб. место на диске ld de,(total_space_disk) ; мл.разряд ex de,hl sbc hl,de ld (free_space_disk),hl exx ld de,(total_space_disk+2) ; ст.разряд ex de,hl sbc hl,de ld (free_space_disk+2),hl exx ret ;------------------------------------------------- ; Сканирование папки и подсчет ее размера ;------------------------------------------------- ;msdos_scan_folder: ; <- заменить на scan_folder ? ;call get_record ;jp scan_folder ;ret ;------------------------------------------------- ; Заполнить банку списком нового каталога ; выход: CF - ошибка уст. диска/пути ;------------------------------------------------- read_new_list: call set_path_from_activ_panel ; уст. диск и путь от акт. панели jr nc,read_nlist inc a scf ret z ; нет диска ; нет данного пути ld hl,(__buff) ; адрес пути акт. панели ld (hl),'\' ; корень в путь акт. панели inc hl ld (hl),0 dec hl ld c,1Dh ; смена тек. каталога rst 10h ret c ; ошибка read_nlist: xor a ld l,a ld h,a ; сбр. ячейки ld (files_size),hl ; общ. размер файлов в списке ld (files_size+2),hl ld (all_folders),hl ; число папок в списке ld (all_files),hl ; число записей в списке акт. панели ld (cur_pointer),hl ; тек. полож. указателя ld (offset_list),hl ; смещ. списка ld (mark_files),hl ; число выдел. файлов ld (low_size),hl ; мл. разряд размера выдел. файлов ld (high_size),hl ; ст. разряд ld h,0C0h ; hl=0C000h ld (copy_rec_addr),hl ; ld hl,(__mask) ; "*.*" маска имён файлов ld bc,0019h ; найденное имя в 11 симв. формате read_nlist_loop: ld de,work_buffer ; куда ld a,37h ; все, кроме метки тома rst 10h ccf ret nc ; больше нет записей call copy_record ; скопир. запись в банку каталога ld c,1Ah ; поиск след. jr read_nlist_loop ; Скопир. запись в банку каталога copy_record: ld a,(cash_left_dir) ; номер банки каталога акт. панели out (SLOT3),a ; подкл. стр. каталога ld hl,work_buffer+33 ; откуда ld a,"." cp (hl) jr nz,copy_record1 inc hl cp (hl) ret nz ; "." тек. запись dec hl copy_record1: db 11h ; ld de,.. copy_rec_addr: dw 0C000h ; куда (тек. адрес) ld bc,11 ldir ; имя файла ld hl,work_buffer+32 ; откуда ldi ; атрибут записи ld hl,work_buffer+12 ; откуда ld bc,20 ldir ld (copy_rec_addr),de ld hl,(all_files) inc hl ; ++число записей в списке ld (all_files),hl ; новый общий размер файлов (total_file_size + found file_size) ld hl,(work_buffer+28) ; мл. разряд ld de,(files_size) add hl,de ld (files_size),hl ld hl,(work_buffer+30) ; ст. разряд ld de,(files_size+2) adc hl,de ld (files_size+2),hl ret