; Old version - not used !
; выбор, загрузка, запись и редактирование текстур   ; /DA
TexturePgn
        DISP PgnAdr

BTexture
           ld ix,.WTexture
.atMSK     ld (.btix),ix        ; enter used in PMask , используется для PMask
           call POPUP
           ld (.spp),sp
.rn        ld a,%1111
.n0        ld ix,#0000
.btix    EQU $-2
           ld (ix+6),a
           xor a
           ld (.FlTxtr+3),a
           ld (Texture.fsolid),a
           ld hl,#0101
           ld (.EdTSize),hl
           call Win_
           or a
          jr z, .solid
           dec a
          jr z, .TXTR8
           dec a
          jr z, .TXTR16

           ld a,1                 ; a = 1 - texture not select
.exit      ld (Texture.fselect),a  ; 0 - выбрана, 1 - не выбрана
           call CLOSE
           ld sp,0
.spp     EQU $-2
          ret
.cancel     call CLOSE
            ld a,%1101
           jr .n0
.solid      ld hl,TBUFF
            ld b,32
            ld a,#FF
1           ld (hl),a
            inc hl
           djnz 1B
.exit_       ld (Texture.fsolid),a  ; #FF - solid, #00 - texture
             xor a
            jr .exit

.TXTR8       ld a,9
             ld hl,#0F0F
             ld c,#01
             call .Tini
             ld ix,.WTxtr8
            jr .txtr_
.TXTR16      ld a,17
             ld hl, #170D
             ld c,#02
             call .Tini
             ld ix,.WTxtr16
.txtr_
             ld (.aix),ix
             call POPUP
.rnx         ld a,%1110
.nx0         ld ix,#0000
.aix     EQU $-2
             ld (ix+6),a
             call Win_
             cp #FF
            jr z,.cancel
             or a
            jr z,.load
             cp 1
            jr z,.save
             cp 250
             call nc,.TScolor
.next        ld a,%1100
            jr .nx0

.load       call .adrset
            push de,bc
            call FilerE
            pop bc,hl
           jr c,.next
            ld c,#05
            ld de,(START_SEC)
            call DOS_FUNC_
           jr c,.next
            ld de,.ToName
            call ToName
           jr .next


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

.adrset     ld a,(.heTxtr)      ; определяем тип текстуры по горизонтальной линии в окне. :-)
            ld de,.Texture8     ; выход de - адрес набора, bc - длина, hl - таблица сортировки
            ld bc,#0100
            ld hl,.sort8
            cp 15
            ret z
            ld de,.Texture16
            ld b,4
            ld hl,.sort16
            ret


.sort8    DB #00,#01,#FF
.sort16   DB #00,#04,#FF


.Tini        ld (.EDxyTxtr),a
             ld (.EDxyTxtr_),a
             ld a,l
             ld (.heTxtr),a
             ld a,h
             ld (.FlTxtr),a
             ld l,c
             ld h,c
             ld (.EdTSize),hl
             ret

.T16Cr       ld hl,#0202
             call .tcr816
             push ix
             ld ix,.tpos
             ld de,.Texture16
             ld a,4
1            ex af,af'
             ld b,8
2            push bc
             push hl
             ld (.tpos),hl
             call LoadWS
             push de
             ld de,.TXTRcolbf
             call LoadWA
             pop de
             pop hl
             inc l
             inc l
             inc l
             pop bc
            djnz 2B
             ld l,c
             inc h
             inc h
             inc h
             ex af,af'
             dec a
            jr nz,1B
             pop ix
             ret

.T8Cr       ld hl,#0101
            call .tcr816
            push ix
            ld ix,.tpos
1           ld b,8
2           push bc
            push hl
            ld (.tpos),hl
            push af
            call .bfSPRa
            ld de,TBUFF
            call LoadWS
            ld de,.TXTRcolbf
            call LoadWA
            pop af
            inc a
            pop hl
            inc l
            inc l
            pop bc
           djnz 2B
            ld l,c
            inc h
            inc h
            cp 48
           jr c,1B
            pop ix
            ret

.tcr816     ld (.tpos+2),hl       ; устанавливает размер спрайта и выдаёт в HL начальные координаты вывода.
            ld de,#0101
            call RealWin
            ld l,d
            ld h,e
            ld (.realxy),hl
            ld c,l
            xor a
            ret

.bfSPR    ld a,(.SelTXTR)
.bfSPRa   ld de,TBUFF                 ; получаем спрайт 8x8 в буфере
          ld b,0
          ld c,a
          cp 16
         jr nc,.bfSPRe
          ld h,b
          ld l,b
          ld (.EdAdr),hl        ; 0 - если чанковые текстуры
          ld hl,CTB+(4*15)      ; берём чанки но со стороны наибольшей яркости
          or a
         jr z,2F
          dec a
         jr nz,1F
          ld hl,.tch1_          ; пропущенный в чанках блок с 1-й пустой точкой
         jr 2F
1         add a,a
          add a,a
          ld c,a
          or a
          sbc hl,bc
2         ld c,2
1         push hl
          ld b,4
2         ld a,(hl)
          inc hl
          ld (de),a
          inc de
         djnz 2B
          pop hl
          dec c
         jr nz,1B
          ret
.bfSPRe   sub 16
          add a,a
          add a,a
          add a,a
          ld c,a
          ld hl,.Texture8
          add hl,bc
          ld (.EdAdr),hl
          ld b,8
1         ld a,(hl)
          inc hl
          ld (de),a
          inc de
         djnz 1B
          ret
.tch1_       DB #FF,#FF,#FF,#DD      ; пропущенный в чанках блок с 1-й пустой точкой

.TScolor      cp 251
              ld a,7
             jr z,.tcolsv
              ld a,(REALRGB)
              ld c,a
              ld a,(MASKRGB)
              ld b,a
              push bc
              ld a,#FF
              ld (MASKRGB),a
              call ReMixM
              call PRGB2
              ld a,(MASKRGB)
              cp #FF
              ld a,(REALRGB)
              call nz,.tcolsv
              pop bc
              ld a,b
              ld (MASKRGB),a
              ld a,c
              ld (REALRGB),a
             call ReMixM
            jp ReDrawC
.tcolsv       ld hl,.TXTRcolbf
              ld (hl),a
              inc hl
              ld (hl),a
              inc hl
              ld (hl),a
              inc hl
              ld (hl),a
              ret


.T8Int         ; обработка прерываний для 8x8
               ld a,(DIRECT)
               bit 4,a
              ret z
               ld de,#00
.realxy    EQU $-2
               ld hl,(ARW_XC)
               ld a,h
               sub d
              ret c
               cp 11
              ret nc
               or a
               rra
              ret c
               add a,a
               add a,a
               add a,a
               ld d,a
               ld a,l
               sub e
              ret c
               cp 15
              ret nc
               or a
               rra
              ret c
               add a,d
               ld d,a         ; номер выбранной текстуры.
               push de
               ld a,STOP_ARW
               call GUI_
               pop de
               ld a,d
               call .bfSPRa
               call .x816

               ld a,(.FlTxtr+3)
               or a
              jr nz,.Tedit
               call CLOSE
               xor a
              jp .exit_

.x816          ld de,TBUFF+31   ; получаем спрайт 16x16 из 8x8
               call .x816_
.x816_         ld hl,TBUFF+7
               ld b,8
1              ld a,(hl)
               dec hl
               ld (de),a
               dec de
               ld (de),a
               dec de
              djnz 1B
              ret

.T16Int         ; обработка прерываний для 16x16
               ld a,(DIRECT)
               bit 4,a
              ret z
               ld de,(.realxy)
               ld hl,(ARW_XC)
               ld a,h
               sub d
              ret c
               cp 11
              ret nc
               call .div3
              ret z
               add a,a
               add a,a
               add a,a
               ld d,a
               ld a,l
               sub e
              ret c
               cp 23
              ret nc
               call .div3
              ret z
               add a,d
               ld l,a         ; номер выбранной текстуры.
               ld h,0
               push hl
               ld a,STOP_ARW
               call GUI_
               pop hl
               add hl,hl
               add hl,hl
               add hl,hl
               add hl,hl
               add hl,hl   ; *32
               ld de,.Texture16
               add hl,de     ; адрес выбранной текстуры
               ld (.EdAdr),hl
               ld a,(.FlTxtr+3)
               or a
              jr nz,.Tedit
               ld de,TBUFF
               ld bc,32
               ldir
               call CLOSE
               xor a
              jp .exit_

.Tedit       ld hl,(.EdAdr)
               ld a,h
               or l
              jp z,.next
               push ix
.edt0          ld hl,.WTxtrED
               call SPEdit
               cp 4
              jr c,1F
               call CLOSE
               pop ix
              jp  .next

1              ld hl,(.EdAdr)
               ld c,a
               ld a,(.EdTSize)
               ld b,8
               dec a
              jr z,1F
               ld b,32
1              inc c
               dec c
              jr z,.clean
               dec c
              jr z,.invert

               push ix
               push bc
               call SWAP_SCR
               ld hl,(ARW_XC)
               ld (.EdPut),hl
               ld hl,(.EdTSize)
               ld (.EdPut+2),hl
               ld ix,.EdPut
               xor a
               call Ramka8
              jr nc,1F
               pop bc
              jr .Enext_
1              ld de,(.EdPut)
               call RASCH_
               ld a,h
               or #C0
               ld h,a
               ld de,(.EdAdr)
               pop bc
               dec c
              jr z,.take
               dec c
              jr z,.put

.Enext_        call SWAP_SCR
                pop ix
.Enext         ld a,%1101
               ld (ix+6),a
              jp .edt0

.clean         xor a
1              ld (hl),a
               inc hl
              djnz 1B
              jr .Enext
.invert
1              ld a,(hl)
               cpl
               ld (hl),a
               inc hl
              djnz 1B
              jr .Enext
.take          call SaveWS
              jr .Enext_
.put           call LoadWS
              jr .Enext_




.div3        ld c,0
1             sub 3
             jr c,2F
              inc c
             jr 1B
2             add a,3
              cp 2
              ld a,c
              ret



.tpos        DB 1,1,1,1  ; параметры для печати спрайтов.
.TXTRcolbf   DB 7,7,7,7 ;  цвета для печати спрайта
.tcolb       DB 0,0     ; буфер сохранения цветов

.ToName      DB "noname  txr"

.WTexture    DB 0,0,9,6,5*8,5,%1111
; Bit 0 - окно с заголовком/без
; Bit 1 - "перерисовать" окно да/нет
; Bit 2 - тискать окно по экрану да/нет
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL)
             DB 0
             DW .TTexture
             DW .STexture
             DW #FFFF

.TTexture    MSG_TXTR_head : DB 13
             MSG_TXTR_solid : DB 13
             DB "8*8   16*16"
             DB 0

.STexture    DB 1,3,7,1,%11
             DB 1,4,3,1,%11
             DB 4,4,4,1,%11
             DB #FF

.WTxtr8      DB 0,0,17,16,5*8,5,%1110
             DB 0
             DW .TTxtr
             DW .STxtr
             DW .HTxtr             ; горячие клавиши
             DW Nil                ; объект-кнопки (выборка)
             DW .FlTxtr            ; объект-флажки
             DW Nil                ; объект-радио кнопки
             DW Nil                ; ползунок
             DW .T8Cr              ; вызов при создании
             DW .T8Int             ; вызов на "прерываниях"
             DW #FFFF


.WTxtr16     DB 0,0,25,16,5*8,5,%1110
             DB 0
             DW .TTxtr+1
             DW .STxtr
             DW .HTxtr             ; горячие клавиши
             DW Nil                ; объект-кнопки (выборка)
             DW .FlTxtr            ; объект-флажки
             DW Nil                ; объект-радио кнопки
             DW Nil                ; ползунок
             DW .T16Cr             ; вызов при создании
             DW .T16Int            ; вызов на "прерываниях"
             DW #FFFF

.HTxtr       DB "C",0
             DW  250                ; rgb
             DB "X",0
             DW  251                ; стандартные rgb
             DB #FF

.TTxtr       DB 13,13,13
.heTxtr      DB 15             ; или 15 - полоса для 8x8 или " " для 16x16
             DB 13,13,13,13,13,13,13,13,15,13
             MSG_DISK_Load : DB 13
             MSG_DISK_Save : DB 13,22
.EDxyTxtr    DB 9,13           ; x опции Edit
             MSG_TXTR_edit : DB 0

.STxtr       DB 1,13,7,1,%11   ; load
             DB 1,14,7,1,%11   ; save
.EDxyTxtr_   DB 9,13,7,1,%11   ; edit
             DB #FF

.FlTxtr      DB 15,13,2,#00
             DW Nil
             DB #FF
.WTxtrED  DB 0,0  ; X,Y окна (X,Y of window)
          DB 16      ; ширина (width)
          DB 12      ; высота (height)
.EdAdr    DW 0        ; адрес редактирования спрайта текстуры
          DW #0703    ; X,Y окна редактора (X,Y of editor window)
.EdTSize  DW #0101    ; размеры спрайта (sprite size)
          DW #0103    ; X,Y preview
          DW .EdText  ; текст (text)
          DW .EdSel   ; подсветка (highlighting)
          DW Nil      ; горячие клавиши (hotkeys)

.EdText   DB "Edit texture",13
          DB 22,1,6
          DB "Стереть",13
          DB "Инверт",13
          DB "Взять",13
          DB "На экран"
          DB 0

.EdSel    DB 1,6,5,1,%11
          DB 1,7,5,1,%11
          DB 1,8,5,1,%11
          DB 1,9,5,1,%11
          DB #FF

.EdPut    DB 10,10,1,1

.SelTXTR     DB 0   ;          номер выбранной текстуры

.Texture8    INCBIN "bgetxr.t8"   ; текстура 8x8  256 bytes

.Texture16   INCBIN "bgetxr.t16"  ; текстура 16x16  1024 bytes



LTexture   EQU $-BTexture
           ENT
           DISPLAY "Texture len   :",/a,LTexture
