;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