; Если переменная окружения найдена, ini-файл читается/записывается ; только в ней. ; Если переменной окружения нет, ini-файл читается/записывается по ; текущему пути менеджера. ; ; Если ini-файл не найден - в панелях устанавливается диск и текущий ; путь менеджера. Если ini-файл найден, диски и пути панелей устанав- ; ливаются согласно данных ini-файла. ; ; ; Структура ini-файла: ; ; +0 - Флаг активной панели (0=левая, 80h=правая) ; +1 - Номер диска левой панели (0=A,1=B,..) ; +2 - Номер диска правой панели (0=A,1=B,..) ; +3 - Раскраска файлов (true/false) ; +4 - Флаг скрытия мышки при работе с клавой (true/false) ; Режим сортировки левой панели: ; +5 - n/x/d/s/u (name/ext/date/size/unsort) ; +6 - 0=, 1= (восходящая/нисходящая) ; Режим сортировки правой панели: ; +7 - n/x/d/s/u (name/ext/date/size/unsort) ; +8 - 0=, 1= (восходящая/нисходящая) ; +9 - Формат левой панели: full/med/brief/info/qview ; +10 - Формат правой панели: full/med/brief/info/qview ; +11 - Флаг вывода букв режима сортировки (true/false) ; +12 - Флаг вывода строки суммарной информации (true/false) ; +13 - Смещение курсора вниз при выделении файлов (true/false) ; +14 - Флаг вывода часов вверху правой панели (true/false) ; +15 - Флаг подтверждения выхода из менеджера (true/false) ; +16 - Флаг отметки папок (true/false) ; +17 - Флаг временного просмотра сист. экрана по Esc (true/false) ; +18 - Флаг отработки Home/End в ком-строке при открытых панелях (false/true) ; ;+19 - Флаг вывода общей линейки процесса копирования (false/true) ; +20 - резерв ; +21 - резерв ; +22 - резерв ; ; +23 - Массив цветов менеджера (color_array), 66 байт ; ; +88 - Флаг подтверждения перезаписи при копировании (Copy) ; +89 - Флаг подтверждения перезаписи при перемещении (Move) ; +90 - Флаг подтверждения при удалении (Delete) ; +91 - Флаг подтверждения удаления не пустых папок (Delete non-empty folders) ; +92 - резерв ; +93 - резерв ; +94 - резерв ; +95 - резерв ; ; +96 - Путь левой панели (256 байт) ; +353 - Путь правой панели (256 байт) ; block1 equ 23 ; ячейки 1-го блока настроек block2 equ 8 ; ячейки 2-го блока size_ini_part1 equ block1+len_color_array+block2 ;97 байт (настройки FM) ;----------------------------------------------------------- ; Настроить опциональные ячейки менеджера ; и установить диски и пути панелей. ; вход: заполненный work_buffer, при наличии ini-файла ;----------------------------------------------------------- init_option_cells: ; флаг наличия ini-файла db 3Eh ; ld a,.. enable_ini_file: db false or a jr nz,yes_ini__ ;-------------------------------- ; нет ini-файла ;-------------------------------- ; использовать цвета по-умолчанию ld hl,default_colors ; откуда ld de,color_array ; куда ld bc,len_color_array ldir ; уст. одинаковые диски в панелях ld c,2 ; получить номер тек. диска rst 10h ld (disk),a ; номер диска акт. панели ld (disk1),a ; номер диска пасс. панели ; уст. одинаковые пути в панелях ld hl,buff_left ; буфер пути левой панели ld c,1Eh ; получить тек. путь rst 10h ld hl,buff_left ; путь левой панели ld de,buff_right ; путь правой панели jp copy_string ; скопир. строку до нуля (с нулем) yes_ini__: ;---------------------------------------- ; Использовать настройки из ini-файла ;---------------------------------------- ; Уст. активную панель ld de,panel_left+1 ld hl,panel_right+1 ld a,(work_buffer) ;+0 из ini-файла (0=левая, 80h=правая) or a ld a,0 jr z,$+3 ex de,hl ld (de),a ; X полож. одной панели ld (hl),40 ; X полож. другой панели inc de inc hl ld (de),a ; cur_panel ld (hl),80h ; cur_panel др.панели ; Уст. диски панелей ld a,(work_buffer+1) ld (disk),a ; диск акт. панели ld a,(work_buffer+2) ld (disk1),a ; диск пасс. панели ; Раскраска файлов ld a,(work_buffer+3) ld (hilight_enable),a ; Прятать мышку при работе с клавой ld a,(work_buffer+4) ld (hidden_mouse),a ; флаг (в 0-й стр. ФМ, уже включена) ; Режимы сортировок панелей ; l=n/x/d/s/u (name/ext/date/size/unsort) ; h=0/1 (00=, 01=) ld hl,(work_buffer+5) ld (sort_type),hl ; акт. ld hl,(work_buffer+7) ld (sort_type1),hl ; пасс. ; Форматы панелей ld a,(work_buffer+9) ; full/med/... ld (format_mode),a ; акт. ld a,(work_buffer+10) ld (format_mode1),a ; пасс. ; Флаг вывода буквы режима сортировки ld a,(work_buffer+11) ; true/false ld (sort_char_flag),a ; флаг ; Флаг вывода суммарной информации (внизу панелей) ld a,(work_buffer+12) ; false/true ld (flag_summary_info),a ; флаг ; Смещение курсора вниз при выделении файлов ld a,(work_buffer+13) ld (enable_down_mark),a ; флаг ; Флаг вывода часов ld a,(work_buffer+14) ld (clock__+1),a ; тек. сост. режима вывода ld (enable_clock),a ; флаг ; Флаг подтверждения выхода из менеджера ld a,(work_buffer+15) ld (confirm_quit),a ; Флаг отметки папок ld a,(work_buffer+16) ld (mark_folders),a ; Флаг врем. просмотра сист. экрана по Esc ld a,(work_buffer+17) ld (flag_esc),a ; Флаг отработки Home/End в ком-строке при откр. панелях ld a,(work_buffer+18) ld (move_home_end),a ; Флаг подтверждения перезаписи при копировании (Copy) ld a,(work_buffer+88) ;ld (),a ;ld (confirm_ceil0),a ; Флаг подтверждения перезаписи при перемещении (Move) ld a,(work_buffer+89) ;ld (),a ;ld (confirm_ceil1),a ; Флаг подтверждения при удалении (Delete) ld a,(work_buffer+90) ld (del_confirm),a ld (confirm_ceil2),a ; Флаг подтверждения удаления не пустых папок (Delete non-empty folders) ld a,(work_buffer+91) ld (flag_del_non_empty),a ld (confirm_ceil3),a ; Настроить цвета менеджера ld hl,work_buffer+23 ; начало цвет. массива в ini-файле ld de,color_array ; массив цветов менеджера ld bc,len_color_array ldir ret ;------------------------------------------------- ; Чтение ini-файла ;------------------------------------------------- read_ini_file: ; проверить переменную окружения Far-а ld bc,0146h ; получить переменную окружения ld hl,env_name ; имя переменной ld de,work_buffer ; буфер для значения переменной rst 10h jr c,no_ini_string ; ошибка or a jr nz,read_ini_file__ ; переменная найдена ; исп. текущий сист. путь ld hl,save_path ; откуда ld de,work_buffer ; куда call copy_string ; скопир. строку dec de dec de ld a,(de) cp '\' jr z,$+3 inc de read_ini_file__: push de ; конец строки переменной окружения ld hl,name_ini_file ; имя ini-файла ld bc,len_ini_name ldir ; к диск+путь + имя ini-файла ; найти файл ld hl,work_buffer ; имя файла (диск+путь) ld de,work_buffer+127;255 ; буфер ld bc,0119h ld a,20h ; "архивный" rst 10h pop de ; конец строки переменной окружения jr nc,found_ini_file ; файл найден no_ini_string: xor a ; false ld (enable_ini_file),a ; флаг наличия ini-файла jr ini_done ; found_ini_file: ld hl,work_buffer ; полное имя файла (диск+путь+имя) ld a,1 ; на чтение ld c,11h ; открыть файл rst 10h jr c,no_ini_string ; ошибка открытия ld (handle_ini_file),a ; сохр. дескриптор ; прочитать настройки менеджера ld hl,work_buffer ; буфер под данные ld de,size_ini_part1 ; число читаемых байт ld c,13h ; чтение файла rst 10h jr c,read_ini_error ; прочитать пути левой и правой панелей ld hl,buff_left ; буфер под данные ld de,256+256 ; 512 число читаемых байт ld a,(handle_ini_file) ; дескриптор ld c,13h ; чтение файла rst 10h ld a,true jr nc,read_ini_ok ; без ошибок read_ini_error: xor a read_ini_ok: ld (enable_ini_file),a ; флаг наличия ini-файла close_ini_file: db 3Eh handle_ini_file: db -1 ld c,12h ; закрыть файл rst 10h ini_done: restore_sys_path: ld a,(save_disk) ld c,1 ; уст. диск rst 10h ret c ld hl,save_path ld c,1Dh ; уст. каталог rst 10h ret env_name: db "FM",0 ; имя переменной окружения name_ini_file: db '\FM.INI',0 ; имя ini-файла len_ini_name equ $ - name_ini_file name_mnu_file: db '\FM.MNU',0 ; файл Меню Пользователя len_mnu_name equ $ - name_mnu_file ;------------------------------------------------------------------ ; Запись настроек в ini-файл (97+256+256=609 байт). ; Если переменная окружения не найдена - запись производится ; в текущем пути. ;------------------------------------------------------------------ write_ini_file: ld hl,show_pointer ; начальный вывод указателя push hl call clear_pointer ; скрыть указатель ; проверить переменную окружения Far`а ld bc,0146h ; получить переменную окружения ld hl,env_name ; имя переменной ld de,work_buffer ; буфер для значения переменной rst 10h ret c ; ошибка or a jr nz,write_ini_file__ ; переменная найдена ; исп. текущий сист. путь ld hl,save_path ; откуда ld de,work_buffer ; куда call copy_string ; скопир. строку dec de dec de ld a,(de) cp '\' jr z,$+3 inc de write_ini_file__: ld hl,name_ini_file ; имя ini-файла ld bc,len_ini_name ldir ; диск+путь + имя ini-файла ld hl,work_buffer ; полное имя файла (диск+путь+имя) ld a,20h ; "архивный" ld c,0Ah ; создать файл rst 10h jr c,ini_done ; ошибка создания ld (handle_ini_file),a ; сохр. дескриптор ; call prep_ini_buffer ; заполнить ini-буфер ; ; записать настройки менеджера ld hl,work_buffer ; буфер данных ld de,size_ini_part1 ; 97 число запис. байт ld a,(handle_ini_file) ; дескриптор ld c,14h ; запись файла rst 10h jr c,close_ini_file ; закрыть файл ; записать путь левой панели ld hl,(__buff) ; адрес строки левой панели ld de,256 ; число запис. байт ld a,(handle_ini_file) ; дескриптор ld c,14h ; запись файла rst 10h jr c,close_ini_file ; закрыть файл ; записать путь правой панели ld hl,(__buff1) ; адрес строки правой панели ld de,256 ; число запис. байт ld a,(handle_ini_file) ; дескриптор ld c,14h ; запись файла rst 10h jp close_ini_file ; закрыть файл ;------------------------------------------------- ; Подготовить буфер для записи в ini-файл ;------------------------------------------------- prep_ini_buffer: ; Активная панель ld a,(cur_panel) ; 0=левая, 80h=правая ld (work_buffer),a ;+0 ;or a ; корректно скопировать панеле-зависимые ячейки ;push af ;call nz,change_panel call prep_ini_buffer1 ;pop af ;call nz,change_panel ; ; Раскраска файлов ld a,(hilight_enable) ld (work_buffer+3),a ; Прятать мышку при работе с клавой ld a,(hidden_mouse) ; флаг (в 0-й стр. ФМ) ld (work_buffer+4),a ; Флаг вывода буквы режима сортировки ld a,(sort_char_flag) ld (work_buffer+11),a ; Флаг вывода суммарной информации (внизу панелей) ld a,(flag_summary_info) ld (work_buffer+12),a ; Смещение курсора вниз при выделении файлов ld a,(enable_down_mark) ld (work_buffer+13),a ; Флаг вывода часов ld a,(enable_clock) ld (work_buffer+14),a ; Флаг подтверждения выхода из менеджера ld a,(confirm_quit) ld (work_buffer+15),a ; Флаг отметки папок ld a,(mark_folders) ld (work_buffer+16),a ; Флаг врем. просмотра сист. экрана по Esc ld a,(flag_esc) ld (work_buffer+17),a ; Флаг отработки Home/End в ком-строке при откр. панелях ld a,(move_home_end) ld (work_buffer+18),a ; Флаг подтверждения перезаписи при копировании (Copy) ;ld a,() ld (work_buffer+88),a ; Флаг подтверждения перезаписи при перемещении (Move) ;ld a,() ld (work_buffer+89),a ; Флаг подтверждения при удалении (Delete) ld a,(del_confirm) ld (work_buffer+90),a ; Флаг подтверждения удаления не пустых папок (Delete non-empty folders) ld a,(flag_del_non_empty) ld (work_buffer+91),a ; Перекачать массив цветов менеджера ld hl,color_array ld de,work_buffer+23 ; начало цвет. массива в ini-файле ld bc,len_color_array ldir ret ; Копирование в ini-буфер панеле-зависимых ячеек prep_ini_buffer1: ; Номер диска акт. панели ld a,(disk) ld (work_buffer+1),a ; Номер диска пасс. панели ld a,(disk1) ld (work_buffer+2),a ; Режимы сортировок панелей ld hl,(sort_type) ; акт. ld (work_buffer+5),hl ld hl,(sort_type1) ; пасс. ld (work_buffer+7),hl ; Форматы панелей ld a,(format_mode) ; акт. ld (work_buffer+9),a ld a,(format_mode1) ; пасс. ld (work_buffer+10),a ret array_read equ 0C000h ; буфер mnu-файла ;------------------------------------------------- ; Чтение файла fm.mnu ;------------------------------------------------- read_mnu_file: ; проверить переменную окружения Far-а ld bc,0146h ; получить переменную окружения ld hl,env_name ; имя переменной ld de,work_buffer ; буфер для значения переменной rst 10h jr c,no_mnu_string ; ошибка or a jr nz,read_mnu_file__ ; переменная найдена ; исп. текущий сист. путь ld hl,save_path ; откуда ld de,work_buffer ; куда call copy_string ; скопир. строку dec de dec de ld a,(de) cp '\' jr z,$+3 inc de read_mnu_file__: push de ; конец строки переменной окружения ld hl,name_mnu_file ; имя mnu-файла ld bc,len_mnu_name ldir ; к диск+путь + имя mnu-файла ; найти файл ld hl,work_buffer ; имя файла (диск+путь) ld de,work_buffer+127;255 ; буфер ld bc,0119h ld a,20h ; "архивный" rst 10h pop de ; конец строки переменной окружения jr nc,found_mnu_file ; файл найден no_mnu_string: xor a ; false ld (enable_mnu_file),a ; флаг наличия mnu-файла jr mnu_done ; found_mnu_file: ld hl,work_buffer ; полное имя файла (диск+путь+имя) ld a,1 ; на чтение ld c,11h ; открыть файл rst 10h jr c,no_mnu_string ; ошибка открытия ld (handle_mnu_file),a ; сохр. дескриптор ; прочитать файл ld hl,array_read ; 0C000h буфер под данные ld de,73*52 ; 3796 макс. число читаемых байт ld c,13h ; чтение файла rst 10h ld a,true jr nc,read_mnu_ok ; без ошибок xor a read_mnu_ok: ld (enable_mnu_file),a ; флаг наличия mnu-файла ld hl,array_read add hl,de ld (hl),0 ; в конец файла db 3Eh ; ld a,.. handle_mnu_file: db -1 ld c,12h ; закрыть файл rst 10h mnu_done: jp restore_sys_path ; восст. тек. путь