        MAIN "",134

DrwFiler
        RET 

; +18
; x, y, за раз эл-ов, всего эл-ов, высота, позиция после "за-раз
Scroll  PUSH IX
        LD L,(IX+18)
        LD H,(IX+19)
        CPHL0
        JP Z,PopIX2

        PUSH HL
        POP IX
        LD D,(IX+0)
        LD E,(IX+1)
        CALL RealWin

        LD A,(ARW_XC)
        CP D
        JR NZ,PopIX2
        LD A,(ARW_YC)
        INC A
        CP E
        JR C,PopIX2
        LD A,(IX+4)
        CALL Adiv8
        ADD A,E
        LD HL,ARW_YC
        CP (HL)
        JR C,PopIX2

        DEC E
        LD A,D
        LD D,E
        LD E,A

        LD HL,(ARW_XC)
        AND A
        SBC HL,DE
        JR Z,ScrUp
        LD A,(IX+4)
        CALL Adiv8
        ADD A,D
        INC A
        LD D,A
        LD HL,(ARW_XC)
        AND A
        SBC HL,DE
        JR Z,ScrDn

        XOR A
        LD (IX+5),A

fucker  CALL Schet
        EX AF,AF'
        SRL A
        ADD A,E
        INC A
        LD E,A

        LD A,(ARW_Y)
        CP E
        JR NC,ZAA

sdirr   POP IX
        HALT 
        CALL DrwScroll
        CALL DIRSCN
        CALL MOVES
        JR sdir

ZAA     LD A,(IX+3)
        SUB (IX+2)
        LD B,A
        LD A,(IX+5)
        CP B
        JR NC,zaa
        INC A
        LD (IX+5),A
        JR fucker

zaa     LD A,(IX+3)
i       SUB (IX+2)
        LD (IX+5),A
        JR sdirr

PopIX2  POP IX
        RET 

ScrDn   LD A,(IX+3)
        SUB (IX+2)
        DEC A
        CP (IX+5)
        JR C,scrdn
        INC (IX+5)
scrdn   JR scrup

ScrUp   LD A,(IX+5)
        AND A
        JR Z,scrup
        DEC (IX+5)
scrup   POP IX
        HALT 
        CALL DrwScroll
        CALL DIRSCN
sdir    LD A,(DIRECT)
        AND #10
        JP Z,Arrow
        JP Scroll

DrwScroll
        PUSH IX
        LD L,(IX+18)
        LD H,(IX+19)
        CPHL0
        JR Z,PopIX2

        PUSH HL
        POP IX
        LD D,(IX+0)
        LD E,(IX+1)
        CALL RealWin
        PUSH DE

        DEC E
        CALL RASCH
        PUSH DE
        LD DE,SUP
        LD BC,#0108
        CALL Sprite
        POP DE

        LD A,(IX+4)
        CALL Adiv8
        ADD A,E
        LD E,A
        INC E
        CALL RASCH

        LD DE,SDN
        LD BC,#0108
        CALL Sprite

        POP DE
        CALL RASCH

        LD A,(IX+4)
        LD B,A
Lp18    LD (HL),%01000001
        CALL INC_Y
        DJNZ Lp18

        CALL Schet
        CALL PixHL

        EX AF,AF'
        LD B,A

Lp19    LD (HL),%01011101
        CALL INC_Y
        DJNZ Lp19
        JP PopIX1

Schet   LD D,(IX+0)
        LD E,(IX+1)
        CALL RealWin

        EX DE,HL
        CALL HLdiv8
        PUSH HL

        XOR A
        LD H,A
        LD D,A
        LD A,(IX+3)
        SUB (IX+2)
        LD L,A
        LD B,3      ; умножаем на 8
        CALL mul256                
        LD E,(IX+4)
        ADD HL,DE

        LD B,4
        CALL mul256
        CALL DIV

        PUSH HL
        LD H,0
        LD L,(IX+4)
        CALL MUL256
        POP DE
        CALL DIV
        LD B,4
        CALL div256

        LD A,L
        LD (SM1),A
        EX AF,AF'

; x, y, за раз эл-ов, всего эл-ов, высота, позиция

        XOR A
        LD D,A
        LD H,A
        LD A,(IX+3)
        SUB (IX+2)
        LD E,L
        LD L,(IX+4)
        AND A
        SBC HL,DE
        CALL MUL256

        LD D,0
        LD E,A
        CALL DIV
        EX DE,HL
        LD B,0
        LD C,(IX+5)
        CALL MUL16
        CALL DIV256
        LD A,L

        LD B,A
        LD A,0
SM1     EQU $-1
        ADD A,B
        CP (IX+4)
        JR C,ZA

        SUB (IX+4)
        LD B,A
        LD A,L
        SUB B

ZA      LD A,(IX+3)
        SUB (IX+2)
        CP (IX+5)
        JR NZ,zak

        POP DE
        EX AF,AF'
        PUSH AF
        EX AF,AF'
        POP BC

        LD A,(IX+4)
        ADD A,E
        SUB B
        LD E,A
        RET 

zak     LD A,L
        POP DE
        ADD A,E
        LD E,A
        RET 

; для вычисления общей длины ползунка

;+-----------------------+
;|      HL = HL/DE       |
;+-----------------------+
DIV     LD B,D
        LD C,E
        LD D,H
        LD E,L
        CALL Div
        LD H,D
        LD L,E
        RET 

Div     PUSH BC         ;DE = DE/BC С ОКРУГЛЕНИЕМ ОТВЕТА
        LD A,B
        CPL 
        LD B,A
        LD A,C
        CPL 
        LD C,A
        INC BC
        LD HL,0
        LD A,E
        ADD A,A
        RL D
        DUP 16
        ADC HL,HL
        ADD HL,BC
        JR C,$+4
        SBC HL,BC
        RLA 
        RL D
        EDUP 
        LD E,A
        POP BC
        SRL B
        RR C
        OR A
        SBC HL,BC
        RET C
        INC DE
        RET 
;+-----------------------+
;|     HL = DE*BC        |
;+-----------------------+

MUL16   LD      HL,0
MUL16_2 LD      A,B
        OR      C
        RET     Z
        SRL     B
        RR      C
        JP      NC,MUL16_0
        ADD     HL,DE
MUL16_0 SLA     E
        RL      D
        JP      MUL16_2

MUL256  LD B,8
mul256  ADD HL,HL
        DJNZ mul256
        RET 

DIV256  LD B,8
div256  RR H
        RR L
        DJNZ div256
        RET 

        DISPLAY "ScrBar:           ",$-Scroll
