max_width_dest equ 34 ; размер буфера строки описателей ;-------------------------------------------------------------- ; Сравнение путей (и дисков) двух панелей ; выход: Z - равны ; NZ - не равны ;-------------------------------------------------------------- compare_path_two_panels: ; сравнить диски ld a,(disk) ; диск акт. панели ld hl,disk1 ; диск пасс. панели cp (hl) ret nz ; сравнить пути ld hl,(__buff) ; путь акт. панели ld de,(__buff1) ; путь пасс. панели comp_path_two_pan: ld a,(de) cp (hl) ret nz inc de inc hl ld a,(de) or a jr nz,comp_path_two_pan cp (hl) ret ;-------------------------------------------------------------- ; Поиск отмеченной записи в списке панели ; (поиск идет с начала списка) ; выход: hl=найденная запись ; de=ячейка атрибута записи ; a=атрибут записи ; "Carry" - не нашли запись ;-------------------------------------------------------------- scan_mark_records: ld bc,(all_files) ; число записей списка inc bc ld hl,0 ; начать с начала списка ld (scan_mark_numb+1),bc ld (scan_mark_loop+1),hl scan_mark_loop: ld hl,0 ; след. положение в списке scan_mark_numb: ld bc,0 ; число оставшихся записей в списке push hl call get_record1 ; сканир. список панели ld (scan_mark_rec+1),hl ld (attr_record),a ; атрибут файла (глоб. ячейка) inc de pop hl inc hl ; на след. запись dec bc ld (scan_mark_loop+1),hl ld (scan_mark_numb+1),bc ld a,c or b scf ret z ; конец списка ld a,(de) ;+12 ячейка отметки and 80h jr z,scan_mark_loop ; запись не отмечена ; нашли запись scan_mark_rec: ld hl,0 ; адрес записи dec de ld a,(de) ;+11 атрибут файла or a ; сбр. "Carry" ret ;----------------------------------------------------------- ; Ограничение набранной строки первыми 34-мя символами ; с центровкой. ; вход: hl=буфер ввода ~input line~ ; de=куда ;----------------------------------------------------------- copy_dest_name: push hl push de ; очистить строку описателя ld b,max_width_dest ; 34 размер буфера ld a," " ld (de),a inc de djnz $-2 xor a ld (width_dest1__),a ; сбр. флаг переполн. строки dec hl ld a,(hl) ;+4 длина введ. строки cp max_width_dest+1 ; 34+1 jr c,$+7 ; длина пути =< 32 ld a,max_width_dest ; 34 ld (width_dest1__),a ; уст. флаг переполн. строки width_dest__: ld c,a ; центровка имени ld a,max_width_dest ; 34 ширина буфера строки sub c srl a ; /2 ld e,a ld d,0 ld b,d pop hl ; куда add hl,de ex de,hl ; de=начало строки в описателе pop hl ; откуда ; скопир. строку ld a,(hl) cp "a" jr c,$+4 res 5,a ; a..z -> A..Z ld (de),a inc hl inc de dec bc ld a,c or b jr nz,$-13 db 3Eh ; ld a,.. width_dest1__: db false or a ret z ; записать концевые ".." dec de dec de ld a,"." ld (de),a inc de ld (de),a ret ;------------------------------------------------- ; Скопировать исходное имя файла/папки "file.ext" ; в строку описателя окна. ; вход: bc=куда ; выход: CF - ".." текущая запись ;------------------------------------------------- copy_source_name: ld hl,(mark_files) ; число выдел. файлов ld a,l or h ret nz call get_record ; тек. запись ld (attr_record),a ; атрибут файла (глоб. ячейка) ld a,(hl) ; имя файла cp "." scf ret z ; текущий ".." ;----------------------------------------------------------- ; Скопировать имя файла "file.ext" и отцентровать в строке ; вход: hl=запись файла ; bc=строка описателя окна ; выход: заполненный буфер temp_fname ;----------------------------------------------------------- copy_cur_fname: call copyfname ; центровка имени ld a,12 ; буфер строки sub c srl a ; /2 ld l,a ld h,0 ld b,h add hl,de ex de,hl ; de=начало строки в описателе push bc ld hl,work_buffer ; откуда ldir pop bc ld hl,work_buffer ; откуда ld de,temp_fname ; куда ldir xor a ld (de),a ret ; вход: bc=куда ; выход: CF - ".." текущая запись copyname: ld hl,(mark_files) ; число выдел. файлов ld a,l or h ret nz call get_record ; тек. запись ld (attr_record),a ; атрибут файла (глоб. ячейка) ld a,(hl) ; имя файла cp "." scf ret z ; текущий ".." call copyfname ld hl,work_buffer ; откуда xor a ld b,a push bc ldir ;inc hl ld (hl),a ex de,hl ld (hl)," " inc hl ld (hl),"t" inc hl ld (hl),"o" inc hl ld (hl),":" inc hl pop bc ld a,12 sub c ret z ; дописать пробелы ld (hl)," " inc hl dec a jr nz,$-4 ret ; скопир. имя файла ; вход: bc=куда (буфер 12 байт) ; hl=имя файла ; выход: c=длина имени copyfname: ; очистить строку описателя push bc ld a," " ld d,12 ld (bc),a inc bc dec d jr nz,$-3 ; имя в формат file.ext ld ix,work_buffer ; врем. буфер ld d,1 ; не менять регистр букв bit 4,a ; атрибут файла jr nz,$+19 ; папка ld a,(format_mode) ; формат акт. панели and form_trd ; 6-й бит спек-формата jr z,$+7 call fill_med_spec_name ; спек-имя jr $+10 call fill_med1__ ; "Filename.Ext" (всегда выводит 12 симв.) jr $+5 call dir_name_med ; вывод папки (всегда выводит 12 симв.) ; узнать длину имени ld a,15 ; константа sub e ld c,a pop de ; куда ret ;----------------------------------------------------------- ; Ограничение набранной строки первыми 34-мя символами ; вход: hl=буфер ввода ~input line~ ; de=куда ;----------------------------------------------------------- copy_dstname: push hl push de ; очистить строку описателя ld b,max_width_dest ; 34 размер буфера ld a," " ld (de),a inc de djnz $-2 xor a ld (width_dst1__),a ; сбр. флаг переполн. строки dec hl ld a,(hl) ;+4 длина введ. строки cp max_width_dest+1 ; 34+1 jr c,$+7 ; длина пути =< 32 ld a,max_width_dest ; 34 ld (width_dst1__),a ; уст. флаг переполн. строки ld c,a ld b,0 pop de ; куда pop hl ; откуда ; скопир. строку ld a,(hl) cp "a" jr c,$+4 res 5,a ; a..z -> A..Z ld (de),a inc hl inc de dec bc ld a,c or b jr nz,$-13 db 3Eh ; ld a,.. width_dst1__: db false or a ret z ; записать концевые ".." dec de dec de ld a,"." ld (de),a inc de ld (de),a ret ;----------------------------------------------------------- ; Скопировать имя файла "file.ext" и отцентровать в строке ; при сканировании папки. ; вход: hl=имя файла в формате file.ext ; de=строка описателя окна ;----------------------------------------------------------- copy_cur_fname_alt: ; очистить строку описателя push de ld a," " ld bc,0C00h ; счетчики ld (de),a inc de djnz $-2 pop de push hl ; узнать длину имени ld a,(hl) or a jr z,$+6 inc c ; ++длина имени inc hl jr $-6 ; центровка имени ld a,12 ; буфер строки sub c srl a ; /2 ld l,a ld h,0 ld b,h add hl,de ex de,hl ; de=начало строки в описателе pop hl ; откуда ldir ret