;=========================================================== ; ; Процесс копирования файлов ; ;=========================================================== 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 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 (subrout_process1),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 ; текущий ".." и нет отмеч. файлов ; ld iy,input_line_copy ; структура ; очистить структуру буфера ld hl,input_line_copy ; структура call clear_struct_inline ; вставить диск ld hl,input_line_copy+5 ; куда ld a,(disk1) add a,"A" call put_char1 ; вставить символ inc hl ld a,":" call put_char1 inc hl ; вставить путь ld de,(__buff1) ; путь пасс. панели prep_copy_loop: ld a,(de) or a jr z,prep_copy_next call put_char1 ; вставить символ inc de inc hl jr prep_copy_loop ; prep_copy_next: dec hl ld a,'\' cp (hl) jr z,$+6 inc hl call put_char1 inc hl ; вставить имя ld de,work_buffer ; откуда prep_copy_loop1: ld a,(de) or a jr z,prep_copy_next1 call put_char1 ; вставить символ inc de inc hl jr prep_copy_loop1 ; prep_copy_next1: ld (hl),a ; ; начальное окно копирования ;ld bc,copy_name ; куда ;call copyname ;ret c ; текущий ".." и нет отмеч. файлов ; ; окно процесса копирования с 2-мя линейками ld hl,copy_name ; откуда ld de,copy_name1 ; куда call copy_string ; (hl) -> (de) ; скопир. путь ld hl,input_line_copy+5 ; структура строки ~input line~ ld de,copy_name2 ; куда call copy_dstname ; скопир. путь+имя файла/папки ; ; окно "ошибка копирования в:" ld hl,copy_name ; откуда ld de,copy_name3 ; куда call copy_string ; (hl) -> (de) ; с центровкой имени ; путь назначения окна "ошибка копирования" ld hl,input_line_copy+5 ; структура строки ~input line~ ld de,copy_name4 ; куда call copy_dest_name ; скопир. путь+имя файла/папки ; ; путь назначения окна "файл уже существует" ld hl,copy_name4 ; откуда 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 ; Ячейки 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 ; флаг подтв. перезаписи при копировании ; Конвертировать размер файла в число банок ; вход: de=ст. разряд ; hl=мл. разряд ; выход: de=ст. разряд? ; hl=мл. разряд? ConvLenToBank: ld a,h ld h,l ld l,0 sla a rl e rl d rl l sla a rl e rl d rl l or h ld h,0 ex de,hl jr z,$+3 inc hl ld a,h or l ret nz inc de ret