; обрезка выделенного окна для BGE



 ; расширение файла плагина '.adw'


; Требуется соблюдение условий работы со стуктурой хранения окна в памяти BGE

; Вход HL - адрес возврата из плагина.
; Разрешается выход по RET при условии что адрес выхода на стеке не изменился
; Выход SCF - ошибка/модуль не оставлять в памяти



        device  zxspectrum128       ; for SjASMPlus

    INCLUDE "../local.asm"  ; for varios localisations

    INCLUDE "../KerBGE.asm"
    INCLUDE "../NumGUI.asm"

    ORG #6128       ; адрес расположения перемнных
    INCLUDE "../GuiVar.asm"    ; GUI (не менять!!!) don't change!!!
    INCLUDE "../BGEversion.asm"
    INCLUDE "../KerWIN.asm"

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

START      call WinCut

           ld a,ARW_DEFAULT
           call GUI
           xor a
          ret


WinCut   ; код плагина



1             ld a,128+%1110
2             ld ix,Wwcut
              ld (ix+6),a
           ;   ld a,ARW_DEFAULT
           ;   call GUI
              ld a,Win
              call GUI
              push af
              call CLOSE
              pop af
              cp #FF
             ret z
              ld c,a
              cp 2
             jr c,.draw
              sub 3
              cp 2
             jr c,.cnk_sw
        ;      ld a,128+%1100
             jr 1B

.cnk_sw
              WINCALL BordChank

.redraw
              WINCALL OutWin
             jr 1B

.draw         push bc
              call .selectBR
              pop bc
             jr c,1B

.ldraw
              ld hl,.Ret
              ld a,ARW_SCN
              call GUI ; call ARW_SCN_
             jr c,.draw


             jr .ldraw





.selectBR     ld a,ARW_DEFAULT
              call GUI
              ld ix,Wwcut_BRs
         ;     call POPUP
              ld a,%1110
              ld (ix+6),a
              ld a,Win
              call GUI ;call Win_
              push af
              call CLOSE
              pop af
              push af
              sub 3
             jr c,1F
              cp 2
              call c,WinFunc : DB BordChank
1             WINCALL OutWin
              pop af
              cp #FF
              scf
             ret z
              ld c,a
              ld a,(But)
              cp 5
             jr c,.sbr1_
              ld a,c
              cp 2
             jr c,.slwin_

             jr z,.selectBR      ; тут будет сброс

             jr .selectBR
.slwin_       push bc
              ld ix,wcutIX_     ; temp
              call R1Sel
              pop bc
             jr c,.selectBR


             jr .selectBR
.sbr1_        add a,a  ; *2
              ld c,a
              add a,a ; *4
              add a,a ; *8
              add a,c ; *10
              ld c,a
              ld b,0
              ld hl,SprBrCut_
              add hl,bc
              ld c,(hl)
              inc hl
              ld b,(hl)
              inc hl
              ld (ARW_XDISP),bc
              ld de,WCUTARWSPR
              ld (ARW_ADR),de
              ld b,8
1             inc de
              ld a,(hl)
              inc hl
              ld (de),a
              inc de
             djnz 1B
              xor a
.Ret         ret




Wwcut      DB 10,4,10,4,7*8,7,128+%1110
           DB 7*8+3
           DW .txt
           DW .sel
           DW .hk
           DW #FFFF

.txt       DB "Cutting",13
           DB "Erasing",13
           DB 0

.sel       DB 1,1,8,128+2,%11
          DB #FF

.hk        DB "B",0
          DW 3
           DB "N",0
          DW 4
         DB #FF



Wwcut_BRs  DB 10,4,11,7,5,7,%1110 ; выбор кисти
           DB 0
           DW .txt         ; объект-текст
           DW .sel
           DW Wwcut.hk
           DW .buts
           DW #FFFF

.txt       DB 13,13,#0A
           DW .tselection_ : DB "+",13,#0A
           DW .tselection_ : DB "-",13
           DB "-Reset-",0

.tselection_  DB "Selection ",#FF

.sel       DB 1,3,9,128+3,%11
           DB #FF

.buts       DB 96+5,64+1,128+32+1,1,1,8+7,%11
.Adrs
           DUP 5 ;8
            DW ($-.Adrs)*5+SprBrCut_+2
           EDUP
           DB #FF



WCUTARWSPR    DB #FF,00,#FF,00,#FF,00,#FF,00,#FF,00
              DB #FF,00,#FF,00,#FF,00,#FF,00,#FF,00

SprBrCut_  ;ARW_XDISP, ARW_YDISP,Спрайт кисти

              DB 1,1,0,64,0,0,0,0,0,0
              DB 2,2,0,112,112,112,0,0,0,0
         ;     DB 3,3,0,124,124,124,124,124,0,0
              DB 3,3,255,255,255,255,255,255,255,255
         ;     DB 2,2,0,48,120,120,48,0,0,0
              DB 3,3,0,56,124,124,124,56,0,0
         ;     DB 3,3,56,124,254,254,254,124,56,0
              DB 3,3,60,126,255,255,255,255,126,60



wcutIX_   DB 0,0,0,0        ;временно

;--------------------------------------------------------
LEN EQU $-PgnAdr

         ASSERT $ < #C000
         savebin "WinCut.adw",PgnAdr,LEN
         DISPLAY "Lenght : ",/a,LEN


