;----------------------------------------------------------- ; Вывод разных состояний key-бара и обработчики его опций ;----------------------------------------------------------- ; нормальная строка key-бара keybar_norm: db "1Help " db "2UserMn " db "3View " db "4Edit " db "5Copy " db "6RenMov " db "7MkFold " db "8Delete " db "9ConfMn " db "10Quit " ; строка key-бара с Ctrl+.. keybar_ctrl: db "1 " db "2 " db "3Name " db "4Extens " db "5Date " db "6Size " db "7Unsort " db "8 " db "9 " db "10 " ; строка key-бара с Alt+.. keybar_alt: db "1Left " db "2Right " db "3 " ; "3View.. " db "4 " ; "4Edit.. " db "5 " ; "5Print " db "6 " db "7 " ; "7Find " db "8 " db "9 " db "10 " ; строка key-бара с Shift+.. keybar_shift: db "1 " db "2 " db "3 " db "4 " db "5 " db "6 " db "7 " db "8 " db "9 " db "10 " ; атрибуты строки key-бара keybar_attr: db kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f,kb_b ; 1 db kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f,kb_b ; 2 db kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f,kb_b ; 3 db kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f,kb_b ; 4 db kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f,kb_b ; 5 db kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f,kb_b ; 6 db kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f,kb_b ; 7 db kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f,kb_b ; 8 db kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f,kb_b ; 9 db kb_b,kb_b,kb_f,kb_f,kb_f,kb_f,kb_f,kb_f ; 10 __pointer: call show_pointer ; вывести указатель (если панели вкл.) ;----------------------------------------------------------- ; Начальный вывод строки key-бара (строка с атрибутами) ;----------------------------------------------------------- print_keybar: ld de,keybar_norm ; текст print_keybar1: ld hl,037Dh ; 0301h + (4*31) in a,(PORT_Y) ld b,a ; сохр. порт in a,(SLOT0) ld c,a ; сохр.порт di ld a,50h ; видео-страница out (SLOT0),a ld a,81h ; +0 (смещ. слева) out (PORT_Y),a ; колонка ; вывод текста ld d,d ; уст. размер блока ld a,80 ; длина строки ld b,b ; выкл. аксель ld l,l ; копировать блок ld a,(de) ld b,b ; выкл. аксель ld a,a ; копирование блока (верт. линии) ld (hl),a ld b,b ; выкл. аксель ; вывод атрибутов ld de,keybar_attr ; строка атрибутов ld a,81h ; +0 (смещ. слева) out (PORT_Y),a inc hl ; перейти на атрибуты ld d,d ; уст. размер блока ld a,80 ; длина строки ld b,b ; выкл. аксель ld l,l ; копировать блок ld a,(de) ld b,b ; выкл. аксель ld a,a ; копирование блока (верт. линии) ld (hl),a ld b,b ; выкл. аксель ld a,b out (PORT_Y),a ; восст. порт ld a,c out (SLOT0),a ; восст. порт ei ret ;----------------------------------------------------------- ; Вывод строки key-бара для спец-клавиш (Ctrl,Alt,Shift) ; и переход на обработчики опций key-бара. ; (строка key-бара для спец-клавиш выводится без атрибутов) ;----------------------------------------------------------- ; вход: a = признак нажатия Ctrl,Alt,Shift ; change_keybar: ld (keybar2__+1),a ld de,keybar_ctrl ; строка bit 5,a ; Ctrl+ jr nz,keybar__ ld de,keybar_alt ; строка bit 4,a ; Alt+ jr nz,keybar__ ld de,keybar_shift ; строка keybar__: ld hl,037Dh ; 0301h + (4*31) in a,(PORT_Y) ld b,a ; сохр. порт in a,(SLOT0) ld c,a ; сохр.порт di ld a,50h ; видео-страница out (SLOT0),a ld a,81h ; +0 (смещ. слева) out (PORT_Y),a ; колонка ; вывод текста ld d,d ; уст. размер блока ld a,80 ; длина строки ld b,b ; выкл. аксель ld l,l ; копировать блок ld a,(de) ld b,b ; выкл. аксель ld a,a ; копирование блока (верт. линии) ld (hl),a ld b,b ; выкл. аксель ld a,b out (PORT_Y),a ; восст. порт ld a,c out (SLOT0),a ; восст. порт ei ld hl,__pointer ; точка выхода push hl ; тест на "залипание" клавиш keybar1__: ld a,3 ; тест нажатия клавиш rst 20h ld a,b and 11110000b ; test Ctrl,Alt,Shift jr nz,keybar1__ ; пока нажаты ld a,2 ; опрос клавы rst 20h ret z ; были только Crtl,Alt,Shift keybar2__: ld b,0 ; сохр. биты клавиш Ctrl,Alt,Shift keybar_options: res 7,d ; сбр. 7-й бит ld a,d ; b=бит клавиш Ctrl, Alt, Shift ; a=скен-код клавиши ;//////////////////////////////////////////////////////////////////////// ; ; Обработка опций key-бара ; ;//////////////////////////////////////////////////////////////////////// bit 5,b ; Ctrl+.. jr nz,options_ctrl bit 4,b ; Alt+.. jr nz,_option_alt ;===================================================================== ; ; Shift-опции ; ; вход: a=скен-код ;===================================================================== cp 43h ; F9 jp z,write_ini_file ; записать ini-файл ret ;===================================================================== ; ; Ctrl-опции ; ; вход: a=скен-код ;===================================================================== options_ctrl: cp 2 ; "1" краткий акт. панели jp z,set_format_brief cp 3 ; "2" средний акт. панели jp z,set_format_medium cp 4 ; "3" полный акт. панели jp z,set_format_full cp 16h ; Ctrl+U обмен панелей jp z,swap_panels cp 25h ; Ctrl+L панель информации jp z,alt_info_panel cp 10h ; Ctrl+Q панель быстрого просмотра jp z,alt_qview_panel cp 18h ; Ctrl+O убрать/показать панели jp z,hidden_panels cp 12h ; Ctrl+E пред. строка истории jp z,prev_history cp 2Bh ; Ctrl+X след. строка истории jp z,next_history cp 4Fh ; Ctrl+Del, очистить историю команд jp z,clear_history ; ld c,"n" ; name cp 3Dh ; Ctrl+F3 сорт. по имени jp z,sorting_list ld c,"x" ; ext cp 3Eh ; Ctrl+F4 сорт. по расш. jp z,sorting_list ld c,"d" ; date cp 3Fh ; Ctrl+F5 сорт. по дате jp z,sorting_list ld c,"s" ; size cp 40h ; Ctrl+F6 сорт. по размеру jp z,sorting_list ld c,"u" ; unsorted cp 41h ; Ctrl+F7 без сортировки jp z,sorting_list ; cp 1Dh ; Ctrl+A вывод окна атриб. файла/папки ;jp z,set_attrib2 cp 28h ; Enter jp z,put_name_to_comline ; скопировать имя/путь в ком-строку cp 4Eh ; Enter цифр. поля jp z,put_name_to_comline ; cp 1Ah ; Ctrl+[ путь левой панели в ком-строку jp z,copy_left_path_panel_to_comline cp 1Bh ; Ctrl+] путь правой панели в ком-строку jp z,copy_right_path_panel_to_comline ret ;===================================================================== ; ; Alt-опции ; ; вход: a=скен-код ;===================================================================== _option_alt: cp 3Bh ; F1 jp z,select_left_drive cp 3Ch ; F2 jp z,select_right_drive ret ;------------------------------------------------- ; Ctrl+E. Вставить пред. строку истории ; и войти в ком-строку ;------------------------------------------------- prev_history: call print_keybar ; восст. норм. key-бар jp up1 ;------------------------------------------------- ; Ctrl+X. Вставить след. строку истории ; и войти в ком-строку ;------------------------------------------------- next_history: call print_keybar ; восст. норм. key-бар jp down1 ;------------------------------------------------- ; Ctrl+O. Убрать/показать панели ;------------------------------------------------- hidden_panels: ld hl,enable_panels ld a,(hl) xor 1 ld (hl),a jr nz,hidden_off ; Скрыть панели ; выкл. вывод часов ld hl,enable_clock ; флаг ld a,(hl) ld (clock__+1),a ; сохр. флаг ld (hl),false ; восст. сист. экран до ком-строки ld c,0B3h ld a,(page_sys_screen) ; страница буфера jp screen1__ ; Показать панели hidden_off: ; сохр. сист. экран до ком-строки ld c,0B2h ld a,(page_sys_screen) ; страница буфера call screen1__ ; восст. экран менеджера call A20FC ; вывести аст. панель call change_panel ; сменить панель call A20FC ; вывести пасс. панель call change_panel call show_pointer ; вывод указателя ; вкл. вывод часов ld a,(clock__+1) ld (enable_clock),a ret