;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Хэндлы страниц менеджера id_block: db -1 ; дескриптор выдел. блока памяти ; page_sys_screen: db -1 ; +0 сист. экран, +2800h данные user-menu page_dial_screen: db -1 ; буфер сохр. диал. окон и верт. меню page_left_dir: db -1 ; список левой панели page_right_dir: db -1 ; список правой панели page_manager: db -1 ; осн. код менеджера page_module0: db -1 ; драйверы клавы, мышки, диал. код с обраб. page_module1: db -1 ; описатели панелей page_spec: db -1 ; страница разбора спек-функций page_viewer: db -1 ; страница вьюера ; ;db -1 db 0 ; стоп-байт ; DSS_PAGE: db -1 ; сохр. порт 82h port_E2: db -1 ; сохр. порт 0E2h port_89: db -1 ; сохр. порт 89h ; lastdrive: db 'B'-'A' ; последний диск в системе (0..25) ;------------------------------------------------- ; Вызов ДОС-рестарта ;------------------------------------------------- int10: PUSH AF di ld a,(DSS_PAGE) ; дос-страница out (SLOT0),a ei POP AF rst ToDSS int__: PUSH AF di ld a,(page_module0) out (SLOT0),a ; восст. стр. драйверов клавы, мышки ei POP AF ret ;------------------------------------------------- ; Вызов RST 18h ;------------------------------------------------- int18: PUSH AF di ld a,(DSS_PAGE) ; дос-страница out (SLOT0),a ei POP AF rst ToDSS.DRV jr int__ ;------------------------------------------------- ; Вызов RST 10h из спек-страницы ;------------------------------------------------- alt10: PUSH AF di ld a,(DSS_PAGE) ; дос-страница out (SLOT0),a ei POP AF rst ToDSS alt__: PUSH AF di ld a,(page_spec) out (SLOT0),a ; восст. стр. ei POP AF ret ;------------------------------------------------- ; Вызов RST 18h из спек-страницы ;------------------------------------------------- alt18: PUSH AF di ld a,(DSS_PAGE) ; дос-страница out (SLOT0),a ei POP AF rst ToDSS.DRV jr alt__ ;----------------------------------------------------------------------- INCLUDE 'fview_core.asm' ; процедуры выхода из гляделки ;----------------------------------------------------------------------- ; рабочий буфер ФМ work_buffer: ds 512 ds 80 stack: ; стек ФМ begin: ; узнать boot-диск системы ld bc,0009h rst ToDSS add a,"A" ld (ccp_name),a ; launch.asm ; иниц. номера страниц в структурах панелей ld a,(page_left_dir) ld (cash_left_dir),a ld a,(page_right_dir) ld (cash_right_dir),a ; вкл. в #4000 стр. ФМ ld a,(page_module1) out (SLOT1),a ; сохр. тек. диск ld c,2 rst ToDSS ld (save_disk),a ; сохр. текущий путь ld hl,save_path ld c,1Eh rst ToDSS include 'shell.asm' ; файлер include 'fillstr.asm' ; заполнение строки файлера include 'event.asm' ; чтение событий include 'mouse.asm' ; мышка include 'keybar.asm' ; key-бар include 'clock.asm' ; часы панелей include 'setup.asm' ; чтение/запись ini-файла, mnu-файл include 'space.asm' ; своб. объем диска include 'hilight.asm' ; подсветка файлов include 'readdsk.asm' ; чтение новой папки include 'enter.asm' ; обработка нажатия include 'launch.asm' ; запуск файлов include 'pos.asm' ; позиц. указателя после смены списка include 'utils.asm' ; вспом. процедуры include 'copy.asm' ; копирование файлов include 'info.asm' ; info-режим панели include 'qview.asm' ; qview-режим панели include 'mkdir.asm' ; создание папки (F7) include 'delete.asm' ; удаление файла/папки (F8) include 'rename.asm' ; переименование файла (F6) ;include 'mod2/debug.asm' ; Режим работы вьюера viewer_mode: db 0 ; 0=обычный, 1=панельный attr_record: db 0 ; атрибут тек. записи списка каталога del_confirm: db true ; флаг подтв. удаления файлов/папок flag_del_non_empty: db true ; флаг подтв. удаления не пустых папок move_home_end: db false ; флаг отработки Home/End при откр. панелях enable_mnu_file:db false ; флаг наличия mnu-файла ;------------------------------------------------- ; Стандартный выход в ДОС ;------------------------------------------------- exit: ld a,b ld (return_code+1),a ; сохр. код возврата ; восст. ДОС-страницу di ld a,(DSS_PAGE) out (SLOT0),a ei ; полож. сист. мышки по местному драйверу Xcoord+1: ld hl,0 ; координата X (0..639) Ycoord+1: ld de,0 ; координата Y (0..255) ld c,4 ; уст. полож. мышки rst 30h ; уст. сист. диск и путь акт. панели call set_path_from_activ_panel ; восст. значение порта ld a,(port_89) out (PORT_Y),a ; восст. сист. экран ld c,0B3h ld a,(page_sys_screen) ; страница буфера call screen__ ; восст. значение порта ld a,(port_E2) out (SLOT3),a ; восст. полож. курсора сист. экрана sys_cursor_coords: ld de,0 ld c,84h rst 08h ; освоб. выделенный блок памяти ld a,(id_block) ld c,3Eh rst ToDSS ; очистить буфер сист. клавы ld bc,3135h rst ToDSS return_code: ld b,0 ; код возврата ld c,41h rst ToDSS ret ;----------------------------------------------------------- ; Сохранить/восст. полный системный экран ;----------------------------------------------------------- ; вход: C = #B2/#B3 сохр./восст. экран ; A = номер страницы буфера окна screen__: ld hl,2050h ; высота/ширина экрана scrn1__: ld ix,0C000h ; адрес буфера для данных scrn2__: ld b,a xor a ; идентиф. глоб. окна ld e,a ; X полож. ld d,a ; Y полож. di rst 08h ei ret ;----------------------------------------------------------- ; Сохранить/восст. системный экран до ком. строки ;----------------------------------------------------------- ; вход: C = #B2/#B3 сохр./восст. экран ; A = номер страницы буфера окна (page_sys_screen) screen1__: ld hl,1E50h ; высота/ширина экрана jr scrn1__ ;----------------------------------------------------------- ; Сохранить/восст. полный экран менеджера ;----------------------------------------------------------- ; in: c=#B2/#B3 сохр./восст. экран ; a=номер страницы буфера окна (page_sys_screen) screen2__: ld hl,2050h ; высота/ширина экрана ld ix,0C000h+1400h ; начало экрана менеджера jr scrn2__ ;----------------------------------------------------------- ; Рестарт для Меню и диал. окон ;----------------------------------------------------------- scrn4__: ld b,a scrn5__: xor a ; идентиф. глоб. окна di rst 08h ei ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;