; Последнее редактирование: 4.01.2006 ; ; В странице (page_sys_screen) сохранения сист. экрана и временного ; сохранения экрана менеджера, по адресу #E800 находятся буферы ; данных User-меню. Остаток страницы после всего массива #0944 байт. ; ; При сканировании папки (процедура ScanTree), для врем. буфера выделяется ; 1 страница памяти. После отработки процедуры, страница освобождается. ; ; ; include 'shared_includes/constants/Sp2000.inc' EDEPTH equ 36 ; слишком большая влож. папок или >= 1024 папок EUABORT equ 37 ; User abort (операция прервана пользователем) max_len_comline equ 126;254 ; макс. длина ком-строки (больше не делать) history_size equ 128;256 ; размер history-буфера ; Адреса секций врем. массива цветов в буфере ;tmp_color_list equ work_buffer + 511 - len_color_array ; начало врем. массива ;color_list2 equ tmp_color_list + col_lst1 ;color_list3 equ color_list2 + col_lst2 ;color_list4 equ color_list3 + col_lst3 ;color_list5 equ color_list4 + col_lst4 ;color_list6 equ color_list5 + col_lst5 ;color_list7 equ color_list6 + col_lst6 ;color_list8 equ color_list7 + col_lst7 ;color_list9 equ color_list8 + col_lst8 ;color_list10 equ color_list9 + col_lst9 ;color_list11 equ color_list10 + col_lst10 ;---- Цвета менеджера ---- ; Панель color_pointer equ 3Fh ; указатель color_markpoint equ 3Eh ; выдел. указатель color_panel equ 1Bh ; панель/список файлов color_markfile equ 1Eh ; помеч. файлы списка color_seltitle equ 3Fh ; выдел. титл панели color_title equ 1Eh ; титл колонок панели color_markline equ 3Eh ; информ. строка отмеч. файлов color_highlighted_info equ 1Eh ; данные в info/qview панелях color_info_names equ 1Fh ; файлы/путь в info/qview панелях ; Гориз. меню color_hmenu equ 30h ; меню color_hmenu_pointer equ 0Fh ; указатель color_hmenu_hotkey equ 0Eh ; hot-буквы ; Pull-меню color_vmenu equ 3Fh ; popup-меню color_vmenu_pointer equ 0Fh ; указатели меню color_vmenu_hotkey equ 0Eh ; hot-буквы меню (мл.ниббл) ; Key-бар kb_f equ 30h ; пункты kb_b equ 0Eh ; hot-числа ; Командная строка color_comline equ 07h ; Диал. окна color_dial_win equ 70h ; диал. окна color_dial_hotkey equ 0Eh ; hot-букв диал. окон color_sel_dial_title equ 30h ; Selected title объекта диал. окна color_info_win equ 70h ; info-окна color_warn_win equ 4Fh ; warning/errors окна color_listbox equ 17h ; ListBox color_list_point equ 2Fh ; указателя ListBox-а color_list_hpoint equ 1Eh ; после указателя color_vscrl_bar equ 13h ; скролл-бара ListBox-а color_inputline equ 30h ; строка ввода color_selbuttons equ 30h ; выдел. бутон color_selbuttons_err equ 70h ; выдел. бутон Warning/Errors окон color_shadow equ 03h ; тень окон (не настраивается) ; Вьюер color_viewer equ 1Bh ; Normal text color_viewer_seltext equ 30h ; Selected text color_viewer_status equ 30h ; Status line color_viewer_scrl_arrow equ 1Eh ; Scrolling arrows ; Редактор color_editor equ 1Bh ; Normal text color_edit_seltext equ 30h ; Selected text color_edit_status equ 30h ; Status line ; Окно помощи color_help equ 30h ; Normal text color_help_seltext equ 3Eh ; Highlighted text color_help_title equ 3Fh ; Title color_help_scrl_bar equ 30h ; Scrollbar ; Остальное color_process_line equ 30h ; линейка процесса color_clock equ 30h ; часы ; Раскраска файлов color_folder equ 1Fh ; папки color_exe equ 1Ah ; исполняемые файлы (exe,bat) color_archive equ 1Dh ; архивы color_ro equ 17h ; файлы r/o, system color_hidden equ 13h ; скрытые файлы color_spec equ 1Ch ; спек-файлы (trd, scl) ; include 'version.inc' ; версия менеджера ; export id_block ; export len_modul1 ; export len_modul2 ; export len_modul3 ; export len_modul4 ; export len_modul5 ; export stack ; export Xcoord ; export Ycoord org 8000h mod0: ; метка для вычисл. размера ;//////////////////////////////////////////////////////////////////////// ; ; Точка входа в менеджер ; ;//////////////////////////////////////////////////////////////////////// jp begin ; Хэндлы страниц менеджера 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 ; стоп-байт ; port_82: db -1 ; сохр. порт 82h port_E2: db -1 ; сохр. порт 0E2h port_89: db -1 ; сохр. порт 89h lastdrive: db 'B'-'A' ; последний диск в системе (0..25) ;------------------------------------------------- ; Вызов ДОС-рестарта ;------------------------------------------------- int10: ex af,af' di ld a,(port_82) ; дос-страница out (SLOT0),a ei ex af,af' rst 10h int__: ex af,af' di ld a,(page_module0) out (SLOT0),a ; восст. стр. драйверов клавы, мышки ei ex af,af' ret ;------------------------------------------------- ; Вызов RST 18h ;------------------------------------------------- int18: ex af,af' di ld a,(port_82) ; дос-страница out (SLOT0),a ei ex af,af' rst 18h jr int__ ;------------------------------------------------- ; Вызов RST 10h из спек-страницы ;------------------------------------------------- alt10: ex af,af' di ld a,(port_82) ; дос-страница out (SLOT0),a ei ex af,af' rst 10h alt__: ex af,af' di ld a,(page_spec) out (SLOT0),a ; восст. стр. ei ex af,af' ret ;------------------------------------------------- ; Вызов RST 18h из спек-страницы ;------------------------------------------------- alt18: ex af,af' di ld a,(port_82) ; дос-страница out (SLOT0),a ei ex af,af' rst 18h jr alt__ include 'fview/fview.inc' ; процедуры выхода из гляделки ; рабочий буфер ФМ work_buffer: ds 512 ds 80 stack: ; стек ФМ begin: ; узнать boot-диск системы ld bc,0009h rst 10h 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 10h ld (save_disk),a ; сохр. текущий путь ld hl,save_path ld c,1Eh rst 10h include 'shell.asm' ; файлер include 'mod2/fillstr.asm' ; заполнение строки файлера include 'mod2/event.asm' ; чтение событий include 'mod2/mouse.asm' ; мышка include 'mod2/keybar.asm' ; key-бар include 'mod2/clock.asm' ; часы панелей include 'mod2/setup.asm' ; чтение/запись ini-файла, mnu-файл include 'mod2/space.asm' ; своб. объем диска include 'mod2/hilight.asm' ; подсветка файлов include 'mod2/readdsk.asm' ; чтение новой папки include 'mod2/enter.asm' ; обработка нажатия include 'mod2/launch.asm' ; запуск файлов include 'mod2/pos.asm' ; позиц. указателя после смены списка include 'mod2/utils.asm' ; вспом. процедуры include 'mod2/copy.asm' ; копирование файлов include 'mod2/info.asm' ; info-режим панели include 'mod2/qview.asm' ; qview-режим панели include 'mod2/mkdir.asm' ; создание папки (F7) include 'mod2/delete.asm' ; удаление файла/папки (F8) include 'mod2/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,(port_82) 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 (89h),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 10h ; очистить буфер сист. клавы ld bc,3135h rst 10h return_code: ld b,0 ; код возврата ld c,41h rst 10h 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 mod1: ; метка для вычисл. размера ;=========================================================== ; Подгружаемый Модуль 1 ; Драйверы клавы, мышки, обработчик диал. окон, tv-объекты ;=========================================================== ; всегда подключен (кроме вызовов rst 10h, rst 18h) phase 0000h include 'mod0/vectors.asm' ; векторы прерываний include 'mod0/keybdrv.asm' ; драйвер клавы include 'mod0/cursor.asm' ; программный курсор include 'mod0/mousedrv.asm' ; драйвер мышки include 'objs/dialog.asm' ; обработчик диал. окон include 'objs/button.asm' ; объект ~Button~ include 'objs/inline.asm' ; объекты ~Input Line~, ~Inp Line~ include 'objs/listbox.asm' ; объект ~List Box~ include 'objs/radio.asm' ; объекты ~Radio Button~, ~Check Box~ include 'objs/process.asm' ; объект ~Process Line~ include 'objs/pallete.asm' ; объект ~Pallete~ include 'objs/dialog1.asm' ; объекты ~Text Line~, ~Horiz. Line~ include 'objs/hmenu.asm' ; Меню: "Horizontal", "Pull", "Select disk" include 'objs/umenu.asm' ; вызов User-Menu include 'mod0/chdisk.asm' ; вызов меню Select Disk include 'mod0/listdrv.asm' ; иниц. список типов дисков include 'mod0/usermenu.asm' ; подготовка Меню Пользователя dephase mod2: ;=========================================================== ; Подгружаемый Модуль 2 ;=========================================================== ; постоянно включен phase 4000h include 'mod1/buffers.asm' ; раб. буферы объектов include 'mod1/comline.asm' ; ком-строка include 'mod1/width.asm' ; огран. длины пути панели include 'mod1/sort.asm' ; сортировка списка include 'mod1/tree.asm' ; сканирование папки include 'mod1/pullcmnd.asm' ; переходы на выполн. pull-пунктов include 'mod1/seldrv.asm' ; выбор левого/правого дисков панелей include 'mod1/intrface.asm' ; настройка "Interface settings" include 'mod1/confirm.asm' ; настройка "Confirmations" include 'mod1/color.asm' ; настройка "Colors" include 'mod1/setcolor.asm' ; настройка цветов ФМ include 'mod1/panels.z80' ; описатели форматов панелей include 'mod1/info.z80' ; описатель info-панели include 'mod1/info2.z80' ; описатель info-панели спек-формата include 'mod1/qview.z80' ; описатель qview-панели include 'mod1/hmenu.z80' ; описатели гориз/pull меню include 'mod1/chdisk.z80' ; описатель окна Select Disk include 'mod1/umenu.z80' ; описатель окна User Menu include 'mod1/intrface.z80' ; описатель окна "Interface settings" include 'mod1/confirm.z80' ; описатель окна "Confirmations" include 'mod1/color.z80' ; описатель окна "Colors" include 'mod1/quit.z80' ; описатель окна выхода из ФМ include 'mod1/space.z80' ; описатель окна "Calc. free space disk" include 'mod1/abort.z80' ; описатель окна "Operation has been interrupted" include 'mod1/dialerr.z80' ; описатели окон ошибок include 'mod1/copy.z80' ; описатели окон копирования include 'mod1/mkdir.z80' ; описатель окна создания папки include 'mod1/delete.z80' ; описатель окна удаление файла/папки include 'mod1/rename.z80' ; описатель окна переимен. файла dephase mod3: ;=========================================================== ; Подгружаемый Модуль 3. Спек-код ;=========================================================== ; подкл. на время вызова спек-функций phase 0000h include 'spec/vect.asm' ; векторы include 'spec/funcs.asm' ; спек-функции dephase mod4: ;=========================================================== ; Подгружаемый Модуль 4. Вьюер ;=========================================================== ; подкл. на время вызова вьюера phase 4000h include 'fview/fview.asm' ; вьюер include 'fview/msfview.asm' ; события мышки include 'fview/setview.asm' ; настройка вьюера include 'fview/chfont.asm' ; win-1251, koi8-r кодовые таблицы include 'fview/fview.z80' ; описатель окна "Reading file..." dephase ; Адреса секций врем. массива цветов в буфере tmp_color_list equ work_buffer + 511 - len_color_array ; начало врем. массива color_list2 equ tmp_color_list + col_lst1 color_list3 equ color_list2 + col_lst2 color_list4 equ color_list3 + col_lst3 color_list5 equ color_list4 + col_lst4 color_list6 equ color_list5 + col_lst5 color_list7 equ color_list6 + col_lst6 color_list8 equ color_list7 + col_lst7 color_list9 equ color_list8 + col_lst8 color_list10 equ color_list9 + col_lst9 color_list11 equ color_list10 + col_lst10 addr_id_block equ id_block ; адрес ячейки id_block len_modul1 equ mod1 - mod0 ; размер осн. кода (#8000) len_modul2 equ mod2 - mod1 ; размер модуля (#0000) len_modul3 equ mod3 - mod2 ; размер модуля (#4000) len_modul4 equ mod4 - mod3 ; размер спек-модуля (#0000) len_modul5 equ $ - mod4 ; размер вьюера (#4000)