;----------------------------------------------------------- ; Вычислить свободное место на 2 дисках панелей ;----------------------------------------------------------- get_total_free_space: ; акт. панель ld hl,free_space_disk ; ячейки акт. панели ld a,(format_mode) ; формат акт. панели ld b,a ld a,(disk) ; диск акт. панели ld c,a push bc call get_free_space ; своб. место на диске pop bc ld a,(disk1) ; диск пасс. панели cp c ; диски на панелях равны ? jr nz,get_free_noact ; нет ld hl,free_space_disk ; ячейки акт. панели ld de,free_space_disk1 ; ячейки пасс. панели ld bc,4 ldir ret ; get_free_noact: ; пасс. панель ld c,a ; номер диска ld a,(format_mode1) ; формат пасс. панели ld b,a ld hl,free_space_disk1 ; ячейки пасс. панели ;------------------------------------------------- ; Вычислить свободное место на диске ; вход: c=номер диска (A=0, B=1,...) ; b=формат панели ; hl=ячейки "free_space_disk" панели ;------------------------------------------------- get_free_space: ld a,(flag_summary_info) ; флаг вывода суммарной инфы or a ret z ; false bit 6,b ; спек-формат ret nz ; вывести окно "Calculating free space..." push bc push hl ld hl,win_free_disk ; описатель окна call WinSimple ; вывести окно pop hl pop bc ld a,c push hl bit 6,b ; спек-формат jr nz,get_free_spec ;---------------------------------------------------- ; Вычислить своб. место на MS-DOS диске ;---------------------------------------------------- ld c,3 ; инфа о диске rst ToDSS jr nc,get_free_ok ld bc,0 ld e,c ld d,c jr get_free__ ; get_free_ok: ; a=размер кластера в секторах ; bc=размер сектора в байтах ; de=своб. кластеров push de ld hl,0 add hl,bc ; вычислить размер кластера dec a jr nz,$-2 ex de,hl ; de=размер кластера pop bc ; своб. кластеров call mul_bcde ; bc*de=hlbc своб. место ex de,hl get_free__: pop hl ; мл.разряд ld (hl),c ; hl=free_space_disk (free_space_disk1) inc hl ld (hl),b inc hl ; ст.разряд ld (hl),e inc hl ld (hl),d ; закрыть окно "Calculating free space..." jp CloseWinSimple ;---------------------------------------------------- ; Вычислить своб. место на спектрумовском диске ; (отделить trd-формат от scl-формата) ; (655,360 байт trd-диска) ; вход: hl уже в стеке ; a=номер диска ;---------------------------------------------------- get_free_spec: ; вычислить число своб. кластеров ; ... ; ld de,640; ; своб. кластеров ; ld a,1 ; размер кластера в секторах ld bc,1024 ; размер сектора в байтах jr get_free_ok ; заполнить строку ;----------------------------------------------------------- ; Обновление списка панели при навигации по папкам ;----------------------------------------------------------- fresh_list_panel: call read_new_folder ; новый список каталога + размер папки ret c call sorting ; раздельный список указателей + сорт. списка fresh_list_pan: ; вычислить своб. место диска ld hl,free_space_disk ; ячейки акт. панели ld a,(format_mode) ld b,a ld a,(disk) ld c,a db 3Eh ; ld a,.. enter_to_folder: db false ; флаг "навигация по папкам" or a call z,get_free_space db 21h ; ld hl,.. fresh_list_point: dw 0 ; сохр. полож. указателя ld (cur_pointer),hl ; тек. полож. указателя db 21h ; ld hl,.. fresh_list_offset: dw 0 ; сохр. смещ. списка ld (offset_list),hl ; смещение списка jp A20FC ; вывод панели