;LAST UPDATE: 30.06.2019 savelij
 
 
 
FILE_BROWSER    DI
 
                LD IYL,INTERNAL
 
                ROMCALL DEVFIND,ROM_RST83               ;ПОИСК УСТРОЙСТВ ЕСЛИ НЕ БЫЛИ НАЙДЕНЫ
 
                LD A,E
 
                AND A
 
                JR NZ,FILEBROWSE1
 
;ЕСЛИ НИ ОДНОГО УСТРОЙСТВА НЕ НАЙДЕНО, ТО ВЫВОДИМ ОШИБКУ
 
                LD IX,DEV_NOTFOUND
 
ERROR           EVOPORT WIN_A5,ROM_RST81
 
                CALL ITWINW
 
                CALL ANY_KEYS
 
                JP RESTART_MAIN
 
 
 
FILEBROWSE1     DI
 
                EVOPORT WIN_A5,ROM_RST81
 
                LD HL,FILES_EXT_ALL
 
                LD DE,EXT4FOUND
 
                LD BC,EFILES_EXT-FILES_EXT
 
                LDIR                            ;УСТАНОВКА МАСКИ РАСШИРЕНИЙ ДЛЯ ПОИСКА
 
                ROMCALL FIND_FILEITEM,ROM_RST83 ;ПОИСК 
 
                LD A,B
 
                OR C                            ;ЗДЕСЬ КОЛИЧЕСТВО НАЙДЕННЫХ ОПИСАТЕЛЕЙ В HL
 
                JR NZ,SEARCHF1
 
                LD IX,NOFILES
 
                CALL ITWINW
 
                JP SELECT_DRIVE
 
 
 
SEARCHF1        PUSH BC
 
                ROMCALL SORT_FINDFILES,ROM_RST83
 
                EVOPORT WIN_A5,ROM_RST81
 
                LD IX,LEGEND_EXT
 
                CALL ITWINW
 
                POP BC
 
FBR00           PUSH BC
 
                LD IX,FILESBROWSER
 
                CALL ITWINW
 
                EVOPORT WIN_P3,RAM_TEMP2
 
                POP BC
 
                BIT 7,(IX+7)
 
                JR NZ,FBR02
 
                LD (IX+0X0A),C
 
                LD (IX+0X0B),B                  ;КОЛИЧЕСТВО ПУНКТОВ
 
                LD L,(IX+8)
 
                LD H,(IX+9)                     ;ПОЛУЧИЛИ НОМЕР ТЕКУЩЕЙ ПОЗИЦИИ
 
                LD E,(IX+7)                     ;ПОЛУЧИЛИ ПОЗИЦИЮ КУРСОРА В ОКНЕ
 
                JR FBR06
 
 
 
OUT_TEK_DIR     BIT 3,(IX+6)                    ;ЕСЛИ МЕНЮ ТО ПЕРЕХОД НА ПРОДОЛЖЕНИЕ
 
                JP Z,OTF1
 
;ИНАЧЕ ПОКАЗ ФАЙЛОВ
 
                EVOPORT WIN_P3,RAM_TEMP2
 
                LD E,(IX+7)
 
                LD L,(IX+8)
 
                LD H,(IX+9)
 
                LD C,(IX+0X0A)
 
                LD B,(IX+0X0B)
 
                BIT 6,E
 
                JR Z,FBR06
 
                LD A,(HL)
 
                INC HL
 
                LD E,(HL)
 
                INC HL
 
                LD D,(HL)
 
                INC HL
 
                LD C,(HL)
 
                INC HL
 
                LD B,(HL)
 
                EX DE,HL
 
                LD E,A
 
                JR FBR06
 
 
 
FBR02           LD L,(IX+8)
 
                LD H,(IX+9)                     ;УКАЗАТЕЛЬ НА ТЕКУЩИЙ ПУНКТ
 
                LD A,(HL)
 
                INC HL
 
                LD E,(HL)
 
                INC HL
 
                LD D,(HL)
 
                INC HL
 
                LD (HL),C
 
                INC HL
 
                LD (HL),B
 
                EX DE,HL
 
                LD E,A
 
FBR06           XOR A
 
                LD D,A
 
                SBC HL,DE                       ;ВЫЧИСЛИЛИ ПОЗИЦИЮ ФАЙЛА С КОТОРОГО БУДЕМ ВЫВОДИТЬ
 
                LD DE,CPU3
 
                ADD HL,HL
 
                ADD HL,DE
 
                LD D,(IX+0)
 
                LD E,(IX+1)
 
                INC D
 
                INC E                           ;ВЫЧИСЛИЛИ ПОЗИЦИЮ ВЫВОДА НА ЭКРАН
 
                LD A,B
 
                AND A
 
                JR NZ,FBR07
 
                LD A,C
 
                CP V_FILES-2
 
                JR C,OTF2
 
FBR07           LD C,V_FILES-2
 
OTF2            PUSH BC
 
                LD C,(HL)
 
                INC HL
 
                LD B,(HL)
 
                INC HL
 
                PUSH HL
 
                PUSH DE
 
                ROMCALL POSTF06,ROM_RST83
 
                LD HL,BUF_256
 
                ROMCALL READ_DIR,ROM_RST83
 
                LD DE,FILES_EXT;SUPPORT_EXT
 
                ROMCALL CP_EXT,ROM_RST83
 
                EX AF,AF'
 
                POP DE
 
                PUSH DE
 
                LD BC,0X0B
 
                ADD HL,BC
 
                LD A,(HL)
 
                SBC HL,BC
 
                AND 0X10
 
                LD A,BLUE<<3+WHITE+BR_INK
 
                LD (OUT_NAME_FILE+1),A          ;ЕСЛИ ДИРЕКТОРИЯ ТО ЦВЕТ БЕЛЫЙ
 
                JR NZ,OTF9
 
                EX AF,AF'
 
                LD L,A
 
                INC A
 
                JR Z,OTF8
 
                LD A,L
 
OTF8            LD HL,COLOR_EXT
 
                ADD A,L
 
                LD L,A
 
                ADC A,H
 
                SUB L
 
                LD A,(HL)
 
                ADD A,BLUE<<3+BR_INK
 
                LD (OUT_NAME_FILE+1),A
 
OTF9            LD HL,BUF_256
 
                ROMCALL GET_LONGNAME,ROM_RST83
 
                POP DE
 
                PUSH DE
 
                CALL FILENAME8_3
 
                POP DE
 
                POP HL
 
                POP BC
 
                INC E
 
                DEC C
 
                JR NZ,OTF2
 
OTF1            EVOPORT WIN_P3,VMODE7_0
 
                JP SET_ADR_ATR
 
 
 
FILENAME8_3     LD C,A
 
                LD B,0
 
                EX DE,HL
 
                LD (OUT_NAME_FILET),HL
 
                LD HL,BUF_256
 
                LD A,H_FILES-3
 
                CP C
 
                JR Z,OTF7
 
                JR NC,OTF6
 
                EX DE,HL
 
                LD HL,H_FILES-3
 
                ADD HL,DE
 
                LD (HL),">"
 
                INC HL
 
                LD (HL),0
 
                JR OTF7
 
 
 
OTF6            SUB C
 
                ADD HL,BC
 
                LD C,A
 
                LD D,H
 
                LD E,L
 
                INC DE
 
                LD (HL)," "
 
                LDIR
 
                XOR A
 
                LD (DE),A
 
OTF7            LD HL,OUT_NAME_FILE
 
                CALL ITPRINT_MESSAGE
 
                LD HL,BUF_256
 
                JP ITPRINT_MESSAGE
 
 
 
;ВЫБОР ФАЙЛА ИЛИ ХОЖДЕНИЕ ПО ДИРЕКТОРИЯМ
 
SELECT_FILE     DI
 
                EVOPORT WIN_P3,RAM_TEMP2
 
                LD L,(IX+8)
 
                LD H,(IX+9)                     ;ВЗЯЛИ НОМЕР ФАЙЛА/ДИРЫ ИЛИ АДРЕС ГДЕ ЭТО ЛЕЖИТ
 
                BIT 7,(IX+7)
 
                JR Z,SELFILES01
 
                INC HL
 
                LD E,(HL)
 
                INC HL
 
                LD D,(HL)                       ;ЕСЛИ АДРЕС ТО ИЗВЛЕКЛИ ОТТУДА НОМЕР
 
                EX DE,HL
 
SELFILES01      LD DE,CPU3
 
                ADD HL,HL
 
                ADD HL,DE
 
                LD C,(HL)
 
                INC HL
 
                LD B,(HL)                       ;ВЗЯЛИ РЕАЛЬНЫЙ НОМЕР ФАЙЛА/ДИРЫ
 
                ROMCALL POSTF06,ROM_RST83               ;УСТАНОВИЛИ ПОЗИЦИЮ
 
                LD HL,BUF_256
 
                ROMCALL READ_DIR,ROM_RST83      ;ПОЛУЧИЛИ АДРЕС ОТКУДА ОПИСАТЕЛЬ ВЗЯТЬ
 
                PUSH HL
 
                LD DE,BUF_FILEITEM
 
                LD BC,0X20
 
                LDIR                            ;ПЕРЕНЕСЛИ ОПИСАТЕЛЬ В БУФЕР
 
                POP HL
 
                LD DE,0X0B
 
                ADD HL,DE
 
                LD A,(HL)
 
                SBC HL,DE
 
                AND 0X10                        ;ПРОВЕРЯЕМ ФАЙЛ ИЛИ ДИРА
 
                JP Z,SELFILES03                 ;ВЫБРАН ФАЙЛ ИДЕМ ДАЛЕЕ
 
;ВЫБРАНА ДИРА
 
                ROMCALL ENTER_DIR,ROM_RST83     ;ВХОДИМ В ДИРУ
 
                LD HL,BUF_PATH
 
                ROMCALL GET_PATH,ROM_RST83      ;ПОЛУЧАЕМ ПУТЬ ПОСЛЕ ВХОДА
 
                EVOPORT WIN_A5,ROM_RST81
 
                LD A,(HL)
 
                SUB "E"
 
                LD H,A
 
                LD L,0
 
                SRL H
 
                RR L
 
                SRL H
 
                RR L
 
                LD DE,BUF_WINPATH
 
                ADD HL,DE
 
                LD A,(BUF_FILEITEM)
 
                CP "."
 
                JP NZ,SELFILES02                ;ВХОД В ДИРЕКТОРИЮ
 
;ВЫХОД ИЗ ДИРЕКТОРИИ, ВОССТАНОВЛЕНИЕ УСТАНОВОК ОКНА ПРЕДЫДУЩЕГО УРОВНЯ
 
                LD A,(HL)
 
                ADD A,A
 
                ADD A,(HL)
 
                LD C,A
 
                LD B,0
 
                DEC (HL)                        ;ПЕРЕШЛИ НА ПРЕДЫДУЩУЮ ПОЗИЦИЮ
 
                INC HL
 
                ADD HL,BC
 
                DEC HL
 
                LD B,(HL)
 
                DEC HL
 
                LD C,(HL)
 
                DEC HL
 
                LD A,(HL)
 
                BIT 7,(IX+7)
 
                JR NZ,SELFILES04
 
                LD (IX+7),A
 
                LD (IX+8),C
 
                LD (IX+9),B
 
                ROMCALL FIND_FILEITEM,ROM_RST83
 
                LD (IX+0X0A),C
 
                LD (IX+0X0B),B
 
                JR SELFILES05
 
 
 
SELFILES04      LD L,(IX+8)
 
                LD H,(IX+9)
 
                LD (HL),A
 
                INC HL
 
                LD (HL),C
 
                INC HL
 
                LD (HL),B
 
                INC HL
 
                PUSH HL
 
                ROMCALL FIND_FILEITEM,ROM_RST83
 
                LD B,H
 
                LD C,L
 
                POP HL
 
                LD (HL),C
 
                INC HL
 
                LD (HL),B
 
SELFILES05      PUSH BC
 
                ROMCALL SORT_FINDFILES,ROM_RST83
 
                POP BC
 
                JP FBR00
 
 
 
;ВХОД В ДИРЕКТОРИЮ, СОХРАНЕНИЕ ТЕКУЩИХ УСТАНОВОК ОКНА
 
SELFILES02      LD A,(HL)
 
                CP 0X10
 
                RET NC
 
                LD A,(HL)
 
                ADD A,A
 
                ADD A,(HL)
 
                INC (HL)
 
                INC HL
 
                LD C,A
 
                LD B,0
 
                ADD HL,BC
 
                BIT 7,(IX+7)
 
                JR NZ,SELFILES06
 
                LD A,(IX+7)
 
                LD (HL),A
 
                INC HL
 
                LD A,(IX+8)
 
                LD (HL),A
 
                INC HL
 
                LD A,(IX+9)
 
                LD (HL),A
 
                INC HL
 
                ROMCALL FIND_FILEITEM,ROM_RST83
 
                XOR A
 
                LD (IX+7),A
 
                LD (IX+8),A
 
                LD (IX+9),A
 
                LD (IX+0X0A),L
 
                LD (IX+0X0B),H
 
                LD B,H
 
                LD C,L
 
                JP SELFILES05
 
 
 
SELFILES06      LD E,(IX+8)
 
                LD D,(IX+9)
 
                EX DE,HL
 
                LDI
 
                LDI
 
                LDI
 
                ROMCALL FIND_FILEITEM,ROM_RST83
 
                LD L,(IX+8)
 
                LD H,(IX+9)
 
                XOR A
 
                LD (HL),A
 
                INC HL
 
                LD (HL),A
 
                INC HL
 
                LD (HL),A
 
                JP SELFILES05
 
 
 
SELFILES03      LD HL,BUF_FILEITEM
 
                LD DE,FILES_EXT;SUPPORT_EXT
 
                ROMCALL CP_EXT,ROM_RST83
 
                CP _SPG                         ;ТОЛЬКО ОБРАЗЫ TRD,SCL,FDI,TAP
 
                RET NC
 
                LD (EXT_TYPE),A
 
                CP _TAP
 
                JR Z,SEL_TAP
 
                CP _TRD
 
                JR NZ,LOADIMAGES
 
                LD IX,SEL_MOUNT                 ;ВЫВОД МЕНЮ МОНТИРОВАНИЯ ИЛИ ЗАГРУЗКИ В РАМДИСК
 
                CALL ITWINW
 
                JP SET_ADR_ATR
 
 
 
;ЕСЛИ ВЫБРАН TAP ТО ПРИНУДИТЕЛЬНОЕ ВКЛЮЧЕНИЕ ЭМУЛЯЦЦИИ ЛЕНИЫ
 
SEL_TAP         LD H,CMOS_BYTE_00
 
                CALL READCMOS
 
                OR M_EMUL_TAPE
 
                LD L,A
 
                CALL IWRITECMOS
 
LOADIMAGES      ROMCALL LOADIMAGE,ROM_RST83
 
                JP C,ERROR
 
                JP RESTART_MAIN
 
 
 
MOUNT_A         XOR A
 
                JR MOUNT_TRD
 
 
 
MOUNT_B         LD A,1
 
                JR MOUNT_TRD
 
 
 
MOUNT_C         LD A,2
 
                JR MOUNT_TRD
 
 
 
MOUNT_D         LD A,3
 
MOUNT_TRD       ROMCALL OPEN_MOUNT_INT,ROM_RST83
 
                JP RESTART_MAIN
 
 
 
;СМЕНА ДИСКА/РАЗДЕЛА
 
SELECT_DRIVE    DI
 
                LD IX,ENMI_SERVICE              ;ОПИСАТЕЛЬ ОКНА ВЫБОРА ДИСКА/РАЗДЕЛА
 
                LD HL,SEL_DRIVE
 
                LD D,IXH
 
                LD E,IXL
 
                LD BC,ESEL_DRIVE-SEL_DRIVE
 
                LDIR
 
                LD BC,0X14-(ESEL_DRIVE-SEL_DRIVE)
 
                EX DE,HL
 
                ADD HL,BC
 
                LD (IX+0X0C),L
 
                LD (IX+0X0D),H
 
                EX DE,HL
 
                LD BC,ETXT_SELDRIVES-TXT_SELDRIVES
 
                LDIR
 
                LD A,(SETDVOL)                  ;НОМЕР ТЕКУЩЕГО ДИСКА/РАЗДЕЛА
 
                LD (IX+7),A
 
                LD (IX+8),A
 
                LD (IX+9),0
 
                LD A,(KOLDVOL)                  ;КОЛИЧЕСТВО РАЗДЕЛОВ
 
                LD (IX+0X0A),A
 
                LD (IX+0X0B),0
 
                LD B,A
 
                ADD A,2
 
                LD (IX+2),A                     ;УСТАНОВИЛИ ВЫСОТУ ОКНА
 
                PUSH DE
 
                LD DE,6
 
                LD HL,BUF_TABLVOL
 
                EXX
 
                POP HL
 
                EXX
 
SELECTDRIVE1    EXX
 
                LD (HL),0X0D
 
                INC HL
 
                LD (HL)," "
 
                INC HL
 
                EXX
 
                LD A,(HL)
 
                INC HL
 
                LD C,(HL)
 
                INC HL
 
                ADD A,C
 
                ADD A,C
 
                SUB 4
 
                ADD A,A
 
                ADD A,A
 
                ADD A,A
 
                ADD A,A
 
                EXX
 
                EX DE,HL
 
                LD HL,TXT4MENU_DEVICE
 
                LD C,A
 
                LD B,0
 
                ADD HL,BC
 
                LD BC,0X10
 
                EXX
 
                LD A,L
 
                EXX
 
                RRCA
 
                RRCA
 
                RRCA
 
                AND 0X1F
 
                ADD A,"E"
 
                LD (DE),A
 
                INC DE
 
                LDIR
 
                EXX
 
                LD A,(HL)
 
                EXX
 
                LD C,A
 
                ADD A,A
 
                ADD A,A
 
                ADD A,C
 
                LD HL,TXT4MENU_TYPE
 
                LD C,A
 
                ADD HL,BC
 
                LD C,5
 
                LDIR
 
                EX DE,HL
 
                EXX
 
                ADD HL,DE
 
                DJNZ SELECTDRIVE1
 
                EXX
 
                LD (HL),0
 
                INC HL
 
                LD B,(IX+2)
 
                DEC B
 
                DEC B
 
                LD C,B
 
                LD A,"e"
 
                LD (IX+0X12),L
 
                LD (IX+0X13),H                  ;УСТАНОВКА АДРЕСА ГОРЯЧИХ КЛАВИШ МЕНЮ
 
                LD (HL),B
 
                INC HL
 
SELECTDRIVE2    LD (HL),A
 
                INC HL
 
                INC A
 
                DJNZ SELECTDRIVE2
 
                LD (IX+0X0E),L
 
                LD (IX+0X0F),H                  ;УСТАНОВКА АДРЕСА СПИСКА ПОДПРОГРАММ
 
                LD B,C
 
SELECTDRIVE3    LD (HL),LOW (SELDRIVE)
 
                INC HL
 
                LD (HL),HIGH (SELDRIVE)
 
                INC HL
 
                DJNZ SELECTDRIVE3
 
                LD A,C
 
                EXX
 
                DEC A
 
                CALL ITWINW
 
                JP SET_ADR_ATR
 
 
 
SELDRIVE        LD A,(IX+7)
 
                ROMCALL SET_VOL,ROM_RST83
 
                JP FILEBROWSE1