; Pixels mask procedures for BGE  - old version (not used) / DA

PMaskPgn
          DISP PgnAdr
PMask
          ld ix,WPMask
          call POPUP
          ld (.spp),sp
.win_     ld sp,(.spp)
          ld a,%1111
1         ld ix,WPMask
          ld (ix+6),a
          ld a,(Sieve)
          ld (FlPmask.sieve),a
          call Winn_
          cp #FF
         jp z,CLOSE
          cp 2
         jr c, 1F
.next     call NOKEY_
          ld a,%1101
         jr 1B
1         ld (.option),a
          call NOKEY_
          ld a,(SetUpload.yes)
          or a
         jr nz,2F
          ld ix,WPmskNW
          call POPUP
          ld a,%1110
1         ld (ix+6),a
          call Winn_
          call CLOSE
         jr .next
2         call .sSEL
          call NOKEY_
          ld a,0
.option  EQU $-1
          or a
         jr nz,1F
          call PMaskLOAD
         jr 2F
1         call PMaskSAVE
2         call CLOSE
         jr .win_




.EDT     ld ix,EdPMask
         call POPUP
         call .EDT_
         call CLOSE
         call .init
        jr .win_

.sieve     ld a,(FlPmask.sieve)
           ld (Sieve),a
          ret


.init
          ld a,PgnPage2|#10
          call Ram
          ld hl,(DTPMASKS-1)*32+#DB00      ; адрес чистой иконки
          ld de,PMSKBUFF
          ld bc,32
          ldir
          call RAM_N                       ; восстанавливаем страницу
          call .bfSPR
          ld hl,PMSKBUFF+4
          ld de,DMSKbuff+2
          call .init2
          ld de,DMSKbuff
.init2
          ld b,6
1         ld a,(de)
          ld c,a
          and #3F
          or (hl)
          ld (hl),a
          inc hl
          ld a,c
          and #FC
          or (hl)
          ld (hl),a
          inc hl
          inc de
         djnz 1B
          ret

.Int                      ; выбор маски на прерывании
          ld a,(DIRECT)
          and #10
          ret z
          xor a
          ld (.edflag),a
1         ld hl,(ARW_XC)
          ld a,l     ; x
          sub (ix+0)
          ret c
          ld l,a
          ld a,h
          sub (ix+1)
          ret c
          ld h,a
          ld a,(ix+2)
          cp l
          ret c
          ld a,(ix+3)
          cp h
          ret c
          ld a,h
          sub 3
          ret c
          cp 5
         jr c,1F
          ret z
          cp 6
          ret nz
          ld a,4
          ld (.edflag),a
1         bit 0,a
          ret nz
          rlca
          rlca
          ld h,a
          ld a,l
          cp 16
          ret nc
          or a
          rra
          ret nc
          add a,h
          ld (PixelMSK),a
          ld a,STOP_ARW
          call GUI_
          call .bfSPR
          ld a,0
.edflag  EQU $-1
          or a
         jp nz,.EDT
          call CLOSE
          ld sp,0
.spp   EQU $-2
         jp .init



.Cr                       ; прорисовываем все маски
          ld de,#0103     ; x=1, y=3

          ld a,#36        ; ld (hl),n
          ld (.crcol),a
          xor a
          ld (.crfL),a
1         push af
          push de
           ld c,0
.crfL   EQU $-1            ; флаг строки редактора
          push bc
           dec c
           call nz,.bfSPRo         ;.bfSPRa
          pop bc
          pop de
          push de
           call RealWin
          push de
           call RASCH
           ld b,8
           ld de,DMSKbuff
           inc c
           dec c
          jr z,2F
           ld de,.edtbut
2          ld a,(de)
           inc de
           ld (hl),a
           inc h
          djnz 2B
         pop de
           call RASCHA_
.crcol     ld (hl),7        ; цвет для маски
         pop de
           inc d
           inc d
           ld a,d
           cp 16
          jr c,3F
           ld d,1
           inc e
           inc e
3         pop af
           inc a
           cp 24
          jr c,1B
           cp 32
          jr nc,1F
          ld (.crfL),a
           ld c,a
           ld a,#3E     ; ld a,n
           ld (.crcol),a
           ld a,c
          jr 1B
1

.bfSPRo   xor a
          ld (.bincd1),a
          ld (.bincd2),a
          call .bfSPRa
          ld a,#13    ; inc de
          ld (.bincd1),a
          ld (.bincd2),a
          ret

.bfSPR    ld a,(PixelMSK)
.bfSPRa   ld de,DMSKbuff                 ; получаем спрайт 8x8 в буфере или 8x16
          ld b,0
1         ld c,a
          cp 16
         jr nc,.bfSPRe
          add a,a
          add a,a
          ld c,a
          ld hl,CTB
          add hl,bc
          ld c,2
1         push hl
          ld b,4
2         ld a,(hl)
          inc hl
          cpl
          ld (de),a
.bincd1       inc de   ; меняется на nop для 8x8
          ld (de),a
          inc de
         djnz 2B
          pop hl
          dec c
         jr nz,1B
.bfSPR32   ld de,DMSKbuff+16    ; делаем из спрайта 8x16 - 16x16
           ld hl,DMSKbuff
           ld bc,16
           ldir
          ret
.bfSPRe   sub 16
          add a,a
          add a,a
          add a,a
          ld c,a
          ld hl,PMaskData
          add hl,bc
          ld (EdPMask.adr),hl
          ld b,8
1         ld a,(hl)
          inc hl
          ld (de),a
.bincd2      inc de   ; меняется на nop для 8x8
          ld (de),a
          inc de
         djnz 1B
         jr .bfSPR32
;         ret





.edtbut    DB  #02,#E5,#8A,#94,#A8,#B2,#82,#FE   ; спрайт редактирования


.EDT0    ld a,%1101
         ld (ix+6),a
.EDT_    ld hl,EdPMask
         call SPEdit
         inc a
        jp z, CLOSE             ; #FF
         ld hl,(EdPMask.adr)
         ld b,8
         dec a                  ;
        jr nz,2F
1        ld (hl),0
         inc hl
        djnz 1B
        jr .EDT0
2        dec a
        jr nz,2F
1        ld a,(hl)
         cpl
         ld (hl),a
         inc hl
        djnz 1B
        jr .EDT0
2       push af
         call CLOSE
         call SWAP_SCR
         ld ix,PMask_scr
         xor a
         call Ramka8
         ld de,(PMask_scr)
         call RASCH_
         ld de,(EdPMask.adr)
         ld b,8
        pop af
         dec a
        jr nz,2F
1        ld a,(hl)     ; take
         ld (de),a
         inc h
         inc de
        djnz 1B
        jr 3F
2        ld a,(de)     ; put
         ld (hl),a
         inc h
         inc de
        djnz 2B
3        call SWAP_SCR
        jr .EDT_


.sSEL
          ld ix,WPmskSl
          call POPUP
          ld a,%1110
.sSEL_    ld (ix+6),a
          call Winn_
          cp #FF
         jp z,CLOSE
          cp 3
         jr c,1F
          call NOKEY_
          ld a,%1100
         jr .sSEL_
1         ld (PMskSlot),a
         jp CLOSE




PMask_scr DB 16,12,1,1

WPMask  DB 10,4,17,14,5*8,5,%00001111
        DB 0
        DW TPMask             ; объект-текст
        DW SPMask             ; объект-подсветка (выборка)
        DW Nil                ; горячие клавиши
        DW Nil                ; объект-кнопки (выборка)
        DW FlPmask            ; объект-флажки
        DW Nil                ; объект-радио кнопки
        DW Nil                ; ползунок
        DW PMask.Cr           ; вызов при создании
        DW PMask.Int          ; вызов на "прерываниях"
        DW #FFFF

EdPMask  DB #00,#00       ; X,Y окна
         DB #0E,#08       ; ширина, высота
.adr     DW 0             ; адрес спрайта
         DW #0103         ; X,Y окна редактора
         DW #0101         ; размеры спрайта
         DW #0603         ; X,Y preview
         DW .Text         ; текст
         DW .Sell         ; подсветка
         DW Nil           ; горячие клавиши
.Text      MSG_PMASK_EdHead : DB 13,22,8,3
           MSG_PMASK_Clean  : DB 13
           MSG_PMASK_Invert : DB 13
           MSG_PMASK_Take   : DB 13
           MSG_PMASK_Put    : DB 0

.Sell      DB 8,3,5,1,%11
           DB 8,4,5,1,%11
           DB 8,5,5,1,%11
           DB 8,6,5,1,%11
           DB #FF

TPMask      MSG_PMASK_Head : DB 13,13,13,13,15,13,13,15,13,13,15,13
            MSG_DISK_Load  : DB 13
            MSG_DISK_Save  : DB 13,22,10,11
            MSG_PMASK_Sieve :DB 0

SPMask     DB 1,11,7,1,%11
           DB 1,12,7,1,%11
           DB 10,11,6,1,%11
           DB #FF

FlPmask    DB 15,11,2,#00
.sieve   EQU $-1
           DW  PMask.sieve
           DB #FF

WPmskSl   DB 0,0,7,5,6,6,%1110
          DB 0
          DW .txt             ; объект-текст
          DW .sel             ; объект-подсветка (выборка)
          DW #FFFF
.txt      MSG_PMASK_Slot1 : DB 13
          MSG_PMASK_Slot2 : DB 13
          MSG_PMASK_Slot3 : DB 0

.sel      DB 1,1,5,1,%11
          DB 1,2,5,1,%11
          DB 1,3,5,1,%11
          DB #FF
WPmskNW   DB 0,0,18,3,2*8+7,2*8+7,%1110
          DB 0
          DW .txt
          DW #FFFF
.txt      MSG_PMASK_Please : DB 13,0

LPMask    EQU $-PMask
          ASSERT  LPMask < 6144
          ENT
          DISPLAY "PMask len   :",/a,LPMask
