flex_nav/fn_bar.a80
savelij13 8f458146bc - для ошибок у которых нет текста описания теперь выдает всегда
текст ошибки "Unknown Error".
- исправлена ошибка приводящая к вылету при копировании нескольких файлов
  на уже существующие и выборе отмены от продолжения копирования.
2026-01-22 17:36:03 +03:00

599 lines
11 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; LAST UPDATE: 01.08.2025 savelij
;[]-----------------------------------------------------------[]
InitScrollBar LD C,(IX + SCROLLBAR.PAGE_FILES)
LD B,(IX + SCROLLBAR.PAGE_FILES + 1) ; Š®«-¢® í«¥¬. ­  áâà.
LD L,C
LD H,B
LD E,(IX + SCROLLBAR.MAX_FILES)
LD D,(IX + SCROLLBAR.MAX_FILES + 1) ; ¬ ªá.í«¥¬¥­â®¢
LD A,D
OR E
JR NZ,.L1
INC DE
.L1 OR A
SBC HL,DE
JR C,.L2
ADD HL,DE
EX DE,HL
.L2 PUSH DE
LD E,(IX + SCROLLBAR.MAX_LEN)
LD D,(IX + SCROLLBAR.MAX_LEN + 1) ; Š®«-¢® ¢¨¤. í«¥¬. * à §¬¥à ¡ à 
CALL Mul_16X16_32b ; DE * BC = HL + DE
POP BC ; /¬ ªá.í«¥¬¥­â®¢
CALL Div_32X16_16b_16b ; HL + DE / BC = DE (HL-®áâ)
LD A,H
OR L
JR Z,.L3
INC DE
.L3 LD HL,0x0003
SBC HL,DE
JR C,.L4
LD DE,0x0003
.L4 LD (IX + SCROLLBAR.LEN_FILES),E ; = ¤«¨­  ¡ à 
LD (IX + SCROLLBAR.LEN_FILES + 1),D ; = ¤«¨­  ¡ à 
RET
DrawHScrollBar: PUSH IY
GETPORT WINSP.Y_PORT
PUSH AF
GETPORT WINSP.CPU1
LD IYL,A
LD L,(IX + SCROLLBAR.FIRST_FILE) ; FirstFile
LD H,(IX + SCROLLBAR.FIRST_FILE + 1)
LD E,(IX + SCROLLBAR.PAGE_FILES)
LD D,(IX + SCROLLBAR.PAGE_FILES + 1)
LD C,(IX + SCROLLBAR.MAX_FILES) ; EquipFiles
LD B,(IX + SCROLLBAR.MAX_FILES + 1)
LD A,B
OR C
JR NZ,.L1
INC BC
.L1 PUSH BC
PUSH HL
ADD HL,DE
SBC HL,BC
POP HL
JR C,.L2
JR Z,.L2
LD L,C
LD H,B
SBC HL,DE
JR NC,.L2
LD HL,0x0000
.L2 EX DE,HL
LD C,(IX + SCROLLBAR.MAX_LEN)
LD B,(IX + SCROLLBAR.MAX_LEN + 1)
CALL Mul_16X16_32b
POP BC
CALL Div_32X16_16b_16b
LD A,D
OR E
JR Z,.L3
PUSH DE
SRL D
RR E
JR NC,.L4
INC DE
.L4 LD L,(IX + SCROLLBAR.X)
LD H,(IX + SCROLLBAR.X + 1)
SRL H
RR L
SET 6,H
LD A,(IX + SCROLLBAR.Y)
LD C,A
LD B,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x08
ACCEL ACCELCMD.OFF
.L5 LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L5
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
POP DE
.L3 PUSH DE
LD L,(IX + SCROLLBAR.X)
LD H,(IX + SCROLLBAR.X + 1)
ADD HL,DE
LD E,(IX + SCROLLBAR.LEFT_FILES)
LD D,(IX + SCROLLBAR.LEFT_FILES + 1)
LD A,D
OR E
JR Z,.L6
EX DE,HL
SETPORT WINSP.Y_PORT,0xC0
LD (HL),E
INC HL
LD (HL),D
EX DE,HL
.L6 PUSH HL
SRL H
RR L
SET 6,H
LD A,(IX + SCROLLBAR.Y)
LD C,A
LD E,(IX + SCROLLBAR.LEN_FILES)
LD D,(IX + SCROLLBAR.LEN_FILES + 1)
LD A,D
OR A
JR NZ,.L7
LD A,E
CP 0x06
JR NC,.L7
LD E,0x06
.L7 SRL D
RR E
JR C,.L8
DEC DE
.L8 DEC DE
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x06
ACCEL ACCELCMD.OFF
LD B,COLORP.WHITE + COLORI.WHITE;0xFF
LD A,C
SETPORT WINSP.Y_PORT,,0
LD (HL),B
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
LD (HL),0xF7
INC HL
.L9 LD A,C
SETPORT WINSP.Y_PORT,,0
LD (HL),B
INC A
SETPORT WINSP.Y_PORT,,0
LD A,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
ACCEL ACCELCMD.FILL_VERT
LD (HL),A
ACCEL ACCELCMD.OFF
LD (HL),COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L9
LD A,C
SETPORT WINSP.Y_PORT,,0
LD (HL),0xF7
INC A
SETPORT WINSP.Y_PORT,,0
LD A,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
ACCEL ACCELCMD.FILL_VERT
LD (HL),A
ACCEL ACCELCMD.OFF
LD (HL),A
INC HL
EX DE,HL
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
POP HL
LD C,(IX + SCROLLBAR.LEN_FILES)
LD B,(IX + SCROLLBAR.LEN_FILES + 1)
PUSH BC
ADD HL,BC
LD C,(IX + SCROLLBAR.RIGHT_FILES)
LD B,(IX + SCROLLBAR.RIGHT_FILES + 1)
LD A,B
OR C
JR Z,.L10
SETPORT WINSP.Y_PORT,0xC0
LD A,L
LD (BC),A
INC BC
LD A,H
LD (BC),A
.L10 POP BC
LD L,(IX + SCROLLBAR.MAX_LEN)
LD H,(IX + SCROLLBAR.MAX_LEN + 1)
OR A
SBC HL,BC
POP BC
JR Z,.L11
JR C,.L11
OR A
SBC HL,BC
JR Z,.L11
JR C,.L11
EX DE,HL
SRL D
RR E
JR Z,.L11
LD A,(IX + SCROLLBAR.Y)
LD C,A
LD B,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x08
ACCEL ACCELCMD.OFF
.L12 LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L12
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
.L11 POP AF
SETPORT WINSP.Y_PORT,,0
POP IY
RET
DrawVScrollBar: PUSH IY
GETPORT WINSP.Y_PORT
PUSH AF
GETPORT WINSP.CPU1
LD IYH,A
LD L,(IX + SCROLLBAR.FIRST_FILE) ; FirstFile
LD H,(IX + SCROLLBAR.FIRST_FILE + 1)
LD E,(IX + SCROLLBAR.PAGE_FILES)
LD D,(IX + SCROLLBAR.PAGE_FILES + 1)
LD C,(IX + SCROLLBAR.MAX_FILES) ; EquipFiles
LD B,(IX + SCROLLBAR.MAX_FILES + 1)
LD A,B
OR C
JR NZ,.L1
INC BC
.L1 PUSH BC
PUSH HL
ADD HL,DE
SBC HL,BC
POP HL
JR C,.L2
JR Z,.L2
LD L,C
LD H,B
SBC HL,DE
JR NC,.L2
LD HL,0x0000
.L2 EX DE,HL
LD C,(IX + SCROLLBAR.MAX_LEN)
LD B,(IX + SCROLLBAR.MAX_LEN + 1)
CALL Mul_16X16_32b
POP BC
CALL Div_32X16_16b_16b
LD A,(IX + SCROLLBAR.Y)
LD IYL,A
LD A,D
OR E
JR Z,.L3
PUSH DE
LD A,E
LD (.L4),A
LD L,(IX + SCROLLBAR.X)
LD H,(IX + SCROLLBAR.X + 1)
SRL H
RR L
SET 6,H
LD D,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.L4 EQU $-1
ACCEL ACCELCMD.OFF
LD B,0x08
.L5 LD A,IYL
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),D
ACCEL ACCELCMD.OFF
INC HL
DJNZ .L5
LD A,IYL
ADD A,E
LD IYL,A
LD A,IYH
SETPORT WINSP.CPU1,,0
EI
POP DE
.L3 PUSH DE
LD L,(IX + SCROLLBAR.Y)
LD H,(IX + SCROLLBAR.Y + 1)
ADD HL,DE
LD E,(IX + SCROLLBAR.LEFT_FILES)
LD D,(IX + SCROLLBAR.LEFT_FILES + 1)
LD A,D
OR E
JR Z,.L6
EX DE,HL
SETPORT WINSP.Y_PORT,0xC0
LD (HL),E
INC HL
LD (HL),D
EX DE,HL
.L6 PUSH HL
LD L,(IX + SCROLLBAR.X)
LD H,(IX + SCROLLBAR.X + 1)
SRL H
RR L
SET 6,H
LD A,(IX + SCROLLBAR.LEN_FILES)
LD C,A
SUB 0x02
LD (.L7),A
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.L7 EQU $-1
ACCEL ACCELCMD.OFF
LD DE,(COLORP.WHITE + COLORI.WHITE) << 8 + COLORP.HIGHGRAY + COLORI.HIGHGRAY;0xFF88
LD A,IYL
SETPORT WINSP.Y_PORT,,0
LD (HL),D
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),D
ACCEL ACCELCMD.OFF
LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7
INC HL
LD B,0x06
.L8 LD A,IYL
SETPORT WINSP.Y_PORT,,0
LD (HL),D
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
LD (HL),COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
INC HL
DJNZ .L8
LD A,IYL
SETPORT WINSP.Y_PORT,,0
LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7
INC A
SETPORT WINSP.Y_PORT,,0
LD A,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
ACCEL ACCELCMD.FILL_VERT
LD (HL),A
ACCEL ACCELCMD.OFF
LD (HL),A
INC HL
LD A,IYL
ADD A,C
LD IYL,A
LD A,IYH
SETPORT WINSP.CPU1,,0
EI
POP HL
LD C,(IX + SCROLLBAR.LEN_FILES)
LD B,(IX + SCROLLBAR.LEN_FILES + 1)
PUSH BC
ADD HL,BC
LD C,(IX + SCROLLBAR.RIGHT_FILES)
LD B,(IX + SCROLLBAR.RIGHT_FILES + 1)
LD A,B
OR C
JR Z,.L9
SETPORT WINSP.Y_PORT,0xC0
LD A,L
LD (BC),A
INC BC
LD A,H
LD (BC),A
.L9 POP BC
LD L,(IX + SCROLLBAR.MAX_LEN)
LD H,(IX + SCROLLBAR.MAX_LEN + 1)
OR A
SBC HL,BC
POP BC
JR Z,.L10
JR C,.L10
OR A
SBC HL,BC
JR Z,.L10
JR C,.L10
LD A,L
LD (.L11),A
LD L,(IX + SCROLLBAR.X)
LD H,(IX + SCROLLBAR.X + 1)
SRL H
RR L
SET 6,H
LD D,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.L11 EQU $-1
ACCEL ACCELCMD.OFF
LD B,0x08
.L12 LD A,IYL
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),D
ACCEL ACCELCMD.OFF
INC HL
DJNZ .L12
LD A,IYH
SETPORT WINSP.CPU1,,0
EI
.L10 POP AF
SETPORT WINSP.Y_PORT,,0
POP IY
RET
;[]-----------------------------------------------------------[]
; ¨­¨æ¨ «¨§ æ¨ï ¨­¤¨ªâ®à  ¯à®æ¥áá 
InitProgressBar SUB A
LD (IX + PROGRESSBAR.CURR_PAGE),A
LD (IX + PROGRESSBAR.CURR_PAGE + 1),A
LD (IX + PROGRESSBAR.CURR_PAGE + 2),A
LD (IX + PROGRESSBAR.CURR_PAGE + 3),A
LD (IX + PROGRESSBAR.CORR_INDEX),A
LD (IX + PROGRESSBAR.CORR_INDEX + 1),A
LD C,(IX + PROGRESSBAR.MAX_LEN) ; Œ ªá/¬ ªá.¤«¨­ã ¯à®æ¥á 
LD B,(IX + PROGRESSBAR.MAX_LEN + 1)
LD E,(IX + PROGRESSBAR.MAX_PAGES)
LD D,(IX + PROGRESSBAR.MAX_PAGES + 1)
LD L,(IX + PROGRESSBAR.MAX_PAGES + 2)
LD H,(IX + PROGRESSBAR.MAX_PAGES + 3)
CALL Div_32X16_16b_16b ; HLDE / BC = DE, (HL-®áâ â®ª)
LD A,H
OR L
JR Z,.L2
INC DE ; = ª®íä䍿¨¥­â
.L2 LD HL,9
OR A
SBC HL,DE
JR C,.L1
LD A,(IX + PROGRESSBAR.MAX_PAGES + 2)
OR (IX + PROGRESSBAR.MAX_PAGES + 3)
JR NZ,.L1
LD E,(IX + PROGRESSBAR.MAX_PAGES)
LD D,(IX + PROGRESSBAR.MAX_PAGES + 1)
LD BC,1000
LD (IX + PROGRESSBAR.CORR_INDEX),C
LD (IX + PROGRESSBAR.CORR_INDEX + 1),B
CALL Mul_16X16_32b
LD C,(IX + PROGRESSBAR.MAX_LEN) ; Œ ªá/¬ ªá.¤«¨­ã ¯à®æ¥á 
LD B,(IX + PROGRESSBAR.MAX_LEN + 1)
CALL Div_32X16_16b_16b ; HLDE / BC = DE, (HL-®áâ â®ª)
.L1 LD (IX + PROGRESSBAR.INDEX),E
LD (IX + PROGRESSBAR.INDEX + 1),D
RET
DrawProgressBar:
PUSH IY
GETPORT WINSP.Y_PORT
PUSH AF
GETPORT WINSP.CPU1
LD IYL,A
LD E,(IX + PROGRESSBAR.CURR_PAGE)
LD D,(IX + PROGRESSBAR.CURR_PAGE + 1)
LD L,(IX + PROGRESSBAR.CURR_PAGE + 2)
LD H,(IX + PROGRESSBAR.CURR_PAGE + 3)
LD A,(IX + PROGRESSBAR.CORR_INDEX)
OR (IX + PROGRESSBAR.CORR_INDEX + 1)
JR Z,.L1
LD C,(IX + PROGRESSBAR.CORR_INDEX)
LD B,(IX + PROGRESSBAR.CORR_INDEX + 1)
CALL Mul_16X16_32b
.L1 LD C,(IX + PROGRESSBAR.INDEX)
LD B,(IX + PROGRESSBAR.INDEX + 1)
CALL Div_32X16_16b_16b
LD L,(IX + PROGRESSBAR.X)
LD H,(IX + PROGRESSBAR.X + 1)
SRL H
RR L
SET 6,H
LD A,D
OR E
JR Z,.L2
PUSH DE
PUSH HL
LD L,(IX + PROGRESSBAR.MAX_LEN)
LD H,(IX + PROGRESSBAR.MAX_LEN + 1)
OR A
SBC HL,DE
JR NC,.L3
ADD HL,DE
EX DE,HL
.L3 POP HL
SRL D
RR E
JR NC,.L4
INC DE
.L4 LD A,(IX + PROGRESSBAR.Y)
LD C,A
LD A,(IX + PROGRESSBAR.COLOR)
AND 0xF0
LD B,A
RRCA
RRCA
RRCA
RRCA
OR B
LD B,A
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x0A
ACCEL ACCELCMD.OFF
.L5 LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L5
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
POP DE
.L2 PUSH HL
LD L,(IX + PROGRESSBAR.MAX_LEN)
LD H,(IX + PROGRESSBAR.MAX_LEN + 1)
OR A
SBC HL,DE
EX DE,HL
POP HL
JR Z,.L6
JR C,.L6
SRL D
RR E
JR NC,.L7
INC DE
.L7 LD A,(IX + PROGRESSBAR.Y)
LD C,A
LD A,(IX + PROGRESSBAR.COLOR)
AND 0x0F
LD B,A
RLCA
RLCA
RLCA
RLCA
OR B
LD B,A
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x0A
ACCEL ACCELCMD.OFF
.L8 LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L8
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
.L6 POP AF
SETPORT WINSP.Y_PORT,,0
POP IY
RET