; [Overlay] Plug-in module for BGE / Сменный модуль для BGE

; Внимание ! Данный модуль является частью редактора BGE и не будет функционировать в иной сборке /DA

;Brush for BGE

           ORG PgnAdr      ; адрес старта модуля

BrushOvb   LD (.RETAD+1),HL
           CALL MBrs
           XOR A
.RETAD    JP 0

;BrsPgn
;        DISP PgnAdr

MBrs       call SV_UNDO
      ;     ld ix,WBrush
      ;     call POPUP
           ld (BBrs.spp),sp
BBrs       call ReWin
1          ld a,%1111
.n0        ld ix,WBrush
.btix    EQU $-2
           ld (ix+6),a
           call .Tmode
           ld a,(REALRGB)
           ld (WBrush.dtcol),a
           call Win_
           cp #FF
          jr nz,.n1
.exit
           call CLOSE
           ld sp,0
.spp     EQU $-2
          ret

.n1        ld bc,.TBbrush
           call TAB_JP
.n2        ld a,%1101
          jr .n0

.startX    DB 0
;.endX      DB 0
.startY    DB 0
;.endY      DB 0


.Draw       call .IFbrs
           ret c
            ex (sp),hl
            ld hl, BBrs
            ex (sp),hl
.Draw_      call ERASE_ALLW
            call LOADSCR

             ld hl,Ret        ; убираем функцию вывода курсора
             ld de,Ret
             ld a,ARW_NEW
             call GUI
             ld (.DrawSP),sp
             ld ix,.DBrush
             ld a,%11000
             ld (ix+6),a
             xor a
             ld (.DrInt_a),a
             call Win_
    ;         cp #FF
    ;        jr z,.Draw_QUIT

    ;        jr .Draw_

.Draw_QUIT  ld sp,0
.DrawSP   EQU $-2
            call .resCUR
            ld hl,(DarwX)
            ld a,h
            or a
            ld a,l
           jr z,1F
            xor a
            ld (DarwXM),a
            cpl
1           ld (ARW_X),a
            ld hl,ARWXMN
            xor a
            ld (hl),a
            inc hl
            ld (hl),255
            inc hl
            ld (hl),a
            inc hl
            ld (hl),191
            ld a,(ARW_Y)
            cp 192
           jr c,1F
            ld a,191
            ld (ARW_Y),a
1           ld a,ARW_OLD
            call GUI
           jp SAVESCR

.DrawInt    ; обработка на прерываниях - собственно это и есть сама рисовалка

              ld a,4
              out (#FE),a


1
              ld a,0
.DrInt_a   EQU $-1
              or a
             jp z,.DrIntXY     ; инициализация

              ld a,(DIRECT)
              and #10
              ld c,a
             jr nz,1F
              ld (.flnewFr),a
1        ;     ld a,(.codeX)
         ;     ld (.LcodeX),a

3          ; вывод курсора
              ld a,0
.curFl   EQU $-1
              or a
             jr z,3F
         ;     bit 4,c
         ;    jr z,1F
        ;      ld a,(.fireL_)
        ;      or a
        ;     jr z,2F

1             ld hl,(DarwX)
              ld bc,0           ; последний X
.lastX   EQU $-2
              or a
              sbc hl,bc
              ld (.LdX),hl          ; смещение до предыдущего X
             jr nz,2F
              ld a,(ARW_Y)
              sub 0
.lastY   EQU $-1
              ld (.LdY),a           ; смещение до предыдущего Y
             jp z,.fireINT     ; если стрелка не двигалась
2             call .curOut
3             call .CURnorm


             call .curOut
             xor a
             ld (.fireL_),a

.fireINT
              ld a,(DIRECT)
              bit 4,a
             jr z,.endINT

              ld a,0
.fireL_   EQU $-1         ; флаг предыдущего нажатия файра в этой же точке
               or a
              jr nz,.endINT
1              inc a
               ld (.fireL_),a
               ld a,(.curFl)
               or a             ; убираем курсор, если он установлен
               call nz,.curOut

              call .drMSK

              ld a,(.Mode)
              ld bc,.TBdraw
              call TAB_JP

           ;   call .CURnorm
              call .curOut     ; устанавливаем курсор

.endINT
              xor a
              out (#FE),a
             ret

.CURnorm      ld hl,(DarwX)       ; обработка курсора в буфер
              ld (.lastX),hl
             push hl
              ld a,(.endX)
              neg
              add a,l
              ld (.codeX),a
              and #07
              ld c,a
              ld a,8
              sub c
              ld (.curBBB),a
              ld (.curBBB_),a
              ld hl,TBUFF
              push hl
              ld hl,BrsBOOF.spr

              ld a,16            ; приведение спрайта кисти
1             ex af,af'
              ld b,0
.curBBB  EQU $-1
              xor a
              ld e,(hl)
              inc hl
              ld d,(hl)
              inc hl
2              or a
               rl d
               rl e
               rla
             djnz 2B
               ex (sp),hl
               ld (hl),a
               inc hl
               ld (hl),e
               inc hl
               ld (hl),d
               inc hl
               ex (sp),hl
              ex af,af'
              dec a
             jr nz,1B

              ld a,16         ; повторяем с маской hl=BrsBOOF.msk , (sp)=TBUFF+16*3
1             ex af,af'
              ld b,0
.curBBB_ EQU $-1
              ld a,#FF
              ld e,(hl)
              inc hl
              ld d,(hl)
              inc hl
2              scf
               rl d
               rl e
               rla
             djnz 2B
               ex (sp),hl
               ld (hl),a
               inc hl
               ld (hl),e
               inc hl
               ld (hl),d
               inc hl
               ex (sp),hl
              ex af,af'
              dec a
             jr nz,1B
              pop hl   ; нормализуем стек

             pop hl    ; DarwX
              ld bc,#1000
              ld a,(ARW_Y)
              ld (.lastY),a
              sub 0
.endY  EQU $-1
              ld (.codeY),a
              ld d,a
             jr nc,1F
              neg
              ld d,c
              ld c,a       ; пропуск по Y
1             ld a,192
              sub d
              cp 16
             jr c,1F
              ld a,b
              sub c
1             ld (.curSZY),a
              ld a,c

              ld (.curLMY),a


              ld bc,#0000
.endX  EQU $-2
              xor a
              sbc hl,bc
             jr nc,2F
              inc b
              ld a,8
              add a,l
             jr c,1F
              inc b
1             ld hl,0
             jr  3F
2
              ld a,255
              sub l
              cp 15
             jr nc,3F
              ld b,3
              cp 8
             jr nc,3F
              inc b
3
             ld a,b
              ld (.curLMX),a

             ld a,d
             and 7
             ld h,a
             ld a,l
             rrca
             rrca
             rrca
             and #1F
             ld l,a
             ld a,d
             rlca
             rlca
             ld d,a
             and #E0
             or l
             ld l,a
             ld a,d
             rlca
             rlca
             rlca
             and #18
             or #40
             or h
             ld h,a
             ld (.curAdr),hl
             ld hl,TBUFF
             ld de,TBUFF+(16*6)
             ld b,16*3
1            ld a,(hl)
             cpl
             ld (de),a
             inc l
             inc e
            djnz 1B
            ret

.TBdraw       DW .drwOR    ; 0 - OR
              DW .drwAND   ; 1 - AND
              DW .drwXOR   ; 2 - XOR
              DW .drwNOP   ; 3 - nop


.Pmask                            ; Обработка пиксельной маской
             ld a,(Sieve)
             or a
             call nz,.Psieve
.Pmask1      ld de,DMSKbuff       ; Pixel mask / пиксельная маска
             ld a,0
.codeY   EQU $-1                  ; код Y-координаты начала спрайта
             and #0F              ; позиция линии пиксельной маски
             ld b,a
             add a,a
             add a,e
             ld e,a
             ld a,b
             ex af,af'
             ld a,16
             sub b
             ld b,a
             ld hl,TBUFF
             ld a,0
.codeX   EQU $-1                  ; код X-координаты начала спрайта
             bit 3,a              ; бит четности знакоместа
            jr nz,.Pmsk_1o

.Pmsk_0o     call .Pmsk_0oo
             ld de,DMSKbuff
             ex af,af'
             ld b,a
             ex af,af'
.Pmsk_0oo    inc b
             dec b
            ret z
1
             ld a,(de)
             ld c,a
             and (hl)
             ld (hl),a
             inc l
             inc e

             ld a,(de)
             and (hl)
             ld (hl),a
             inc l

             ld a,c
             and (hl)
             ld (hl),a
             inc l
             inc e
            djnz 1B
            ret

.Pmsk_1o     call .Pmsk_1oo
             ld de,DMSKbuff
             ex af,af'
             ld b,a
             ex af,af'
.Pmsk_1oo    inc b
             dec b
            ret z
1
             ld a,(de)
             ld c,a
             inc e
             ld a,(de)
             and (hl)
             ld (hl),a
             inc l

             ld a,c
             and (hl)
             ld (hl),a
             inc l

             ld a,(de)
             inc e
             and (hl)
             ld (hl),a
             inc l
            djnz 1B
            ret


.Psieve      call .Psieve_
             ld de,TBUFF+(16*6)-3
            jp .drMSK__

.Psieve_     ld de,DMSKbuff      ; Sieve / Сито
             ld a,(.codeY)       ; код Y-координаты начала спрайта
             and #0F              ; позиция линии пиксельной маски
             ld b,a
             add a,a
             add a,e
             ld e,a
             ld a,b
             ex af,af'
             ld a,16
             sub b
             ld b,a
             ld hl,TBUFF+(16*6)
             ld a,(.codeX)      ; код X-координаты начала спрайта
             bit 3,a              ; бит четности знакоместа
            jr nz,.Psiev_1o


.Psiev_0o     call .Psiev_0oo
             ld de,DMSKbuff
             ex af,af'
             ld b,a
             ex af,af'
.Psiev_0oo   inc b
             dec b
            ret z
1
             ld a,(de)
             ld c,a
             or (hl)
             ld (hl),a
             inc l
             inc e

             ld a,(de)
             or (hl)
             ld (hl),a
             inc l

             ld a,c
             or (hl)
             ld (hl),a
             inc l
             inc e
            djnz 1B
            ret

.Psiev_1o     call .Psiev_1oo
             ld de,DMSKbuff
             ex af,af'
             ld b,a
             ex af,af'
.Psiev_1oo   inc b
             dec b
            ret z
1
             ld a,(de)
             ld c,a
             inc e
             ld a,(de)
             or (hl)
             ld (hl),a
             inc l

             ld a,c
             or (hl)
             ld (hl),a
             inc l

             ld a,(de)
             inc e
             or (hl)
             ld (hl),a
             inc l
            djnz 1B
            ret




.drMSK       ld a,(WBrush.FLMsk)
             or a
            ret z
            ld de,TBUFF+(16*3)-3  ; mask
.drMSK__    ld hl,#00A6          ; hl = [ and (hl) : nop ]
            ld (.drwmd),hl
           jp .curOTM

            ret



             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

.drwXOR      ld a,0
.flnewFr  EQU $-1    ; флаг нового нажатия файра
             or a
           jp z,.drwXORe
             ld hl,TBUFF+(16*9) ; обнуление участка наложения
             ld (hl),0
             ld de,TBUFF+(16*9)+1
             ld bc,16*3-1
             ldir
             ld a,0
.LdY   EQU $-1              ; разность между последними точками по Y
             ld b,a
             bit 7,a
            jr z,1F
             neg
1            cp 16
             ld c,a
            jr nc,.drwXORe  ; если разность больше или равно 16, то рисуем
             ld hl,TBUFF
             ld de,TBUFF+(16*9)
             add a,a
             add a,c        ; *3
             ld c,a
             bit 7,b
            jr nz,1F
             add a,l
             ld l,a         ; hl -
            jr 2F
1            add a,e
             ld e,a
2            ld a,16*3
             sub c
             ld c,a
             ld b,0
             ldir

             ld hl,0
.LdX   EQU $-2              ; разность между последними точками по X
             ld a,h
             or a
             ld a,l
            jr z,1F
             bit 7,h
            jr z,.drwXORe   ; если h!=0 и hl не отрицательно то рисуем
             neg
1            cp 16
            jr nc,.drwXORe  ; если разность больше или равно 16, то рисуем
             ld c,a
             or a
            jr z,5F
             bit 7,h
            jr nz,3F
1            ld b,16
             ld hl,TBUFF+(16*12)-1   ; последний байт участка наложения
2            or a
             rl (hl)
             dec l
             rl (hl)
             dec l
             rl (hl)
             dec l
            djnz 2B
             dec c
            jr nz,1B
            jr 5F
3            ld b,16
             ld hl,TBUFF+(16*9)      ; первый байт участка наложения
4            or a
             rr (hl)
             inc l
             rr (hl)
             inc l
             rr (hl)
             inc l
            djnz 4B
             dec c
            jr nz,3B
5            ld de,TBUFF            ; наложение маски смещения
             ld hl,TBUFF+(16*9)
             ld b,16*3
6            ld a,(de)
             or (hl)
             xor (hl)
             ld (de),a
             inc e
             inc l
            djnz 6B

.drwXORe    ld a,1
            ld (.flnewFr),a
            ld hl,#00AE          ; hl = [ xor (hl) : nop ]
           jr 1F
.drwNOP     ld hl,#007E          ; hl = [ ld a,(hl) : nop ]
           jr 1F
.drwOR      ld hl,#00B6          ; hl = [ or (hl) : nop ]
           jr 1F
.drwAND     ld hl,#A62F          ; hl = [ cpl : and (hl) ]
1           push hl
            call .Pmask
            pop hl
            ld (.drwmd),hl
           jp .curOt__





.resCUR       ld a,(.curFl)
              or a
             ret z
.curOut       ld a,(.curFl)
              cpl
              ld (.curFl),a
.curOut_      ld hl,#00AE          ; hl = [ xor (hl) : nop ]
              ld (.drwmd),hl

.curOt__     ld de,TBUFF-3
.curOTM      ld hl,0
.curAdr    EQU $-2
             ld b,0
.curLMY    EQU $-1     ; пропуск верхних линий
             inc b
1            inc de
             inc de
             inc de
            djnz 1B

             ld b,0
.curSZY    EQU $-1

             ld a,0
.curLMX    EQU $-1
             or a
            jr nz,2F

1            call .drawpx       ; полный вывод 0
             inc de
             inc l

             call .drawpx
             inc de
             inc l

             call .drawpx
             inc de
             dec l
             dec l
             call INC_Y
            djnz 1B
            ret

2           dec a
           jr nz,2F

1            inc de       ; пропуск первого байта  1
             call .drawpx
             inc de
             inc l

             call .drawpx
             inc de
             dec l
             call INC_Y
            djnz 1B
            ret

2            dec a
            jr nz,2F

1            inc de       ; пропуск 2-х байтов  2
             inc de
             call .drawpx
             inc de
             call INC_Y
            djnz 1B
            ret

2            dec a
            jr nz,2F

1            call .drawpx       ; без одного байта  3
             inc de
             inc l

             call .drawpx
             inc de
             dec l
             inc de
             call INC_Y
            djnz 1B
            ret
2
1            call .drawpx       ; без 2-х байтов  4
             inc de
             inc de
             inc de
             call INC_Y
            djnz 1B
            ret


.drawpx
             ld a,(de)
.drwmd       xor (hl)   ; заменяется в зависимости от режима
             nop
             ld (hl),a

            ret

.DrIntXY     ld h,a         ; h=0 ( in a=0)  инициализация прерываний
             ld (.curFl),a
             ld a,#FF
             ld (.DrInt_a),a   ; запрещаем повторный вызов
             ld a,(ARW_X)     ; создаём начальные 2-х байтные координаты
             ld l,a
             xor a
             ld (.flnewFr),a  ; флаг нового файра
             ld h,a
             ld b,a
             ld a,(.szX)
             rra
             add a,l
             rl h
             ld l,a
             ld a,(.startX)
             ld c,a
             or a
             sbc hl,bc
            jr nc,1F
             ld h,b
             ld l,b
1            ld (DarwX),hl
             ld a,0
.szY     EQU $-1
             add a,191
             ld (ARWYMX),a
             ld a,0
.szX     EQU $-1
             dec a
             ld (DarwXM),a


            ret




.Tmode      ld a,(Sieve)
            or a
            ld a,6
           jr z,1F
            dec a
1           ld (WBrush.pmskCol),a
            ld hl,WBrush.Tmods
            ld a,0
.Mode   EQU $-1                  ; режим вывода
            ld e,a
            add a,a
            add a,a
            ld c,a
            ld b,0
            add hl,bc
            ld a,e
            ld de,WBrush.Tmode
            ld bc,3
            ldir
           ret

.S_mode    ld ix,WBrush.Wmods
           call .WIN
           cp 8       ; число режимов
          ret nc
           ld (.Mode),a
           cp 7
          ret z
           cp 5
          ret c
           ld ix,WBrush.Wbrights
           call .WIN
           inc a
           ret z
           ld (WBrush.brght1),a
          ret
.WIN       call POPUP
           ld a,%1110
           ld (ix+6),a
           call Win_
           push af
           call CLOSE
           pop af
          ret

.to_set
           call .IFbrs
          ret c
           ld a,%1111
           ld ix,WBrush.Wsel15
           ld (ix+6),a
           call POPUP
           call Win_
           call CLOSE
          ret

.IFbrs                                   ; проверка спрайта кисти
          ld a,#0C           ; 'inc c'
          ld (.IFbrsY0),a
          ld hl,BrsBOOF.spr
          ld de, 0            ; de - ORка линий спрайта
          ld bc,#1000         ; b=16 - количество линий ,c=0 ; c - 1-я линия с пикселями
1          ld a,(hl)
           inc hl
           or e
           ld e,a
           ld a,(hl)
           inc hl
           or d
           ld d,a
           or e
          jr z,.IFbrsY0
           xor a
           ld (.IFbrsY0),a
           ld a,c
           ld (.startY),a   ; получили начальную линию пикселей по Y
.IFbrsY0   inc c            ; inc c  /or/  nop
         djnz 1B
           ld h,c           ; h = .startY
           ld a,d
           or e
         jr nz,1F
          ld ix,.er_Embrs
          ld a,%1111
          ld (ix+6),a
          call Win_
          call CLOSE
          scf
         ret
1         ld a,d
          ld c,e
          ld b,16            ; получаем смещение на начало по X
1         rla
          rl c
         jr c,2F
         djnz 1B
2         ld a,16
          sub b
          ld (.startX),a
          ld l,a             ; l = .startX
          ld a,e
          ld c,d
          ld b,16            ; получаем смещение на окончание по X
1         rra
          rr c
         jr c,2F
         djnz 1B             ; цикл никогда не проходит весь
2         dec b
          ld a,b
          ld (.endX),a
          ld e,a             ; e = .endX
         push hl
          ld hl,BrsBOOF.spr+31
          ld b,16
1         ld a,(hl)
          dec hl
          or (hl)
         jr nz,2F
          dec hl
         djnz 1B          ; цикл никогда не проходит весь
2        pop hl
          dec b
          ld a,b
          ld (.endY),a     ; конечная линия пикселей по Y
          sub h            ; .endY-.startY
          ld (.szY),a
          ld a,e
          sub l            ; .endX-.startX
          ld (.szX),a
          xor a            ; erase c-flag
         ret


.Bedit
              push ix
.edt0          call .toBUFF
               ld hl,.WbrsED
               call SPEdit
               ld c,a
               call .atBUFF
               ld a,c
               cp #FF
              jr nz,1F
               call CLOSE
              pop ix
              ret
1              ld bc,.TBbrED
               call TAB_JP
.Enext         ld a,%1101
               ld (ix+6),a
              jp .edt0

.atBUFF       ld hl, #771A    ; hl = [ ld a,(de) : ld (hl),a ]  ; reg C not used
             jr 1F
.toBUFF       ld hl, #127E    ; hl = [ ld a,(hl) : ld (de),a ]
1             ld (.Bhd__),hl
              ld hl,BrsBOOF.msk
             push hl
              ld hl,BrsBOOF.spr
              ld de,BUFF
              ld b,16
1             call .Bhd__
              call .Bhd__
             ex (sp),hl
              call .Bhd__
              call .Bhd__
             ex (sp),hl
             djnz 1B
              pop hl
             ret
.Bhd__        ld a,(hl) : ld (de),a   ; меняется на ld a,(de) : ld (hl),a
              inc de
              inc hl
              ret

.BtoM         ld hl,BrsBOOF.spr
              ld de,BrsBOOF.msk
.btom__       ld bc,32
             push de
              ldir
             pop hl
.inv__        ld b,32
1             ld a,(hl)
              cpl
              ld (hl),a
              inc hl
             djnz 1B
             ret
.MtoB         ld de,BrsBOOF.spr
              ld hl,BrsBOOF.msk
             jr .btom__
.Binv         ld hl,BrsBOOF.spr
             jr .inv__
.Minv         ld hl,BrsBOOF.msk
             jr .inv__
.Bcln          ld hl,BrsBOOF.spr
               xor a
.cln__         ld b,32
1              ld (hl),a
               inc hl
              djnz 1B
              ret
.Mcln          ld hl,BrsBOOF.msk
               ld a,#FF
              jr .cln__
.Btake          ld de,BrsBOOF.spr
.take__         push ix
                call .ramka
               jr c,.t__e
                call SaveWS
.t__e           call SWAP_SCR
                pop ix
               ret
.Mtake          ld de,BrsBOOF.msk
               jr .take__
.Btoscr         ld de,BrsBOOF.spr
.toscr__        push ix
                call .ramka
               jr c,.t__e
                call LoadWS
               jr .t__e
.Mtoscr         ld de,BrsBOOF.msk
               jr .toscr__

.ramka          push de
                call SWAP_SCR
                ld ix,WBrush.ixedbox
                xor a
                call Ramka8
                pop de
               ret


.load       call .adrset
            push de,bc
            call FilerE
            pop bc,hl
           ret c
            ld a,(SEC_LEN)
            cp b
           jr nz,.load
            ld c,#05
            ld de,(START_SEC)
            call DOS_FUNC_
           ret c
            ld de,.ToName
            call ToName
           ret


.save       call .adrset
            push de,bc
            ld hl,.ToName
            call FNEdit
            pop bc,de
           ret c
            push de,bc
            ld hl,.ToName
            call FromName
            pop de,hl
            ld b,d
            ld c,#0B
            call DOS_FUNC_
           ret

.adrset     ld de,Brs_sv   ; выход de - адрес набора, bc - длина, hl - таблица сортировки
            ld bc,#0400
            ld hl,.brsort
           ret

.StDp       ld ix,WBrush.WStDp
            call POPUP
            ld a,%1110
.StDp_      ld ix,WBrush.WStDp
            ld (ix+6),a
            call WBrush.cnvTsd
            ld hl,(WBrush.stX+1)
            ld (WBrush.T_stX),hl
            ld hl,(WBrush.stY+1)
            ld (WBrush.T_stY),hl
            ld hl,(WBrush.dsX+1)
            ld (WBrush.T_dsX),hl
            ld hl,(WBrush.dsY+1)
            ld (WBrush.T_dsY),hl
            call Win_
            cp #FF
           jp z,CLOSE
            cp 4
           jr nc,1F
            ld c,a
            ld b,0
            push bc
            call .StDpS
            pop bc
            cp 16
           jr nc,1F
            ld hl,BrsBOOF.sx
            add hl,bc
            ld (hl),a
1           ld a,%1100
           jr .StDp_


.StDpS      ld ix,WBrush.WStDpS
            call .WIN
            ret


.brsort      DB #01,"brs",#FF
.ToName      DB "noname  brs"

.DBrush    DB 0,0,32,24,0,0,%11000    ; пустое окно рисовалки кистью
           DB 0
           DW Nil              ; объект-текст
           DW Nil              ; объект-подсветка (выборка)
           DW Nil  ;.HDraw           ; горячие клавиши
           DW Nil              ; объект-кнопки (выборка)
           DW Nil              ; объект-флажки
           DW Nil              ; объект-радио кнопки
           DW Nil              ; ползунок
           DW Nil              ; вызов при создании
           DW .DrawInt         ; вызов на "прерываниях"
           DW #FFFF


.TBbrush    DW  .load          ; open
            DW  .save          ; save
            DW  Ret            ; smooth
            DW  .StDp          ; steps / distances
            DW  .to_set        ; to set
            DW  Ret            ; msk +/-
            DW  .S_mode        ; mode
            DW  .Draw          ; draw
         ; далее кнопки
            DW  .Draw            ; brush
            DW  Ret            ; no rgb
            DW  PRGB2          ; rgb
            DW  PRGB2          ; dt
            DW  PMask         ; Pmask
            DW  .Bedit         ; edit brush
            DW  .Bedit         ; edit mask

.TBbrED      DW  .BtoM        ; 0 >>i
             DW  .MtoB        ; 1 i<<
             DW  .Bcln        ; 2 clean b
             DW  .Binv        ; 3 inv b
             DW  .Btake       ; 4 take b
             DW  .Btoscr      ; 5 to scr b
             DW  .Mcln        ; 6 clean m
             DW  .Minv        ; 7 inv m
             DW  .Mtake       ; 8 take m
             DW  .Mtoscr      ; 9 to scr m
             DW  Ret          ; prev button


.WbrsED   DB 0,0  ; X,Y окна (X,Y of window)
          DB 18       ; ширина (width)
          DB 17       ; высота (height)
.EdAdr    DW BUFF     ; адрес редактирования спрайта текстуры
          DW #0103    ; X,Y окна редактора (X,Y of editor window)
.EdTSize  DW #0402    ; размеры спрайта (sprite size)
          DW #070C    ; X,Y preview
          DW .EdText  ; текст (text)
          DW .EdSel   ; подсветка (highlighting)
          DW Nil      ; горячие клавиши (hotkeys)


.EdText   MSG_BRUSH_headED : DB 13
          DB 22,6,11,"Brs | Msk",13,22,8,14,">>i",13,"i<<",13
          DB 22,1,12
          MSG_EDITS_Clean : DB 13
          MSG_EDITS_Invert : DB 13
          MSG_EDITS_Take : DB 13
          MSG_EDITS_Put : DB 13
          DB 22,12,12
          MSG_EDITS_Clean : DB 13
          MSG_EDITS_Invert : DB 13
          MSG_EDITS_Take : DB 13
          MSG_EDITS_Put
          DB 0

.EdSel    DB 8,14,2,1,%11  ; 0 >>i
          DB 8,15,2,1,%11  ; 1 i<<

          DB 1,12,5,1,%11  ; 2 clean b
          DB 1,13,5,1,%11  ; 3 inv b
          DB 1,14,5,1,%11  ; 4 take b
          DB 1,15,5,1,%11  ; 5 to scr b

          DB 12,12,5,1,%11 ; 6 clean m
          DB 12,13,5,1,%11 ; 7 inv m
          DB 12,14,5,1,%11 ; 8 take m
          DB 12,15,5,1,%11 ; 9 to scr m

          DB #FF

.er_Embrs    DB 8,9,16,5,2*8+6,6,%1111
             DB 0
             DW .T_emBrs           ; текст
             DW #FFFF

.T_emBrs     MSG_ERROR : DB 13
             MSG_BRUSH_emptyER
             DB 0




WBrush       DB 6,2,25,19,5*8,5,%1111
             DB 0
             DW .TBrs              ; текст
             DW .SBrs              ; подсветка
             DW .HBrs              ; горячие клавиши
             DW .BBrs              ; объект-кнопки (выборка)
             DW .FlBrs             ; объект-флажки
             DW Nil                ; объект-радио кнопки
             DW Nil                ; ползунок
             DW .BrsCr             ; вызов при создании
             DW .BrsInt            ; вызов на "прерываниях"
             DW #FFFF

.TBrs        MSG_BRUSH_head : DB 13,13,13,15,13,13,13,13,13,13,15,13,13,15,13,22,1,12
             MSG_DISK_Load  : DB 13,22,8,12 : MSG_DISK_Save : DB 13,22,16,12 : MSG_LOUPE_Smooth
             DB 13,22,6,17
             MSG_BRUSH_Slot : DB 13
             DB 22,1,17,"Msk",13,22,11,17 : MSG_WIN_Mode
.Tmode       DB "012"
             DB 13,22,19,17
             MSG_BRUSH_Draw
             DB 0

.SBrs        DB 1,12,6,1,%11   ; 0 open
             DB 8,12,7,1,%11   ; 1 save
             DB 16,12,8,1,%11  ; 2 smooth +/-
             DB 6,14,4,2,%11   ; 3 steps / distances
             DB 6,17,4,1,%11   ; 4 to set
             DB 1,17,4,1,%11   ; 5 msk +/-
             DB 11,17,7,1,%11  ; 6 mode
             DB 19,17,5,1,%11  ; 7 draw
             DB #FF

.HBrs

             DB #FF

.BBrs
          DB 22,14,2,2,6,%11  ; brush
          DW BRUSHS

          DB 11,14,2,2,7,%11  ; no rgb
          DW NORGBS

          DB 14,14,2,2,6,%11    ; rgb
          DW RGBS
          DB 16,14,2,2,7,%00    ; dt
.dtcol  EQU $-2
          DW  DTRS
          DB 19,14,2,2,6,%11    ; Pmask
.pmskCol EQU $-2
          DW PMSKBUFF
          DB 1,14,2,2,7,%11       ; Edit brush
          DW BrsBOOF.spr
          DB 3,14,2,2,7,%11       ; Edit msk
          DW BrsBOOF.msk

        DB #FF

.FlBrs      DB 4,17,5,#FF
.FLMsk    EQU $-1
            DW Nil
            DB 23,12,2,#FF
.FlSmooth EQU $-1
            DW Nil
           DB #FF
.ixedbox   DB 0,0,2,2

.stX       DB "000/"
.stY       DB "000/"
.dsX       DB "000/"
.dsY       DB "000"

.cnvTsd    ld hl,BrsBOOF.sx  ; конвертация данных в текст
           ld de,.stX
           ld b,4
1          push hl,de,bc
           ld a,(hl)
           call PDEC
           pop bc,de,hl
           inc hl
           inc de
           inc de
           inc de
           inc de
          djnz 1B
          ret

.BrsCr     call .cnvTsd
           ld hl,.hl_col1
           ld (.hl_padr),hl
           ld hl,(WBrush)     ; l-xc h-yc
           inc h
           inc h
           inc h
           inc l
           push hl
           call .hl_col82
           pop hl
           inc h
           inc h
           inc h
           call .hl_col15x
           inc h
           inc h
           inc h
           inc h
           inc h
           push hl       ; рамочка вокруг текущей кисти/маски
           ld d,h
           ld e,l
           call RASCH_
           ld (.prnSD),hl
           call DEC_Y
           call DEC_Y
           dec l
           call .rmEud
           ld b,18
1          ld e,l
           ld a,(hl)
           or %00000010
           ld (hl),a
           ld a,5
           add a,l
           ld l,a
           ld (hl),%01000000
           ld l,e
           call INC_Y
          djnz 1B
           call .rmEud
           pop hl
           ld bc,5
           add hl,bc
           ld (.sd_ix),hl
           ld hl,0
.prnSD  EQU $-2
           add hl,bc
           push hl
           ld bc,#1000
1          push hl
           ld (hl),c
           inc l
           ld (hl),c
           inc l
           ld (hl),c
           inc l
           ld (hl),c
           pop hl
           call INC_Y
          djnz 1B
           push ix
           ld ix,.sd_ix
           ld de,.sd_spr
           call LoadWS
           pop ix
           pop hl
           inc h
           push hl
           ld de,.stX
           call OFC.evry
           pop hl
           ld a,l
           add a,32
           ld l,a
          jr nc,1F
           ld a,h
           add a,8
           ld h,a
1          ld de,.dsX
           call OFC.evry
          ret

.rmEud     push hl
           ld a,(hl)
           or %00000011
           ld (hl),a
           inc l
           ld (hl),#FF
           inc l
           ld (hl),#FE
           inc l
           ld (hl),#7F
           inc l
           ld (hl),#FF
           inc l
           ld (hl),%11000000
           pop hl
           call INC_Y
          ret

.hl_col15x push hl
           ld de,.hl_col2
           ld (.hl_padr),de
           xor a
           call .hl_col82
           pop hl
           inc h
           inc h
           inc h
           push hl
           ld b,7
           call .hl_colB2
           pop hl
          ret


.hl_col82      ld b,8
               xor a
.hl_colB2      push af
               call .hl_col1
.hl_padr EQU $-2
               pop af
               inc a
               inc l
               inc l
               inc l
              djnz .hl_colB2
               ret

.hl_col2   push bc,hl   ; in l=xc , h=yc , a=num
           call .conv2BF
           inc hl
           inc hl
           inc hl
           inc hl
           ex de,hl
          jr .hl_col_

.hl_col1   push bc,hl   ; in l=xc , h=yc , a=num
           call .convBF
.hl_col_   pop hl
           push hl
           ld (.ix22),hl
           push ix
           ld ix,.ix22
           call LoadWS
           pop ix
           pop hl
           push hl
           ld c,7
.BrsCOL  EQU $-1        ; цвет вывода кисти
           ld a,l
           ld l,h
           ld h,0
           add hl,hl
           add hl,hl
           add hl,hl
           add hl,hl
           add hl,hl
           add a,l
           ld l,a
           ld a,#58
           or h
           ld h,a
           ld a,c
           ld bc,31
           ld (hl),a
           inc l
           ld (hl),a
           add hl,bc
           ld (hl),a
           inc l
           ld (hl),a
           pop hl,bc
           ret

.conv2BF   ld l,a
           ld e,0
           or a
           rra
           rr e
           rra
           rr e
           ld d,a
           ld a,l
           add a,a
           add a,a
           add a,e
           ld e,a
          jr nc,1F
           inc d
1          ld hl,Brs_64
           add hl,de
          ret

.convBF    add a,a
           add a,a
           add a,a
           ld e,a
           ld d,0
           ld hl,BUFF
           ld b,32       ; очистка буфера
1          ld (hl),0
           inc l
          djnz 1B
           ld hl,Brs_8
           add hl,de
           ld de,BUFF+8
           ex de,hl
           ld b,8         ; конвертация в буфер
1          ld c,0
           ld a,(de)
           inc de
           or a
           rra : rr c
           rra : rr c
           rra : rr c
           rra : rr c
           ld (hl),a
           inc hl
           ld (hl),c
           inc hl
          djnz 1B
           ld de,BUFF
           ret

.BrsInt       ld a,(DIRECT)
              bit 4,a
              ret z
              ld bc,(WBrush)
              inc b
              inc b
              call .intPos3
              ret c
              cp 23
              ret nc
              push af
               ld a,STOP_ARW
               call GUI_
              pop af
              cp 8
             jr nc,1F
              call .convBF
              ex de,hl
              ld de,BrsBOOF
              xor a
              ld (de),a
              inc de
              ld (de),a
              inc de
              ld (de),a
              inc de
              ld (de),a
              inc de
              ld bc,32
              ldir
              call .clMSK
             jr 2F
1             sub 8
              call .conv2BF
              ld de,BrsBOOF
.bi68_        ld bc,68
              ldir
2             ld sp,(BBrs.spp)
             jp BBrs.n2


.intPos3      ld hl,(ARW_XC)  ; определяет позицию 3x3 , flag C - error
              ld a,h
              sub b
              ret c
              sub 1
              ret c
              call Div3
              scf
              ret z
              add a,a
              add a,a
              add a,a
              ld d,a     ; y поз.
              ld a,l
              sub c
              ret c
              sub 1
              ret c
              call Div3
              scf
              ret z
              cp 8
              ccf
              ret c
              add a,d    ; + x поз.
             ret

.clMSK       ld hl,BrsBOOF.msk
             ld de,BrsBOOF.msk+1
             ld bc,31
             ld (hl),#FF
             ldir
             ret
.clBrs       ld hl,BrsBOOF.spr
             ld de,BrsBOOF.spr+1
             ld bc,31
             ld (hl),0
             ldir
             ret

.ix22      DB 0,0,2,2   ; рамка и формат спрайта



.Wsel15      DB 0,0,25,9,5*8,5,%1111
             DB 0
             DW .Tsel15              ; текст
             DW Nil              ; подсветка
             DW Nil              ; горячие клавиши
             DW Nil              ; объект-кнопки (выборка)
             DW Nil             ; объект-флажки
             DW Nil                ; объект-радио кнопки
             DW Nil                ; ползунок
             DW .sel15Cr             ; вызов при создании
             DW .sel15Int            ; вызов на "прерываниях"
             DW #FFFF

.Tsel15      MSG_BRUSH_storeIn : DB 13,0

.sel15Cr     ld hl,(.Wsel15)     ; l-xc h-yc
             inc h
             inc h
             inc h
             inc l
            jp .hl_col15x

.sel15Int     ld a,(DIRECT)
              bit 4,a
              ret z
              ld bc,(.Wsel15)
              inc b
              inc b
              call .intPos3
              ret c
              cp 15
              ret nc
              call .conv2BF
              push hl
               ld a,STOP_ARW
               call GUI_
               call CLOSE
              pop de
              ld hl,BrsBOOF
             jp .bi68_

.sd_ix   DB 0,0,1,2
.sd_spr  DB 0,0,0,96,192,96,192,0     ; спрайтик минибукв s,d
         DB 0,0,0,192,160,160,192,0


.WStDp  DB 0,0,7,11,6*8,6,%00001110
        DB 0
        DW .TStDp        ; объект-текст
        DW .SStDp         ; объект-подсветка (выборка)
        DW #FFFF

.TStDp   MSG_BRUSH_Step : DB 13,13
         DB "SX: "
.T_stX   DB "00",13
         DB "SY: "
.T_stY   DB "00",13,15,13
         MSG_BRUSH_Disp : DB 13,13
         DB "DX: "
.T_dsX   DB "00",13
         DB "DY: "
.T_dsY   DB "00"
         DB 0

.SStDp       DB 1,3,5,1,%11   ; s x
             DB 1,4,5,1,%11   ; s y
             DB 1,8,5,1,%11   ; d x
             DB 1,9,5,1,%11   ; d y
             DB #FF


.WStDpS   DB 0,0,4,18,7*8,7,%00001110
          DB 0
          DW .TStDpS        ; объект-текст
          DW .SStDpS        ; объект-подсветка (выборка)
          DW #FFFF

.TStDpS   DB "0",13,"1",13,"2",13,"3",13,"4",13,"5",13,"6",13,"7",13
          DB "08",13,"09",13,"10",13,"11",13,"12",13,"13",13,"14",13,"15",0


.SStDpS   DB 1,1,2,128+16,%11
          DB #FF

.Wbrights DB 0,0,4,18,7,7,%00001110,0
          DW .Tbrgh      ; объект-текст
          DW .SStDpS     ; объект-подсветка (выборка)
          DW Nil         ; горячие клавиши
          DW Nil         ; объект-кнопки (выборка)
          DW Nil         ; объект-флажки
          DW Nil         ; объект-радио кнопки
          DW Nil         ; ползунок
          DW .Crbrights  ; вызов при создании
          DW #FFFF
.Tbrgh      DB 13,22,2
.brght1     DB 8,"+",0

.Crbrights  ld hl,(.Wbrights)
            inc l
            ld a,16
            ld b,a
            add a,h
            ld d,a
            ld e,l
            call RASCH_
            ld de,CTB
1           push de
            call .Crbrig_
            pop de
            call .Crbrig_
            ld a,h
            sub 8
            ld h,a
            call DEC_YY
           djnz 1B
           ret
.Crbrig_    ld c,4
2           ld a,(de)
            ld (hl),a
            inc h
            inc de
            dec c
           jr nz,2B
           ret

.Wmods    DB 0,0,4,6,7*8,7,%00001110
          DB 0
          DW .Tmods        ; объект-текст
          DW .Smods         ; объект-подсветка (выборка)
          DW #FFFF

.Tmods
         DB  "OR ",13
         DB  "AND",13
         DB  "XOR",13
         DB  "NOP",0

.Smods   DB 1,1,2,128+4,%11
         DB #FF

Brs_8     ; неизменные кисти 8x8
          DB 0,0,0,16,0,0,0,0
          DB 0,0,0,24,24,0,0,0
          DB 0,0,60,60,60,60,0,0
          DB 0,126,126,126,126,126,126,0
          DB 255,255,255,255,255,255,255,255
          DB 0,0,24,60,60,24,0,0
          DB 56,124,254,254,254,124,56,0
          DB 60,126,255,255,255,255,126,60


BrsBOOF         ; данные текущей кисти
.sx        DB 0       ; step X / шаг для вывода кисти
.sy        DB 0       ; step Y
.dx        DB 0       ; dist X / смещение от начала для вывода кисти
.dy        DB 0       ; dist Y

.spr       DB 0,0,0,0,0,0,0,0
           DB 3,192,7,224,15,240,15,240
           DB 15,240,15,240,7,224,3,192
           DB 0,0,0,0,0,0,0,0

.msk       DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
           DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF




;-------- изменяемые данные ----------------

; Набор кистей
Brs_sv    DB "BRSx"              ; идентификатор; в принципе не используется, только для ровного счёта байтов по 4-м секторам (1024 байта)
Brs_64                           ; редактируемые кисти с маской
.b00      DB 0,0,0,0         ; на кисть: первые 4 байта - шаги и смещения, 32 - кисть, 32 - маска
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,1,128
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b01      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,3,192
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b02      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,3,192
          DB 3,192,0,0,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b03      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,1,0
          DB 1,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b04      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,1,0,1,0
          DB 1,0,1,0,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b05      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,1,128,1,128
          DB 1,128,1,128,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b06      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,0,128
          DB 1,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b07      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,0,1,0
          DB 0,128,0,0,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b08      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,64,0,128
          DB 1,0,2,0,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b09      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,2,0,1,0
          DB 0,128,0,64,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b10      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,0,192,1,128
          DB 3,0,6,0,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b11      DB 0,0,0,0
          DB 0,0,0,0,0,0,0,0
          DB 0,0,0,0,6,0,3,0
          DB 1,128,0,192,0,0,0,0
          DB 0,0,0,0,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b12      DB 0,0,0,0
          DB 0,0,0,0,3,192,15,240
          DB 31,248,31,248,63,252,63,252
          DB 63,252,63,252,31,248,31,248
          DB 15,240,3,192,0,0,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b13      DB 0,0,0,0
          DB 0,0,3,192,15,240,31,248
          DB 63,252,63,252,127,254,127,254
          DB 127,254,127,254,63,252,63,252
          DB 31,248,15,240,3,192,0,0

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF

.b14      DB 0,0,0,0
          DB 7,224,31,248,63,252,127,254
          DB 127,254,255,255,255,255,255,255
          DB 255,255,255,255,255,255,127,254
          DB 127,254,63,252,31,248,7,224

          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
          DB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF



LBrs    EQU $-BrushOvb  ; MBrs
    ;    ENT

       DISPLAY "Brush len   :",/a,LBrs