        MAIN "",134

DrwFiler
        RET 

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

        PUSH HL
        POP IX
        LD D,(IX+0)
        LD E,(IX+1)
        CALL RealWin
        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

        LD A,(IX+5)
        PUSH AF
        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

        POP AF
        POP IX

        HALT 
        CALL DrwScroll
        CALL DIRSCN
        CALL MOVES
        LD A,(DIRECT)
        AND A
        JP Z,Arrow
        JP Scroll

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     POP AF
        LD (IX+5),A
        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
        LD A,(DIRECT)
        AND #10
        JP Z,Arrow
        JP Scroll

DrwScroll
        PUSH IX
        LD L,(IX+18)
        LD H,(IX+19)
        CPHL0
        JP Z,PopIX1

        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

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

        CALL Schet
        CALL PixHL

        EX AF,AF'
        LD B,A

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

        JP PopIX1

ST      DEFW 0
SM      DEFB 0
SM1     DEFB 0

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

        DUP 3
        SLA D
        SLA E
        EDUP 
        PUSH DE

        LD A,(IX+3)
        SUB (IX+2)
        LD D,0
        LD E,A
        LD B,0
        LD C,8
        CALL MUL16
        LD D,0
        LD E,(IX+4)
        ADD HL,DE

        PUSH DE
        LD D,H
        LD E,L
        LD BC,16
        CALL MUL16
        POP DE
        CALL DIV
        LD (ST),HL

        PUSH HL
        LD D,0
        LD E,(IX+4)
        LD BC,256
        CALL MUL16
        POP DE
        CALL DIV
        LD DE,16
        CALL DIV

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

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

        LD A,(IX+3)
        SUB (IX+2)
        LD D,0
        LD E,L
        LD H,0
        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 (SM),A

        LD B,A
        LD A,(SM1)
        ADD A,B
        CP (IX+4)
        JR C,ZA

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

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,(SM)
        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=B*C
MULT    XOR A
        CP B
        JR Z,ZERO
        CP C
        JR Z,ZERO
        LD E,C
        LD HL,0
        LD D,0
L1      ADD HL,DE
        DJNZ L1
        RET 

ZERO    LD HL,0
        RET 

;+-----------------------+
;|     HL = DE*BC        |
;+-----------------------+
;3.MUL16 - умжножение
;
;INPUT : DE <-- что
;        BC <-- на что
;OUTPUT: HL = DE*BC
;
;портятся  DE,HL,BC,A

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
        RET 

MUL256  LD B,8
        ADD HL,HL
        DJNZ $-1
        RET 

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

        DISPLAY "ScrBar:           ",$-Scroll
