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

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

; Dithering Can for BGE


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

             jp BDithCan       ; для старта

DithCanOvb  ; LD (.RETAD+1),HL
          ; CALL BDithCan
          ;  XOR A
;.RETAD    JP 0

    ; Здесь таблицы чтобы менять только L
.IoddTB   DB   128,32,128,32,64,16,64,16,16,64,16,64,32,128,128,32
.InodTB   DB   8,2,8,2,4,1,4,1,1,4,1,4,2,8,8,2

.S_CAN    DB  1,2,3,4,5,6,7,8  ; размер пятна в чанках
.dBuff     DB 0,0,0,0,0,0,0,0  ; буфер прежнего вывода

.CAN0      DB %10000000,0
.CAN1      DB %11000000,%11000000,0
.CAN2      DB %11100000,%11100000,%11100000,0
.CAN3      DB %01100000,%11110000,%11110000,%01100000,0
.CAN4      DB %01110000,%11111000,%11111000,%11111000,%01110000,0
.CAN5      DB %01111000,%11111100,%11111100,%11111100,%11111100,%01111000,0
.CAN6      DB %00111000,%01111100,%11111110,%11111110,%11111110,%01111100,%00111000,0
.CAN7      DB %00111100,%01111110,%11111111,%11111111,%11111111,%11111111,%01111110,%00111100,0

BDithCan     ld (.spp),sp
             call SV_UNDO
             call EraseAllw
           ;  call LOADSCR
             call P_strt    ; .P_svBF   ;.saveSCR
            jr 1F

.ln_         call ReWin.i
1            ld a,%1111
.l1          ld ix,WDithCan
             ld (ix+6),a
             ld sp,0
.spp    EQU $-2
             ld a,(REALRGB)
             ld (WDithCan.dtCOL),a
             call Win_
             cp #FF
            jr z, .exit

             ld c,a
             sub 8
            jr nc,.opex

             ld hl, .CanDat+2  ; выбор кисти
             push hl
             ld b,8
             ld de,5
1            ld (hl),0
             add hl,de
            djnz 1B
             pop hl
             ld a,c
             add a,a
             add a,a
             add a,c
             ld e,a
             add hl,de
             ld (hl),1

.next        ld a,%1101
            jr .l1

.exit
            jp CLOSE


.opex
               ld hl,.ln_                ; for ret to .ln_
               push hl

               ld a,c
               cp 12                  ; increase
              jp z, .increase
               cp 13                  ; decrease
              jp z, .decrease

               ld hl,.next               ; for ret to .next
               ex (sp),hl

              ld a,(But)
              cp #FF
             ret z
              or a
             jr nz,1F
.no_RGB       ld a,(WDithCan.NoRGBcol)     ; no RGB
              xor 2
              ld (WDithCan.NoRGBcol),a
             ret

1             dec a
             jp z, PRGB2                   ; RGB
             ret

.Drgb        ld a,ARW_DEFAULT
             call GUI
             call PRGB2
            jp .Can_Mode


;.eraseallw   ; код удалён

;.P_svBF      ; код удалён

.saveSCR_    xor a
             ld (.fl_undo),a
.saveSCR     call P_strt   ;.P_svBF
            jp SAVESCR


.exSundo     ld a,0
.fl_undo   EQU $-1
             or a
             call nz,.saveSCR_
             call OSP
             call SWAP_SCR.T
            jp SAVESCR


.Cr        ld hl,.CanDat
           call .outCan

          ret


.outCan    ld a,(hl)
           cp #FF
          ret z
           ld d,(hl)   ; hl - адрес в .CanDat
           inc hl
           ld e,(hl)
           inc hl
           call RealWin   ; d -x e -y
           ld bc,CTB+(8*4)       ; chunk
           ld a,(hl)
           inc hl
           or a
          jr z,1F
           ld bc,CTB+(15*4)       ; chunk
1          ld (.otCch),bc
           ld c,(hl)
           inc hl
           ld b,(hl)
           inc hl         ; bc - address of .CAN*
           push hl
           call RASCH     ; hl - address
           ld d,b
           ld e,c         ; de - address of .CAN*
           call .outCan_
           pop hl
          jr .outCan

.outCan_
           ld a,(de)
           inc de
           or a
          ret z
           push hl
           push de
.l_otC     ld de,CTB+(8*4)
.otCch   EQU $-2
           or a
          jr z, .otC_e
           rla
          jr c, 1F
           ld de,CTB
1          ex af,af'   ; спрятали код
           push hl
            ld b,4
2          ld a,(de)
           and #F0
           ld (hl),a
           inc de
           inc h
          djnz 2B
           pop hl
           ex af,af'
           ld de,(.otCch)
           or a
           rla
          jr c,1F
           ld de,CTB
1          ex af,af'   ; спрятали код
           push hl
            ld b,4
2          ld a,(de)
           and #0F
           or (hl)
           ld (hl),a
           inc de
           inc h
          djnz 2B
           pop hl
           inc l
           ex af,af'
          jr .l_otC
.otC_e     pop de
           pop hl
           ld a,3
           add a,h
           ld h,a
           call INC_Y
          jr .outCan_



.increase
             call .I_mod
            jr 1F
.decrease
             call .D_mod

1
.Run
             call EraseAllw
             call LOADSCR
             ld hl,.CanDat+2    ; флаг выбора
             ld bc,5
             xor a
1             bit 0,(hl)        ; определение номера выбранной кляксы ))
             jr nz, 2F
              inc a
              add hl,bc
             jr 1B
2
              inc hl
              ld e,(hl)
              inc hl
              ld d,(hl)
              ld (.DrCodADR),de
              ld hl,DithCanOvb.S_CAN
              add a,l
              ld l,a
              ld a,(hl)
              ld (.C_size),a
              or a
              rra      ; /2
              ld (.StX),a
              ld (.StY),a


              call .Slow_Mode
              call .NoRGB_Mode
              call .Can_Mode
              call .saveSCR_
             jr .RunW0
.RunW_        ld a,(.fl_undo)
              or a
              call nz,.saveSCR_
.RunW0        ld a,%1000
              ld ix,.WDraw
              ld (ix+6),a
               ld a,(WDithCan.MButt_2)
               or a
               ld a,ArrCancel_Y
              jr z,1F
               ld a,ArrCancel_N
1              call GUI
              call Win_
              cp #FF
             jr z, 1F
              ld hl,.RunW0
              push hl
               or a       ; 0 Color
              jp z,.Drgb
               dec a      ; 1 NO RGB
              jp z,.NoRGB_
               dec a      ; 2 K Color
              jp z,Col
               dec a      ; 3  last cancel
              jp z,.exSundo
               pop hl
               ld hl,.RunW_
               push hl
               dec a      ; 4  Increase mode
              jp z,.I_mod
               dec a      ; 5  Decrease mode
              jp z,.D_mod
               dec a      ; 6  Mode
              jp z,.Mode_set
               dec a      ; 7  Slowly +-
              jp z,.Slowly_ex
               dec a      ; 8  SAVESCR
              ret z

               push af          ; далее опции корзины
               call .saveSCR_
               pop af
               ld hl, LOADSCR
               push hl
               dec a           ; 9 load Undo
              jp z,LOADUNDO
               dec a           ; 10 swap Undo
              jp z,LD_UNDO
               dec a           ; 11 save Undo
              jp z,SV_UNDO
               pop hl
              pop hl
1
              call .saveSCR_
              ld a,ArrCancel_Y   ; Для cancel
              call GUI
              ld a,ARW_DEFAULT
            jp GUI

.I_mod        xor a     ; a=[ nop ]      ; Increase
             jr 1F
.D_mod        ld a,#EB  ; a=[ ex de,hl ] ; Decrease
1            ld (.fl_EXmod ),a
            ret

.I_mod_       ld hl,.I_out
             xor a            ; nop
            jr 1F

.D_mod_      ld hl,.D_out
             ld a,#AE          ; xor (hl)
1            ld (.DrawPRC),hl
             ld (.Dr_MOD),a
            ret

.Mode_set
              ld a,(WDithCan.Mode-1)   ; количество
              ld c,a
              ld a,(WDithCan.Mode)
              inc a
              cp c
             jr c,1F
              xor a
1             ld (WDithCan.Mode),a
.Can_Mode     xor a             ; nop for layer mode
              ld (.or_b),a
              ld (.xor_b),a
              ld a,(WDithCan.Mode)
              or a
              ld c,a
              ld hl,DithCUR.s0   ; Layer mode select
              ld b,#01           ; ld b,nn
              ld a,#C8           ; ret z
              ld e,#FA           ; (#CB,#FA = set 7,d )
             jr z,1F
              ld a,#B0           ; or b for any modes
              ld (.or_b),a
              ld a,#A8           ; xor b for any modes
              ld (.xor_b),a
              ld a,#C8           ; ret z
              ld hl,DithCUR.s1   ; Tube mode select
              ld e,#BA           ; (#CB,#BA = res 7,d )
              dec c
             jr z,1F

              ld hl,DithCUR.s2   ; Spraying mode select
              ld b,#CD           ; call nn
              dec c
             jr z,1F

              ld hl,DithCUR.s3   ; Aerosol mode select
              xor a              ; nop

1
              ld (.DretZ),a
              ld a,b
              ld (.Lmod_b),a
              ld a,e
              ld (.set7D+1),a

              ld (ARW_ADR),hl
              ld hl,#0100
              ld (ARW_XDISP),hl

           ret

.Slowly_ex   ld a, (WDithCan.Slow)
             cpl
             ld (WDithCan.Slow),a
.Slow_Mode   ld a,(WDithCan.Slow)
             or a
             ld a,6
            jr z,1F
             ld a,12
1            ld (.MaxCount),a
            ret


.NoRGB_      call .no_RGB
.NoRGB_Mode  ld a,(WDithCan.NoRGBcol)
             bit 1,a
             ld a,#12  ; ld (de),a    for RGB mode
            jr nz,1F
             xor a     ; nop for No RGB mode
1            ld (.MixCol_),a
            ret


.DrawINT     push ix
             push iy
          ;   ld a,4
          ;   out (#FE),a
             ld ix,DithCanOvb.CAN0
.DrCodADR  EQU $-2
             ld hl,.I_mod_
             ld de,.D_mod_
.fl_EXmod     ex de,hl        ; nop / ex de,hl
             ld a,(DIRECT)
              ld c,a
              ld a,(BRK)
              cp 6              ; %110
             jr nz,1F
              ex de,hl
              set 4,c
1             call JP_HL    ; выбор режима
              ld a,c
              and #10
            jr  nz, 1F
             ld hl,#FFFF
             ld (.LastXY),hl
             ld a,1
             ld (.int_Count),a
            jr 3F
1            ld a,5
.int_Count  EQU $-1
             dec a
             ld (.int_Count),a
            jr nz,2F
             ld a,6
.MaxCount EQU $-1               ; Max Int. counter число счётчика прерываний
             ld (.int_Count),a
.Lmod_b      call .cleanBF      ; call / ld bc,nn замена от режима
2            ld a,ScrPage|#10
             call Ram
             call .Draw
             call guiRAM

3         ;   xor a
          ;   out (#FE),a

             pop iy
             pop ix
            ret

.Draw        ld a,1            ; ставим флаг что было рисование.
             ld (.fl_undo),a
             ld hl,(ARW_X)
             ld a,l
             rrca
             rrca
             and #3F
             ld e,a
             ld a,h
             rrca
             rrca
             and #3F
             ld d,a           ; de - позиция стрелки в чанках

             ld hl,0
.LastXY    EQU $-2            ; последняя позиция или #FFFF
             ld bc,#7F7F      ; чрезмерное смещение для первого файра
             bit 7,h          ; проверка нового файра
            jr nz,.newLast    ; на новый заход
             ld a,d
             sub h
             ld b,a           ; смещение по Y
             ld a,e
             sub l
             ld c,a           ; смещение по X
             or b
.DretZ       ret z             ; ret z / nop : выход если позиция не сместилась или nop


.newLast    push de
             ld (.LastXY),de
             ld a,(.C_size)
             ld e,a
             ld a,b
             call .modA
             cp e
            jr nc,3F
              or a
             jr z, 1F
              bit 7,b
              call .rotYbf   ; прокрутка буфера по Y флаг z - вверх, nz - вниз , a - количестово байт,

1            ld a,c
             call .modA
             cp e
            jr nc,3F
              or a
            jr z,4F
              bit 7,c
              call .rotXbf   ; прокрутка буфера по X флаг z - влево, nz - вправо , a - количестово бит
            jr 4F
3            call .cleanBF     ; очистка буфера

4           pop de

             ld iy,DithCanOvb.dBuff

             ld a,d
             sub 0
.StX   EQU $-1        ; смещение до начала области от центра
             ld d,a
             ld a,e
             sub 0
.StY  EQU $-1         ; смещение до начала области от центра
             ld e,a


             ; de - позиция начального чанка в области , получаем код адреса
             ld a,e
             ex af,af'
             ld a,d
             rlca
             rlca
             rlca
             rlca
             and #E0
             ld e,a
             ld a,d
             rrca
             ld b,a
             xor #40
             and #60
             ld c,a
             bit 7,b
            jr z,1F
             set 2,c  ; нечётный чанк
1            ld a,b
             and #18
             or c
             ld d,a   ; de - код для адреса строки , если за экраном, то d < #40 => bit 6,d == 0 или d >= #58
             ex af,af'
             ld c,a

           ; ix - CAN-adsres ; de код адреса строки, с - x
             ld b,1
.C_size  EQU $-1

.Lp_draw     ld a,d
             cp #58
            ret nc

             push bc
              cp #40
            jr c,.e_002

             ld a,(ix)
             ld b,(iy)
.or_b        or b      ; or b / nop ; nop - for layer
             ld (iy),a
.xor_b       xor b     ; xor b /nop ; nop - for layer
             ld b,8
1            or a
            jr z, .e_002           ; end
             rla
             push af
            jr nc,.e_001


             ; выводим хрень на экран


             ld a,c
             cp 64
            jr nc,.e_001      ; за экраном
             push de
             ld hl,.e_0hl
             push hl         ; точка возврата
             srl a
             push af
             add a,e
             ld e,a                 ; собрали адрес
.set7D       set 7,d       ; set 7,d / res 7,d   ; для равномерного режима
             pop af
            jp c, .dr_nod     ; вывод нечетного чанка
            jp .dr_odd        ; вывод четного чанка


.e_0hl       res 7,d       ; для равномерного режима
             ld a,(de)
             or (hl)
.Dr_MOD      xor (hl)    ; nop /xor (hl) for Increase/Decrease
             ld (de),a

             ld a,d
             rrca
             rrca
             rrca
             and 3
             or #58
             ld d,a
             ld a,(de)
             call MIXCOL
.MixCol_     ld (de),a   ; ld a,(de) / nop  ; меняется от режима  No RGB

             pop de

.e_001      inc c
            pop af
           djnz 1B
.e_002
           ld a,4
           add a,d
           ld d,a
           and 7
          jr nz,1F
           ld a,e
           sub #E0
           ld e,a
           sbc a,a
           and #F8
           add a,d
           ld d,a

1
            inc ix
            inc iy
            pop bc
           djnz .Lp_draw
          ret

.cleanBF   push hl
            ld hl,DithCanOvb.dBuff
            xor a
           DUP 8
            ld (hl),a
            inc l
           EDUP
           pop hl
          ret

.rotXbf    push hl         ; прокрутка буфера по X флаг z - влево, nz - вправо, a - количество
           push bc
            ld b,a
          jr nz,.rotXbf_
1           ld hl,DithCanOvb.dBuff
             DUP 8
              or a
              rl (hl)
              inc l
             EDUP
            djnz 1B
           pop bc
           pop hl
          ret
.rotXbf_    ld hl,DithCanOvb.dBuff
             DUP 8
              or a
              rr (hl)
              inc l
             EDUP
            djnz .rotXbf_
           pop bc
           pop hl
          ret

.rotYbf    push hl          ; прокрутка буфера по Y флаг z - вверх, nz - вниз , a - количестово байт
           push bc
           ld b,a
          jr z,.rotYbf_
1          ld hl,DithCanOvb.dBuff+7
           DUP 7
            dec l
            ld a,(hl)
            inc l
            ld (hl),a
            dec l
           EDUP
            ld (hl),0
           djnz 1B
           pop bc
           pop hl
          ret
.rotYbf_   ld hl,DithCanOvb.dBuff
           DUP 7
            inc l
            ld a,(hl)
            dec l
            ld (hl),a
            inc l
           EDUP
            ld (hl),0
           djnz .rotYbf_
           pop bc
           pop hl
          ret

.modA      bit 7,a        ; a=|a|
          ret z
           neg
          ret

.dr_nod    ; out nodd chunk ; de - addr
            ld hl,DithCanOvb.InodTB
           jr 1F
.dr_odd    ; out odd chunk ; de - addr
            ld hl,DithCanOvb.IoddTB
1         jp .I_out
.DrawPRC  EQU $-2
.I_out                   ;  p0
            inc d        ; 1
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p1
            inc d
            inc d        ; 3
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p2
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p3
            dec d
            dec d        ; 1
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p4
            dec d        ; 0
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ;p5
            inc d
            inc d        ;2
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p6
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p7
            dec d
            dec d        ; 0
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p8
            inc d
            inc d
            inc d        ; 3
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p9
            dec d
            dec d        ; 1
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p10
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p11
            inc d
            inc d        ;3
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p12
            dec d
            dec d
            dec d         ; 0
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p13
            inc d
            inc d        ; 2
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p14
            dec d
            dec d       ; 0
            ld a,(de)
            and (hl)
           ret z
            inc l
                          ; p15
            inc d
            inc d       ; 2
           ret



.D_out      ld a,15
            add a,l
            ld l,a        ; hl адрес последнего кода пикселя
                          ;  p15
            inc d
            inc d        ;2
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p14
            dec d
            dec d        ;0
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p13
            inc d
            inc d         ;2
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p12
            dec d
            dec d        ;0
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p11
            inc d
            inc d
            inc d        ;3
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p10
            dec d
            dec d         ;1
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p9
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p8
            inc d
            inc d        ;3
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p7
            dec d
            dec d
            dec d        ;0
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p6
            inc d
            inc d        ;2
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p5
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p4
            dec d
            dec d        ;0
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p3
            inc d        ;1
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p2
            inc d
            inc d        ;3
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p1
            ld a,(de)
            and (hl)
           ret nz
            dec l
                          ; p0
            dec d
            dec d        ;1
           ret


.CanDat    DB 1,3,0   ; x,y, выбран или нет / 1 - выбран , 0 - нет
             DW DithCanOvb.CAN0    ; addres of data
           DB 3,3,0
             DW DithCanOvb.CAN1
           DB 5,3,0
             DW DithCanOvb.CAN2
           DB 8,3,0
             DW DithCanOvb.CAN3
           DB 11,3,1
             DW DithCanOvb.CAN4
           DB 1,6,0
             DW DithCanOvb.CAN5
           DB 5,6,0
             DW DithCanOvb.CAN6
           DB 10,6,0
             DW DithCanOvb.CAN7
           DB #FF


.WDraw    DB 0,0,32,24,0,0,%1000
          DB 0
          DW Nil          ; объект-текст
          DW Nil          ; объект-подсветка (выборка)
          DW .HDrwBut     ; горячие клавиши
        ;  DW Nil          ; объект-кнопки (выборка)
        ;  DW Nil          ; объект-флажки
        ;  DW Nil          ; объект-радио кнопки
        ;  DW Nil          ; ползунок
        ;  DW Nil          ; вызов при создании
          DW #0005         ; пропуск адресов
          DW .DrawINT     ; вызов на "прерываниях"
          DW #FFFF

; объект-горячие клавиши (hotkeys object)
.HDrwBut
        DB "C",0           ; C - RGB Colour
         DW 0
        DB "N",0           ; N - No RGB
         DW 1
        DB "K",0           ; K - miniRGB
         DW 2

        DB "L",0           ; L - last  (cancel last do)
         DW 3
        DB "Z",0           ; Z - last  (cancel last do)
         DW 3

        DB "1",0           ; 1 - Increase mode
         DW 4
        DB "2",0           ; 2 - Deacrease mode
         DW 5
        DB "3",0           ; 3 - Mode
         DW 6
        DB "4",0           ; 4 -Slowly +-
         DW 7
        DB "X",0           ; X to Save to SCR
         DW 8
        DB #0D,0           ; Enter to Save to SCR
         DW 8
        DB CS,"U"          ; Cs/U - load Undo
         DW 9
        DB "U",0           ; U - swap at Undo
         DW 10
        DB CS,"Y"          ; CS/Y - Save to Undo
         DW 11

        DB #FF


WDithCan   DB 10,2,19,16,5*8,5,%00001111
           DB 0
           DW .Text              ; объект-текст
           DW .SW                ; объект-подсветка (выборка)
           DW Nil  ;.HWkeys            ; горячие клавиши в окне
           DW .Butts             ; объект-кнопки (выборка)
           DW .Flag              ; объект-флажки
           DW .Radi              ; объект-радио кнопки
           DW Nil                ; ползунок
           DW BDithCan.Cr          ; вызов при создании
        ;   DW BDithCan.WinInt      ; вызов на "прерываниях"
           DW #FFFF

.Text      MSG_DithCan_title : DB 13
           DB 22,1,11
           MSG_DithCan_layer : DB 13
           MSG_DithCan_tube : DB 13
           MSG_DithCan_spray : DB 13
           MSG_DithCan_aerosol : DB 13
           DB 22,10,11
           MSG_DithCan_slowly : DB 13
           MSG_2Mbut : DB 13
           DB 22,15,13
           DB " _>>",13," _>>",13
           DB 22,10,13
           MSG_DithCan_increase : DB 13
           MSG_DithCan_decrease : DB 13
           DB 0

.SW      DB 1,3,1,1,%10     ; 0
         DB 3,3,1,1,%10     ; 1
         DB 5,3,2,2,%10     ; 2
         DB 8,3,2,2,%10     ; 3
         DB 11,3,3,3,%10    ; 4
         DB 1,6,3,3,%10     ; 5
         DB 5,6,4,4,%10     ; 6
         DB 10,6,4,4,%10    ; 7   ; / cans

         ; DB 1,11,8,1,%11    ;8   layer
         ; DB 1,12,8,1,%11    ;9   Tube
         ; DB 1,13,8,1,%11    ;10  Spray
         ; DB 1,14,8,1,%11    ;11  Aerosol
         DB 1,11,8,128+4,%11

         DB 10,13,8,1,%11   ; 12  Increase >>
         DB 10,14,8,1,%11   ; 13  Deacrease >>
         DB 10,11,8,1,%11   ; 14   Slow
         DB 10,12,8,1,%11   ; 15   Use mouse button 2
         DB #FF

.Radi     DB 8,11,8,4,2
.Mode EQU $-1
           DW Nil
          DB #FF

.Flag     DB 17,11,14,0
.Slow EQU $-1
           DW Nil
          DB 17,12,15,0
.MButt_2 EQU $-1
           DW Nil
          DB #FF

.Butts
          DB 16,3,2,2,7,%11
.NoRGBcol   EQU $-2
           DW NORGBS
          DB 16,6,2,2,7,%11
           DW RGBS
          DB 16,8,2,2,6,%00
.dtCOL  EQU $-2
           DW DTRS
          DB #FF


DithCUR
.s0     DB 193,8,129,28,1,52,1,104   ; Layer (шпатель)
        DB 0,244,0,106,128,6,240,0
        DB 255,0,255,0
.s1     DB 143,0,7,80,3,56,1,92      ; Tube (тюбик)
        DB 0,46,128,22,192,14,224,4
        DB 193,8,243,0
.s2     DB 3,0,1,120,0,36,0,50       ; Spray (спрей)
        DB 0,104,1,104,3,104,3,120
        DB 3,48,135,0
.s3     DB 7,0,7,112,3,48,3,120      ; Aerosol (баллончик)
        DB 3,104,3,72,3,72,3,88
        DB 3,120,3,0



        ASSERT  $ < #C000
        ENT
LDithCan       EQU $-DithCanPGN   ; DithCanOvb

      DISPLAY "DithCan len :",/a, LDithCan