; То что не используется, а выбросить жалко - вдруг пригодится. /DA


; ------------------------------------------

RETBACKG      ; восстановление фона из #C000 при открытых окнах  /DA
            push ix
            ld c,24   ;y
.l1         ld b,32   ;x

.l2
            ld de,STACK
            ld hl,(STACK_P)
            ex de,hl
.l3
            ld a,d
            xor h
           jr nz,1F
            ld a,e
            xor l
           jr z,.l5        ; окна закончились можно выводить


1           push bc
            ld c,(hl)
             inc hl
            ld b,(hl)
             push bc
             pop ix
             inc hl
             inc hl
             inc hl
            pop bc
            ld a,b   ; x
            dec a
            sub (ix+0)
           jr c,.l3
            cp (ix+2)
           jr nc,.l3
            ld a,c   ;y
            dec a
            sub (ix+1)
           jr c,.l3
            cp (ix+3)
           jr nc,.l3
             ; попали в окно не выводим
.l4         djnz .l2
             dec c
            jr nz,.l1
            pop ix
             ret

.l5         ; вывод блока по координатам (b,c)
            push hl,bc
             ld l,b
             ld h,c
             dec l
             dec h
             call ADRHL8
             ld b,8
1            set 7,h
             ld a,(hl)
             res 7,h
             ld (hl),a
             inc h
            djnz 1B
            pop bc,hl
            jr .l4
; --------------------------

; размывка взято из Fill1.asm

CONSTS  DEFW #1010

EWash_  CALL CLOSE
ewash_  CALL ewash2
        JP RES_TSK

ewash2  LD A,ScrPage
        CALL RAM
        LD HL,#C000+6912
        LD DE,#4000
        LD BC,6912
        LDIR
        LD A,RamPage
        CALL RAM
        LD DE,#4000
        LD HL,#C000
        LD BC,6144
C0      LD A,(DE)
        AND (HL)
        LD (DE),A
        INC HL
        INC DE
        DEC BC
        LD A,C
        OR B
        JR NZ,C0
        LD A,ScrPage
        CALL RAM
        LD HL,#C000
        LD DE,#4000
        LD BC,6144
c1      LD A,(DE)
        OR (HL)
        LD (DE),A
        INC HL
        INC DE
        DEC BC
        LD A,C
        OR B
        JR NZ,c1
        CALL SAVESCR
        RET

EWash   CALL CLOSE_ALLW
wS      LD IX,WTFill
        CALL Win_
        CP #FF
        JP Z,RES_TSK2
        LD (TEXTNUMB),A
        CALL GETTEX

        CALL LOADSCR
        CALL LD_UNDO

        LD HL,#C000
        LD DE,#DB00
        LD BC,#C000
        CALL wss

        CALL SAVEOBJ
        JP Main

wss     PUSH BC
        PUSH DE
        LD B,12
a3      PUSH BC
        LD DE,(TXRADR)
        LD B,16
a2      PUSH HL
        PUSH BC
        LD B,16
a1_     LD A,(DE)
        AND (HL)
        LD (HL),A
        INC DE
        INC HL
        LD A,(DE)
        AND (HL)
        LD (HL),A
        INC HL
        DEC DE
        DJNZ a1_
        POP BC
        POP HL
        CALL INC_Y
        INC DE
        INC DE
        DJNZ a2
        POP BC
        DJNZ a3

        POP HL
;       LD HL,#C000
;       LD DE,#C000; 4000
        POP DE
        LD BC,6144
c5      LD A,(DE)
        OR (HL)
        LD (DE),A
        INC HL
        INC DE
        DEC BC
        LD A,C
        OR B
        JR NZ,c5
        RET





;---------------------------------------------------


PRN8s   ; печать символов 8x8 из системного фонта, требуется GUIpage
        ; in: DE - addr string ( byte 0 - end of string), HL - addr in screen
1       ld a,(de)
        inc de
        or a
       ret z
        call .ch
        inc l
       jr 1B
.ch     push hl   ; печать символа с кодом A по адресу в экране HL
        push de
        push bc
        ld d,FONT/256
        ld e,a
        ld b,8
2       ld a,(de)
;.mod    nop        ; режим: nop / xor (hl) / or (hl)
        ld (hl),a
        inc d
        inc h
       djnz 2B
        pop bc
        pop de
        pop hl
       ret



;---------------------------------------------------



.linze

                ld de,WinBoxSelect
                call WinMenu.MColSelB_

                ld hl,(BUFF)
                ld a,l
                or h
               jr z,.cbrexit


           ;     ld a,l
           ;     and #1F
           ;     cp 16
           ;     ld a,32-14
           ;    jr c,1F
           ;     xor a
                call MiniLoupe.a_winx
1               ld (.Wcutlinze),a


                ld a,128+%1010
.l0             ld ix,.Wcutlinze
                ld (ix+6),a
                call Win_
                push af
                call .resImig
                pop af
                or a
               jr z,.cbrexit
                cp 255
               jr nz,1F
                ld a,(DIRECT)
                and #10
               jr z,.cbrexit
                call WinClipping.outWinBoof_   ; перерисовка
               jr .linze

1               dec a
                dec a
                ld e,a
                and 7
                inc a
                ld b,a
                ld a,1
1               rrca
               djnz 1B
                ld c,a       ; маска бита
                ld a,e
                and #38
                rrca
                rrca
                rrca
                ld h,a
                ld a,(WinXU.csx)
                call MULS     ; hl = a*h
                ex de,hl

                ld hl,(BUFF+2)
                push hl
                add hl,de
                ld de,6912
                add hl,de
                ld a,c
                xor (hl)
                ld (hl),a
                exx
                pop hl
                ld bc,6912
                ld a,(WinXU.csx)
                ld e,a
                ld d,0
                exx
                 ld hl,(BUFF)
                 ld d,8
1                 call WinClipping.CNK_curbyte
                  ld b,a     ; байт чанка
                  exx
                  ld a,(hl)
                  ex af,af'    ; bt
                  push hl
                  add hl,bc
                  ld a,(hl)    ; ms
                  pop hl
                  exx
                  ld c,a     ; маска
                  and b
                  ld b,a
                  ex af,af'
                  or c
                  xor c
                  or b
                  ld (hl),a
                  inc h
                  exx
                  add hl,de
                  exx
                  dec d
                 jr nz,1B
                  ld a,128+%1000
                jp .l0



.Wcutlinze   DB 0,8,14,16,5*8,5,128+%1010
; 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
; Bit 5 -   0  пока не используется (not used)
; Bit 6 -   при Bit 2 = 1 не сохранять окно в свапинге при перерисовке (бит обнуляется после вызова окна),
;           при Bit 2 = 0 сохранять окно в свапинге при перерисовке ( v3.12 )
; Bit 7 -   (128+flags) Использовать адреса дополненительных функций. ( для совместимости с некоторыми старыми модулями)

           DB 5*8+3      ; атрибут неактивного цвета (non active color attribute)
           DW .Tmln       ; объект-текст (text object)
           DW .Smln       ; объект-подсветка (выборка) (highlighting object)
           DW Nil ;.Hln       ; горячие клавиши (hotkeys)
           DW 4          ; пропуск: кнопки , флажки , радио кнопки , ползунок
           DW .CrWln     ; вызов при создании (call on create)
           DW .Immln       ; вызов на прерывании
          DW #FFFF

.Tmln       DB 22,10,14,"Ok!>"
           DB 0

.Smln
           DB 9,14,4,1,%11       ; 0 - Fire
           DB 1,1,128+12,12,%10  ; таблица 12x12
           DB 1,1,1,1,144
          DB #FF





.CrWln
            xor a
            ld (.fImm_mig),a
            inc a
            ld (.fImm_cmg),a
            ld hl,(.Wcutlinze)   ; (xc,yc) - окна
          ;  ld a,14
          ;  call MiniLoupe.ramkaMLP   ; out de -адрес вывода бокса
             inc l
             inc h
             call ADRHL8
             ex de,hl
            call suxRAM
            call 1F
           jp guiRAM

1           ld a,2
            ld (.cr_lp_calc_),a
            exx
            ld hl,(BUFF+2)
            ld d,h
            ld e,l
            ld bc,6912
            add hl,bc      ; HL' - MaskAdr , DE' - WinAdr
            ld a,(WinXU.csx)
            ld c,a
            ld b,0         ; bc - ширина окна в байтах
            exx

            ld hl,(BUFF+8)   ; x,y
            ex de,hl
            ld (.outboxAdr_),hl         ; hl - адрес вывода бокса
            ld a,d
            or a
           jr z,1F
            exx            ; смещаем адрес из окна на 2 линии пикселей вверх
            or a
            sbc hl,bc
            or a
            sbc hl,bc
            ex de,hl
            or a
            sbc hl,bc
            or a
            sbc hl,bc
            ex de,hl
            exx
            push hl,bc
            ld hl,(BUFF+4)
            ld bc,#10000-32
            add hl,bc
            ld (.c_atrAscr_),hl
            pop bc,hl
            call .Cr_loop
           jr 2F
1             ; сверху пропуск
             call .cr_z2Hor_
2            push hl
             ld hl,(BUFF+4)
             ld (.c_atrAscr_),hl
             pop hl
             ld a,8
             ld (.cr_lp_calc_),a
             call .Cr_loop
             ld a,(WinXU.csy)
             dec a
             cp d
            jp z,.cr_z2Hor_   ; снизу пропуск
             push hl,bc
             ld hl,(BUFF+4)
             ld bc,32
             add hl,bc
             ld (.c_atrAscr_),hl
             pop bc,hl
             ld a,2
             ld (.cr_lp_calc_),a
             call .Cr_loop
.outboxAdr_ EQU $+1 : ld hl,#0000      ; выводим точки знакоместа

            jp MiniLoupe.outBordBX
;             push hl
;             inc l
;             inc l
;             ld de,8
;             ld b,12*4
;1            set 7,(hl)
;             add hl,de
;             set 7,(hl)
;             call INC_Y
;             res 7,(hl)
;             ld a,l
;             sub e
;             ld l,a
;             res 7,(hl)
;             call INC_Y
;            djnz 1B
;             pop hl
;             call INC_YY
;             call INC_YY
;             call .tochkline_
;             ld b,8
;1            call INC_YY
;            djnz 1B
;.tochkline_   ld b,12
;              push hl
;1             ld (hl),%10101010
;              inc l
;             djnz 1B
;              pop hl
;             ret


.Cr_loop
             push hl    ; линия
             ld a,e
             or a
            jr z,1F
             exx        ; смещаем адреса на байт влево
             dec hl
             dec de
             ld a,(de)
             rrca
             rrca
             ex af,af'
             ld a,(hl)
             rrca
             rrca
             inc de
             inc hl
             exx
             push hl
             ld hl,(.c_atrAscr_)
             dec l
             ld c,(hl)
             pop hl
             call .setout2P
            jr 2F
1            ; слева пропуск
             call .cr_zHor2_

2            ld a,(#5800)
.c_atrAscr_ EQU $-2
             ld c,a
             exx
             ld a,(de)
             ex af,af'
             ld a,(hl)
             exx

             call .setoutP

             ld a,(WinXU.csx)
             dec a
             cp e
            jr nz,3F
             ; справа пропуск
             call .cr_zHor2_
            jr 4F

3            exx
             inc de
             ld a,(de)
             dec de
             ex af,af'
             inc hl
             ld a,(hl)
             dec hl
             exx
             push hl
             ld hl,(.c_atrAscr_)
             inc l
             ld c,(hl)
             pop hl
             call .setout2P

4            exx
             ex de,hl
             add hl,bc
             ex de,hl
             add hl,bc
             exx
             pop hl
             call INC_YY

             ld a,10
.cr_lp_calc_  EQU $-1
             dec a
             ld (.cr_lp_calc_),a
            jr nz,.Cr_loop
           ret


.cr_z2Hor_    ld a,2

1             push af
              ld b,12
              push hl
              call .cr_zXHor_
              pop hl
              call INC_YY
              pop af
              dec a
             jr nz,1B
             ret

.cr_zHor2_    ld b,2
.cr_zXHor_    push de
              ld de,MiniLoupe.MsprNon   ; .bSprs
              ld c,03  ; цвет для запредельных
1             call .setout
              inc l
             djnz 1B
              pop de
             ret

.setout       push hl,de,bc
              ld b,8
1             ld a,(de)
              inc de
              ld (hl),a
              inc h
             djnz 1B
              dec h
              call ADRpixTOcol
              ld (hl),c
              pop bc,de,hl
             ret

.setout2P      ld b,2
              jr 1F

.setoutP       ld b,8  ; вывод пикселя  in a - mask , a' - pix
1              push de
1              ld de,MiniLoupe.Mspr0m   ; mask & zero
               rla
              jr nc,2F
               ex af,af'
               rla
              jr nc,3F
               ld de,MiniLoupe.Mspr1m   ; mask & pixel
              jr 3F
2              ld de,MiniLoupe.Mspr0    ; zero
               ex af,af'
               rla
              jr nc,3F
               ld de,MiniLoupe.Mspr1    ; pix
3              push af
               ex af,af'
               push af

               call .setout   ; c- color
               inc l

               pop af
               ex af,af'
               pop af
               ex af,af'
              djnz 1B
               pop de
              ret


.Immln          ; обработка прерывания
              ld a,0
.fImm_cmg  EQU $-1   ; счетчик
              dec a
              ld (.fImm_cmg),a
             ret nz

.Imm_mig      ld a,0
.fImm_mig  EQU $-1   ; флаг мигания
              cpl
              ld (.fImm_mig),a
              or a
              ld a,23
             jr z, 1F
              ld a,3
1             ld (.fImm_cmg),a

              ld hl,#0000
.Immadrout  EQU $-2
              ld a,#FF
              xor (hl)
              ld (hl),a
              inc h
              ld b,6
1              ld a,#81
               xor (hl)
               ld (hl),a
               inc h
             djnz 1B
              ld a,#FF
              xor (hl)
              ld (hl),a
             ret

.resImig      ld a,(.fImm_mig)     ; WWinCutLinse.resImig
              or a
             ret z
              jr .Imm_mig


;-----------------------------------------------------
