;=========================================================== ; ; Процесс копирования файлов ; ;=========================================================== copy: call test_show_panels ; тест на режим вкл. панелей ret z call get_fire ; защита от "залипания" бутонов ld a,(format_mode) ; тек. формат панели and form_info+form_qview ; info, qview ret nz ; скопир. имя файла/папки (если нет выдел.) call prep_copy_name ; настроить имя копир. файла в описат. окон и др. ret c ; текущий ".." и нет отмеч. файлов ld a,1 ; копирование ld (scan_mode),a ; режим работы tree-процедуры jp __tree; ; ; вывод начального окна ld hl,dial_copy ; описатель окна call DialogW cp evCommand ; событие "команда" ret nz ld a,(hl) ;+1 what cp cmOkey ; "Copy" ret nz ; вывод окна процесса ld hl,copy_file ; обработчик процесса ~Process Line~ ld (subrout_process),hl ld hl,dial_copy_total_process ; описатель окна с 2-мя линейками call DialogW cp evCommand; ; событие "команда" ret nz; ld a,(hl); ;+1 what cp cmOkey; ; "Yes" ret nz; ; ; вывод окна ошибки копирования ld hl,dial_error_copy call DialogEr cp evCommand ; событие "команда" ret nz ld a,(hl) ;+1 what cp cmSkip ; "Skip" cp cmSkipAll ; "Skip all" cp cmOkey ; "Retry" ret nz ; вывести окно прерывания операции ld hl,dial_abort ; описатель окна call DialogEr cp evCommand ; событие "команда" ret nz ld a,(hl) ;+1 what cp cmOkey ; "Yes" ret nz ; вывод окна "файл уже существует" ; заполнить ячейки: ld hl,dial_existing call DialogEr cp evCommand ; событие "команда" ret nz ld a,(hl) ;+1 what cp cmOkey ; "Overwrite" cp cmAll ; "All" cp cmSkip ; "Skip" cp cmSkipAll ; "Skip all" cp cmAppend ; "Append" ret nz ;.. ret ; Имя копир. файла в описатели окон и буфер строки "Copy" prep_copy_name: ld hl,input_line_copy ; структура call clear_struct_inline ; очистить структуру ~input line~ ld hl,(__buff1) ; путь пасс. панели ld de,input_line_copy+5 ; строка ~input line~ ld b,2 ; счетчик длины строки ld a,(disk1) add a,"A" ld (de),a inc de ld a,":" ld (de),a inc de ld a,(hl) ld (de),a or a jr z,$+7 inc hl inc de inc b jr $-8 dec hl ld a,'\' cp (hl) jr z,$+7 inc b ld (de),a inc de xor a ld (de),a ld a,b ld (input_line_copy+4),a ; структура строки ~input line~ ; начальное окно копирования ld bc,copy_name ; куда call copyname ret c ; текущий ".." и нет отмеч. файлов ; окно процесса копирования с 1-й линейкой ld hl,copy_name-1 ; откуда ld de,copy_name1 ; куда call copy_string ; (hl) -> (de) ld hl,input_line_copy+5 ; структура строки ~input line~ ld de,copy_name2 ; куда call copy_dstname ; скопир. путь+имя файла/папки ; окно процесса копирования с 2-мя линейками ld hl,copy_name-1 ; откуда ld de,copy_name3 ; куда call copy_string ; (hl) -> (de) ld hl,copy_name2 ; откуда ld de,copy_name4 ; куда call copy_string ; (hl) -> (de) ; ; окно "ошибка копирования" ld hl,copy_name-1 ; откуда ld de,copy_name5 ; куда call copy_string ; (hl) -> (de) ; с центровкой имени ; путь назначения окна "ошибка копирования" ld hl,input_line_copy+5 ; структура строки ~input line~ ld de,copy_name6 ; куда call copy_dest_name ; скопир. путь+имя файла/папки ; путь назначения окна "файл уже существует" ld hl,copy_name6 ; откуда ld de,exists_name ; куда call copy_string ; (hl) -> (de) ; имя файла ld hl,work_buffer+33; dec de; call copy_string; ; (hl) -> (de) ret ;----------------------------------------------------------- ; Создать папку по тек. пути на диске назначения ;----------------------------------------------------------- create_folder: ; создать тек. таргет-путь в work_buffer+128 ;256 ; основываясь на базовом пути work_buffer (точка отсчета) or a; ret ;----------------------------------------------------------- ; Скопировать файл тек. пути на диск назначения. ; Процедура линейки процесса копирования. ; При завершении (или прерывании) копирования ; выдает флаг "Carry". ;----------------------------------------------------------- copy_file: ; создать файл по тек. таргет-пути (в work_buffer+128 ;256) ;... scf or a; ret ;__tree: ; ; скопир. путь акт. панели во врем. буфер (создать базовый путь сорца) ; push hl ; ld hl,(__buff) ; откуда, адрес пути акт. панели ; ld de,work_buffer ; куда ; ld a,(disk) ; диск панели ; add a,"A" ; ld (de),a ; inc de ; ld a,":" ; ld (de),a ; inc de ; call copy_string ; (hl) -> (de) до нуля ; pop hl ; ld a,(hl) ; cp "." ; ".." ? ; ret z ; выйти, родит. папка ; ; ; push de ; ;ld a,(format_mode) ; тек. фомат панели ; ;ld b,a ; call get_record ; hl=начало записи, a=атрибут файла ; pop de ; and 10h ; jr z,__tr1 ; файл, не добавлять имя папки ; ; тест на концевой слеш ; push hl ; ex de,hl ; dec hl ; dec hl ; ld a,'\' ; cp (hl) ; jr z,$+3 ; inc hl ; ld (hl),a ; inc hl ; ex de,hl ; de=куда ; pop hl ; откуда ; ; добавить имя папки ; ; de=куда ; ld bc,0044h ; 11 -> 8.3 ; rst 10h ;__tr1: ; ; ;call PR; ; ld hl,work_buffer ; ld c,1Dh ; уст. тек. путь ; rst 10h ; ;xor a ; сканир. папки ; ;ld (scan_mode),a ; режим работы процедуры ; jp ScanTree ; сканир. папку ; ;ret; ; Ячейки 1-й линейки процесса max_file_bytes: dw 0 ; размер файла (папки) dw 0 ; ст. разряд ; curr_bytes: dw 0 ; тек. число обраб. байтов dw 0 ; ст. разряд ; Ячейки 2-й линейки процесса max_file_bytes1: dw 0 ; размер файла (папки) dw 0 ; ст. разряд ; curr_bytes1: dw 0 ; тек. число обраб. байтов dw 0 ; ст. разряд copy_overwrite: db false ; флаг подтв. перезаписи при копировании