; part of Sprites module

Cut_menu.e_  ld a,128+%1101          ; next to .Cut
            jr Cut_menu.ct1

Cut_menu   ld hl,SpriteS.n0    ; замена возврата на это
           ex (sp),hl
           call CLOSE          ; закрываем предыдущее окно
           ld a,(vsego)
           or a
           call z,ToScrMenu.s_mode_   ; ставим галки на флажки
.ct0       ld a,128+%1111
.ct1       ld ix,WCut
           ld (ix+6),a

           ld hl,MMend
           ld a,(Omask)
           or a
          jr z,1F
           ld hl,MMstart
           dec a
          jr z,1F
           ld hl,M2M
1          ld (TCut.mtype),hl

           ld hl,MCutFrScr
           ld a,(Oselcut)
           or a
          jr z,1F
           ld hl,MCutFrScr2
           dec a
          jr z,1F
           ld hl,MCutFrFlScr
1          ld (TCut.at),hl

           ld hl,TCut.sx
           call SXCprint
           ld hl,TCut.sy
           call SYCprint

           ld hl,TCut.tcAttr
           call TAtrPrn
           ld hl,TCut.tcMask
           call TMskPrn

           ld a,Win
           call GUI
           cp SCut.end
          jp nc,CLOSE
           ld hl,.e_
          push hl           ; return addres
           or a
         jp z,CutStart
           cp 1
          jr z,SelCut
           cp 12
          jp z,SelMsk
           ld hl,SzXcut
           ld c,31
           cp 6
          jr z,dec_sz
           cp 7
          jr z,inc_sz
           ld hl,SzYcut
           ld c,23
           cp 8
          jr z,dec_sz
           cp 9
          jr z,inc_sz
           cp 10
          jp z,EditSXc
           cp 11
          jp z,EditSYc
           cp 16
          jp z,MaskCode
           cp 15
          jp z,AtrCode
          ret


dec_sz   ld a,(hl)
         dec a
        ret z
         ld (hl),a
        ret
inc_sz   ld a,(hl)
         cp c
        jr c,1F
         ld a,c
1        inc a
         ld (hl),a
        ret

SelCut    call s_Cut_
         ret c
          call ERASE_ALLW
          ld hl,Cut_menu.ct0
          ex (sp),hl
          or a                    ; 0 - из экрана
         jp z,LOADSCR
          dec a
         jp z,LOADSCR2            ; 1 - из теневого экрана
       ;  jr nz,1F
       ;   ld a,RamPage            ; 1 - из теневого экрана
       ;   call RAM
       ;   ld hl,#C000
       ;   ld de,#4000
       ;   ld bc,6912
       ;   ldir
       ;  ret
1         dec a
         ret nz
          ld (Oselcut),a          ; 2 - из файла экрана ; переключаем на экран в дальнейшем
          ld hl,SORTscrNa
          call FilerE
         ret c
          call ERASE_ALLW
          call CLS
          ld hl,#4000        ; куда (to)    = HL
          ld de,(START_SEC)
          ld a,(SEC_LEN)
          cp 28
         ret nc
          ld b,a
          ld c,5
         jp DOS_FUNC_        ; вызвали загрузку



s_Cut_    ld hl,Tselcut
          ld de,TCut.at
.o        ld (WselOp.Top),hl
          dec hl
          push hl
          call SelOP
          pop hl
         ret c
          ld (hl),a
         ret
SelMsk
          ld hl,Tmask
          ld de,TCut.mtype
          push ix
          call s_Cut_.o
          pop ix
          ld de,#0A0A
          ld bc,#1401
         jp CLSVV_    ; in de= d-x, e-y , bc = b- sy , c- sx

CutStart                        ; собственно вырезка спрайтов
            ld a,(Fcut.px)
            ld c,a
            ld a,(Fcut.ms)
            or c
            ld c,a
            ld a,(Fcut.atr)
            or c
           ret z                ; не вырезаем, если ничего не выбрано

            ld hl,Cut_menu.ct0
            ex (sp),hl          ; меняем адрес возврата
            call CLOSE_ALLW
            ld hl,(ARW_XC)
            ld (.cutIX),hl

.n0         ld a,(vsego)
            inc a
           ret z           ; не вырезаем, если уже есть 255 спрайтов
            ld ix,.cutIX
        ;    call .nextarw
            ld a,NOKEY
            call GUI
            ld hl,#0101
            ld (.cutIX+2),hl
            ld a,#FF
            ld (.cutIX2),a       ; если #FF, то вырезается только один раз
            ld a,(Fcut.sz)
            or a
           jr nz,1F
            xor a
            call Ramka8
           ret c
            scf
           jr 2F
1           ld a,(SzXcut)
            ld (.cutIX+2),a
            ld a,(SzYcut)
            ld (.cutIX+3),a
            xor a
2           call Ramka8
           ret c

            ld hl,(.cutIX)
            ld (.cutIX2),hl

         ;;  call MULS  ; HL = A*H
            ld hl,(.cutIX+2)
            call CSprSize
            ld hl,0
            ld a,(Fcut.atr)
            and 4   ; т.к. флажки либо 0, либо #FF, то берём нужный байт
           jr z,1F
            add hl,bc
1           ld c,a   ; в c будет код Flags
            ld a,(Fcut.px)
            and 1
           jr z,1F
            add hl,de
1           or c
            ld c,a
            ld a,(Fcut.ms)
            and 2
           jr z,1F
            add hl,de
1           or c
            ld c,a
            ex de,hl
            inc de
            inc de       ; +2 на флаги и маску атриб.
            inc de
            inc de       ; +2 на размер   -  de полная длина спрайта
            ld hl,(freeB)
            or a
            sbc hl,de
           jp c,Errmem
            ld a,(Fcut.tran)
            and 8
            ld b,#FF
           jr z,2F
            ex af,af'
            ld a,(Fcut.ams)
            or a
           jr z,1F
            ld a,(TranMsk)
            ld b,a
1           ex af,af'
2           or c
            ld c,a
            and 3
            cp 3
           jr nz,2F
            ld a,(Omask)
            cp 2
           jr z,2F
            push hl
            push de
            push bc
            call .nextpos
            xor a
            call Ramka8
           jr c,1F
            ld a,(Omask)
            dec a
           jr z,1F
            ld hl,(.cutIX2)   ; меняем позиции спрайта и маски
            ld de,(.cutIX)
            ld (.cutIX),hl
            ld (.cutIX2),de   ; fc reset at 'or a'
1           pop bc
            pop de
            pop hl
           ret c
2             ; bc - Amask и Flags , de - полная длина спрайта , hl - остаток памяти
            ld (freeB),hl
            ld hl,(lastByte)   ; адрес записи спрайта
            push hl
            add hl,de
            ld (lastByte),hl
            ld a,AddPage
            call RAM
            ld a,h
            or l
            jr z,1F
            ld (hl),0
1           pop hl
            ld (hl),c
            inc hl
            ld (hl),b
            inc hl
            ld de,(.cutIX+2)  ; sprite size
            ld (hl),e
            inc hl
            ld (hl),d
            inc hl
            ex de,hl      ; de - адрес загрузки спрайта/маски
            ld a,(vsego)
            inc a
            ld (vsego),a

            ld hl,(.cutIX)
            ld (.cutIX3),hl
            ld hl,(.cutIX+2)
            ld (.cutIX3+2),hl
            ld ix,.cutIX3
            bit 0,c
            call nz,SaveWS
            bit 1,c
           jr z,.a_c
            ld a,(Omask)
            cp 2
           jr z,.tm_c
            ld hl,(.cutIX2)
            ld (.cutIX3),hl
            call SaveWS          ; обычная загрузка маски
           jr .a_c
.tm_c        ld a,(Oselcut)    ; теневая маска
             or a
             ld a,RamPage|#10
            jr z,1F
             ld a,ScrPage|#10
1            push af
             call Ram
             call exSCR_
             call ramAdd
             call SaveWS
             pop af
             call Ram
             call exSCR_
             call ramAdd
.a_c           ; загрузка спрайта атрибутов
             bit 2,c
            jr z,.quit
             ld hl,(.cutIX)
             ld (.cutIX3),hl
             ld hl,.obrnot     ;
             bit 3,c
            jr z,1F
             ld a,(Fcut.tnpix)
             and 1
             ld c,a
             ld a,(Fcut.tatr)
             and 2
             or c
            jr z,1F
             ld hl,.obrnpix
             dec a
            jr z,1F
             ld hl,.obratr
             dec a
            jr z,1F
             ld hl,.obrpixatr
1            ld (.tcolObr),hl
             push de
     ;        push bc
           ;  call SaveWA
             ld d,(ix+0)
             ld e,(ix+1)
             call RASCHA_    ; hl адрес атрибуты
    ;         pop bc
             pop de
             ld a,(ix+3)
1            ex af,af'
             push hl           ; hl
             ld b,(ix+2)
2             call .obrnot         ; обработка кода цвета
.tcolObr  EQU $-2
              ld (de),a
              inc de
              inc l
             djnz 2B
             pop hl
             ld bc,32
             add hl,bc
             ex af,af'
             dec a
            jr nz,1B

.quit       ld ix,.cutIX
            ld a,(ix+2)
            ld (SzXcut),a
            ld a,(ix+3)
            ld (SzYcut),a
            ld a,(Fcut.sz)
            or a
           jr z,1F
            call .nextpos
            ld a,(Fcut.ms)
            or a
           jr z,1F
            ld a,(Omask)
            or a
            call z,.nextpos
1          jp .n0



.nextpos    ld l,(ix+2)
            ld a,(.cutIX)
            add a,l
            ld e,a
            add a,l
            cp 33
           jr c,1F
            ld e,0
            ld l,(ix+3)
            ld a,(.cutIX+1)
            add a,l
            ld d,a
            add a,l
            cp 25
           jr nc,2F
            ld (ix+1),d
1           ld (ix+0),e
2
.nextarw    push hl
            ld hl,(.cutIX)
            add hl,hl
            add hl,hl
            add hl,hl
            ld (ARW_X),hl
            pop hl
           ret


.cutIX      DB 0,0,1,1
.cutIX2     DB 0,0
.cutIX3     DB 0,0,0,0    ; for saved


.obrpixatr  call .obrnpix
           ret z
.obratr     ld a,(TranAttr)
            ld c,a
            ld a,(hl)
            cp c
           ret nz
            xor a
           ret
.obrnpix    push hl
            ld a,h
            add a,a
            add a,a
            add a,a
            and #58
            ld h,a     ; pix adr
            xor a
            push bc
            ld b,8
1           or (hl)
            inc h
           djnz 1B
            pop bc
            pop hl
            or a
           ret z
.obrnot     ld a,(hl)
           ret


EditSXc   ld bc,SzXcut
         jr EditSX.c
EditSYc   ld bc,SzYcut
         jr EditSY.c
EditSX    ld bc,Sz_X
.c        ld hl,TCut.sx
          ld de,13*256+6
          ld a,33
         jr EditSY.e
EditSY    ld bc,Sz_Y
.c        ld hl,TCut.sy
          ld de,22*256+6
          ld a,25
.e        call .ee
         ret c
          or a
         ret z
          ld (hl),a
         ret
.ee       push af
          push bc
          call EdtNum
          pop hl
          pop bc
         ret c
          cp b
          ccf
         ret



AtrCode     ld (.spm),sp
.n0         ld a,128+%1110
.n1         ld ix,WAtrCode
            ld (ix+6),a
            ld sp,0
.spm    EQU $-2
            and 2
            call nz,POPUP
            ld hl,TAtrC.tcAtr
            call TAtrPrn
            ld a,(TranAttr)
            ld c,a
            and 7
            add a,48   ; "0"
            ld (TAtrC.tcAink),a
            ld a,c
            rra
            rra
            rra
            and 7
            add a,48
            ld (TAtrC.tcApaper),a
            xor a
            bit 7,c
           jr z,1F
            cpl
1           ld (FAtrC+9),a
            xor a
            bit 6,c
           jr z,1F
            cpl
1           ld (FAtrC+3),a

            ld a,Win
            call GUI
            cp #FF
           jp z,CLOSE
            ex af,af'
            ld a,(TranAttr)
            ld c,a
            ex af,af'
            or a
           jr z,.getAttr
            dec a
           jr z,.edAtr         ;1  edit attr
            sub 3
           jr c,.nxt
            ld b,#07
            ld d,1
           jr z,.colMi_        ; 4 ink -
            dec a
           jr z,.colPl_        ; 5 ink +
            ld b,#38
            ld d,8
            dec a
           jr z,.colMi_        ; 6 paper -
            dec a
           jr z,.colPl_        ; 7 paper +

.nxt        ld a,#FF
            ld (Fcut.tatr),a
.nxt0       ld a,128+%1100
           jr .n1

.colPl_     ld a,c
            and b
            add a,d
1           and b
            ld e,a
            ld a,c
            or b
            xor b
            or e
2           ld (TranAttr),a
           jr .nxt
.colMi_     ld a,c
            and b
            sub d
           jr 1B

.edAtr      ld hl,TAtrC.tcAtr
            ld de,#0901
            call EdHex_
           jr c,.nxt0
           jr 2B

.FAtrCbr  ld hl,FAtrC+3
          ld c,64
         jr 1F
.FAtrCfl  ld hl,FAtrC+9
          ld c,128
1         ld a,(TranAttr)
          or c
          xor c
          ld b,a
          ld a,(hl)
          or a
          ld a,b
         jr z,1F
          or c
1         ld (TranAttr),a
          ld a,STOP_ARW
          call GUI_
         jr .nxt

.getAttr    call CLOSE_ALLW
            ld ix,.r8ix
            ld hl,(ARW_XC)
            ld (.r8ix),hl
            xor a
            call Ramka8
           jr c,1F
            ld de,(.r8ix)
            call RASCHA
            ld a,(hl)
            ld (TranAttr),a
1           ld ix,WCut        ; восстанавливаем окно Cut
            ld (ix+6),128+%1111
           ; ld a,Window
           ; call GUI
            call Window_
            ld ix,WAtrCode    ; восстанавливаем окно AtrCode
            ld (ix+6),128+%1110
           ; ld a,Window
           ; call GUI
            call Window_
           jp .nxt

.r8ix       DB 0,0,1,1

MaskCode    ld a,%1110
            ld (.spm),sp
.n1         ld ix,WMskCode
            ld (ix+6),a
            ld sp,0
.spm    EQU $-2
            and 2
            call nz,POPUP

            ld hl,TMskC.tcMask
            call TMskPrn

            ld a,(TranMsk)
            ld c,a
            ld a,#F8      ; ink
            ld hl,FMskC+3
            call .fmsZ
            ld a,#C7      ; paper
            ld hl,FMskC+9
            call .fmsZ
            ld a,#BF      ; bright
            ld hl,FMskC+15
            call .fmsZ
            ld a,#7F      ; flash
            ld hl,FMskC+21
            call .fmsZ

          ;  ld a,Win
          ;  call GUI
            call Win_
            cp #FF
           jp z,CLOSE
            or a
           jr nz,.nxt
            ld hl,TMskC.tcMask
            ld de,#0801
            call EdHex_
           jr c,.nxt
            ld (TranMsk),a

.nxt        ld a,#FF
            ld (Fcut.ams),a
            ld a,%1100
           jr .n1


.fmsZ       or c
            cp #FF
           jr z,1F
            xor a
1           ld (hl),a
           ret

.flg0       ld c,7          ; ink
            ld a,(FMskC+3)
           jr 1F
.flg1       ld c,56         ; paper
            ld a,(FMskC+9)
           jr 1F
.flg2       ld c,64          ; bright
            ld a,(FMskC+15)
           jr 1F
.flg3       ld c,128         ; flash
            ld a,(FMskC+21)
1           or a
            ld a,#A9    ;  'xor c'
           jr z,1F
            xor a       ;  'nop'
1           ld (.fxor),a
            ld a,(TranMsk)
            or c
.fxor       xor c
            ld (TranMsk),a
            ld a,STOP_ARW
            call GUI_
           jr .nxt




SelOP     ld a,%1110
          ld ix,WselOp
          ld (ix+6),a
          call POPUP
          ld a,Win
          call GUI
          push af
          call CLOSE
          pop af
          cp #FF
          scf
         ret z
          or a
         ret



WCut   DB 2,3,28,19,5*8,5,128+%1111
; Bit 0 - окно с заголовком/без (window with title)
; Bit 1 - "перерисовать" окно да/нет (redraw window)
; Bit 2 - тискать окно по экрану да/нет (movable window)
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL by clicking outside the window)
; Bit 4 - запрет выхода по клику за пределами окна (добавлено для BGE 4.xx работает при Bit 3 = 1 ) / Dart Alver
    DB 5*8+3      ; атрибут неактивного цвета
.T  DW TCut       ; объект-текст (text object)
    DW SCut       ; объект-подсветка (выборка) (highlighting object)
    DW HCut       ; горячие клавиши (hotkeys)
    DW Nil        ; объект-кнопки (выборка) (buttons object)
    DW Fcut       ; объект-флажки (flags object)
    DW 2 ;Nil        ; объект-радио кнопки (radio buttons object)
   ; DW Nil        ; ползунок (scrollbar)
    DW  CrCut      ; вызов при создании (call on create)
    DW 2 ;Nil        ; вызов на "прерываниях" (call "on interrupt")
   ; DW Nil        ;   Вызов на прерываниях после прорисовки стрелки
    DW .wcutSprs  ;   объект спрайты (sprites object)
  ;  DW Nil        ;   объект область заполненная цветом (color box)
  ;  DW Nil        ;   вызов перед прорисовкой окна

    DW #FFFF

.wcutSprs

         DB 64+32+6,128+64+10,128+6,1,1,5*8,%01
          DW SprMinus
         DB 16,6
          DW SprPlus
         DB 17,6
          DW SpriX
         DB 19,6
          DW SprMinus
         DB 25,6
          DW SprPlus
         DB 26,6
          DW SpriY

         DB #FF



TCut     MSG_Title_cut : DB 13
         MSG_cut : DB 13,15,13,13
         MSG_CutSize : DB 13,13
         MSG_CutPixels : DB 13,13
         MSG_CutMask : DB 13,13
         MSG_CutAttr : DB 13,13,13,15,13,22,1,17
         MSG_Menu : DB 13,22,19,17
         MSG_CutStart : DB 13,22,9,3
          DB #0A   ; вывод по адресу
.at      DW MCutFrScr
          DB 22,11,6
         DB "SX=",#17,2;13,22,13,6
.sx      DB "00*8p",#17,9;13,22,20,6,"SY=",13,22,22,6
          DB "SY=",#17,11;13,22,22,6
.sy      DB "00*8p",13,22,10,10
          DB #0A
.mtype   DW MMend
          DB 22,10,12
         MSG_AtTrn  : DB 13,22,19,12
         MSG_AtNoPix : DB 13
         MSG_AtTrAtt
.tcAttr  DB "00",13
         MSG_AtMask
.tcMask  DB "FF",13
        DB 0


SCut      DB 18,17,9,1,%11  ; 0  - Вырезать >>
          DB 8,3,19,1,%11   ; 1  - Вырезать из...
          DB 1,6,8,1,%11    ; 2  - Размер Fl.
          DB 1,8,8,1,%11    ; 3  - Пиксели Fl.
          DB 1,10,8,1,%11   ; 4  - Маска Fl.
          DB 1,12,8,1,%11   ; 5  - Атрибуты
          DB 10,6,1,1,%11   ; 6  - '-' for sX
          DB 16,6,1,1,%11   ; 7  - '+' for sX
          DB 19,6,1,1,%11   ; 8  - '-' for sY
          DB 25,6,1,1,%11   ; 9 - '+' for sY
          DB 13,6,1,1,%11   ; 10 - edit sX
          DB 22,6,1,1,%11   ; 11 - edit sY
          DB 10,10,14,1,%11 ; 12 - Select mask option
          DB 10,12,8,1,%11  ; 13 - transparent flag
          DB 19,12,8,1,%11  ; 14 - Not pixels to transparent flag
        ;  DB 19,13,7,1,%11  ; 15 - Attribute for transparent color 0
        ;  DB 19,14,7,1,%11  ; 16 - Mask fot atributes
          DB 19,13,7,128+2,%11   ; 15,16
        ;  DB 26,13,1,1,%11  ; 17 - Attribute for transparent color flag
        ;  DB 26,14,1,1,%11  ; 18 - Mask fot atributes flag
          DB 26,13,1,128+2,%11   ;17,18
.end    EQU ($-SCut)/5
          DB 1,17,7,1,%11   ; 19 - << Menu
          DB #FF

HCut       DB 13,0
            DW 0
           DB #FF


    ; объект-флажок (switch)
; x, y, номер опции, состояние (#00/#FF)
; вызов при щелчке на кнопку после того, как уже
; перенастроился объект на новое положение
Fcut     DB  8,6,2,#00       ; size
.sz  EQU $-1
          DW CrCut.col1_
         DB  8,8,3,#FF       ; pixels
.px  EQU $-1
          DW CrCut.col1_
         DB  8,10,4,#00      ; mask
.ms  EQU $-1
          DW CrCut.col1_
         DB  8,12,5,#00      ; attributes
.atr EQU $-1
          DW CrCut.col1_
         DB  17,12,13,#00      ; transparent attributes
.tran  EQU $-1
          DW CrCut.col1_
         DB  26,12,14,#FF      ; transparent for not pixels
.tnpix EQU $-1
          DW CrCut.col1_
         DB  26,13,17,#00      ; transparent attribute
.tatr  EQU $-1
          DW CrCut.col1_
         DB  26,14,18,#00      ; mask attributes
.ams   EQU $-1
          DW CrCut.col1_

         DB #FF




CrCut
.col1_   ld a,(TranMsk)
         inc a
        jr nz,1F
         ld (Fcut.ams),a
1
         ld de,#0A06       ; d=x, e=y
         ld bc,#1109       ; c= sy , b=sx
         ld a,5*8          ; color
         call SetV         ; SetV  in: d-x , e-y , c - sy , b - sx , a - color

         inc d
         ld bc,#0201
         ld a,5*8+1
         call SetV
         ld d,14
       ;  dec c
         call SetV
         ld d,20
        ; inc c
         call SetV
       ;  dec c
         ld d,23
         call SetV

         ld l,5*8+3         ;color
         ld a,(Fcut.tran)
         or a
        jr nz,1F
         ld de,#130C
         ld bc,#0803
         ld a,l
         call SetV
1        ld bc,#1101
         ld de,#0A06
         ld a,(Fcut.sz)
         or a
        jr nz,1F
         ld a,l         ; color
         call SetV
1        ld a,(Fcut.ms)
         or a
        jr nz,1F
         ld e,#0A
         ld a,l
         call SetV
1        ld a,(Fcut.atr)
         or a
        jr nz,1F
         ld e,#0C
         ld c,3
         ld a,l
         call SetV
1







         ret


WselOp  DB 5,8,14,5,7*8,7*8,%1110
        DB 0
.Top    DW Tmask       ; объект-текст (text object)
        DW SselOp      ; объект-подсветка (выборка) (highlighting object)
        DW #FFFF


SselOp  ;  DB 1,1,12,1,%11   ; 0  - Вначале спрайт или др
        ;  DB 1,2,12,1,%11   ; 1  - Вначале маска  или др
        ;  DB 1,3,12,1,%11   ; 2  - Маска из 2-го экрана  или др
          DB 1,1,12,128+3,%11
          DB #FF

Omask    DB 0     ; опция маски
Tmask
        DB #0A : DW MMend
        DB #0A : DW MMstart
        DB #0A : DW M2M
        DB 0

Oselcut   DB 0    ; опция источника вырезки
Tselcut
          DB #0A : DW MCutFrScr
          DB #0A : DW MCutFrScr2
          DB #0A : DW MCutFrFlScr
         DB 0

         ; Описания
MCutFrScr      MSG_CutFrScr   : DB 0   ; вырезать: из экрана
MCutFrScr2     MSG_CutFrScr2  : DB 0   ; вырезать: из теневого экрана
MCutFrFlScr    MSG_CutFrFlScr : DB 0   ; вырезать: из файла экрана
MMend          MSG_Mend       : DB 0   ; сперва спрайт
MMstart        MSG_Mstart     : DB 0   ; сперва маска
M2M            MSG_2M         : DB 0   ; маска из теневого экрана


WMskCode   DB 2,3,11,8,7*8,7,%1110
; Bit 0 - окно с заголовком/без (window with title)
; Bit 1 - "перерисовать" окно да/нет (redraw window)
; Bit 2 - тискать окно по экрану да/нет (movable window)
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL by clicking outside the window)
    DB 0          ; запасной байт-флаг (reserved for flags)
    DW TMskC      ; объект-текст (text object)
    DW SMskC      ; объект-подсветка (выборка) (highlighting object)
    DW Nil        ; горячие клавиши (hotkeys)
    DW Nil        ; объект-кнопки (выборка) (buttons object)
    DW FMskC      ; объект-флажки (flags object)
    DW #FFFF

TMskC      MSG_Msk_ : DB 13,22,7,1,"#",13,22,8,1
.tcMask    DB "FF",13
.Itxt      DB 22,1,3            ; используется в следующем меню
           MSG_Ink_ : DB 13
           MSG_Paper_ : DB 13
           MSG_Brg_   : DB 13
           MSG_Flash_
          DB 0

SMskC      DB 1,1,9,1,%11     ; 0 msk
        ;   DB 1,3,9,1,%11     ; 1 ink
        ;   DB 1,4,9,1,%11     ; 2 paper
        ;   DB 1,5,9,1,%11     ; 3 bright
        ;   DB 1,6,9,1,%11     ; 4 flash
           DB 1,3,9,128+4,%11
           DB #FF

    ; объект-флажок (switch)
; x, y, номер опции, состояние (#00/#FF)
; вызов при щелчке на кнопку после того, как уже
; перенастроился объект на новое положение
FMskC    DB 9,3,1,#FF
         DW MaskCode.flg0
         DB 9,4,2,#FF
         DW MaskCode.flg1
         DB 9,5,3,#FF
         DW MaskCode.flg2
         DB 9,6,4,#FF
         DW MaskCode.flg3
         DB #FF

WAtrCode   DB 2,3,14,8,7*8,7,%1110
; Bit 0 - окно с заголовком/без (window with title)
; Bit 1 - "перерисовать" окно да/нет (redraw window)
; Bit 2 - тискать окно по экрану да/нет (movable window)
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL by clicking outside the window)
    DB 0          ; запасной байт-флаг (reserved for flags)
    DW TAtrC      ; объект-текст (text object)
    DW SAtrC      ; объект-подсветка (выборка) (highlighting object)
    DW HAtrC      ; горячие клавиши (hotkeys)
    DW Nil        ; объект-кнопки (выборка) (buttons object)
    DW FAtrC      ; объект-флажки (flags object)
    DW 2 ; Nil        ; объект-радио кнопки (radio buttons object)
   ; DW Nil        ; ползунок (scrollbar)
    DW CrAtrC     ; вызов при создании (call on create)
    DW 2 ; Nil        ; вызов на "прерываниях" (call "on interrupt")
  ;  DW Nil        ;   Вызов на прерываниях после прорисовки стрелки
    DW .watrSprs  ;   объект спрайты (sprites object)
    DW #FFFF

.watrSprs
         DB 64+32+8,128+64+11,128+3,1,1,5*8,%01
          DW SprMinus
         DB 12,3
          DW SprPlus
         DB 7,3
          DW SpriX
         DB 11,4
          DW SprMinus
         DB 12,4
          DW SprPlus
         DB 7,4
          DW SpriY
         DB 12,1
          DW ColView
         DB 10,3
          DW InkView

         DB #FF


TAtrC       MSG_Atr_ : DB 13,22,8,1,"#",13,22,9,1
.tcAtr      DB "00",13
            DB #0A : DW TMskC.Itxt  ; из предыдущего меню
            DB 22,9,3
.tcAink     DB "0",13
.tcApaper   DB "0",13
           DB 0

SAtrC      DB 1,1,6,1,%11      ; 0 attr
           DB 8,1,3,1,%11      ; 1 edit attr
           DB 1,5,9,128+2,%11     ; 2 bright, 3 flash
           DB 11,3,1,1,%11     ; 4 ink-
           DB 12,3,1,1,%11     ; 5 ink+
           DB 11,4,1,1,%11     ; 6 paper-
           DB 12,4,1,1,%11     ; 7 paper+
          DB #FF

HAtrC      DB CS,"5"
            DW 4
           DB CS,"8"
            DW 5
           DB CS,"6"
            DW 6
           DB CS,"7"
            DW 7
           DB "B",0
            DW 2
           DB "F",0
            DW 3
           DB "1",0
            DW 4
           DB "2",0
            DW 5
           DB "3",0
            DW 6
           DB "4",0
            DW 7
           DB #FF


; объект-флажок (switch)
; x, y, номер опции, состояние (#00/#FF)
; вызов при щелчке на кнопку после того, как уже
; перенастроился объект на новое положение
FAtrC    DB 9,5,2,#00
         DW AtrCode.FAtrCbr
         DB 9,6,3,#00
         DW AtrCode.FAtrCfl
        DB #FF

CrAtrC
TranAttr  EQU $+1 : ld a,#2A
          ld l,a
          ld bc,#0101
          ld de,12*256+1
          call SetV
          and 7
          ld d,a
          ld a,(WAtrCode+4)
          ld h,a
          and #F8
          or d
          ld de,10*256+3
          call SetV
          inc e
          ld a,h
          and #C7
          ld h,a
          ld a,l
          and #38
          or h
         jp SetV





