



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

WinLoupeSt   call WinLoupe

          ; ld a,ARW_DEFAULT
          ; call GUI
           call ARW_DEFAULT_
           xor a
          ret


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



                ld hl,#0101
.linze          ld (ARW_XC),hl
.linze_         ld de,WinBoxSet_
                call .MColSelB_     ;WinMenu.MColSelB_

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

                ld (WWinCutLinse.Immadrout),hl

                call MiniLoupe.a_winx
                ld (WWinCutLinse),a


                ld a,128+%1010
.l0             ld ix,WWinCutLinse
                ld (ix+6),a
                call Win_
                push af
                call WWinCutLinse.resImig
                pop af
                inc a
               jr nz,.r2  ; 255

                ld a,(DIRECT)  ; если #FF
                and #10
               jr z,.cbrexit
.r0             ld hl,(BUFF+10)
                ld de,WinBoxSet_
                push hl
                call .MColSelB_
                ld hl,(BUFF)
                ld a,h
                or l
                pop hl
            ;    ld de,WinBoxSet
               jr z,.linze
                ld hl,(BUFF+10)
                call MiniLoupe.a_winx
                ld c,a
                ld a,(WWinCutLinse)
                cp c
               jr z,.linze
.r1             push hl
                call WinFunc : DB 0  ; перерисовка
                pop hl
               jr .linze

.cbrexit        jp ARW_DEFAULT_

.r2             ld de,WinBoxSelect
                dec a
               jr z,.cbrexit  ; 1 Ok!>
                dec a

                ld b,#FF
1               inc b
                sub 12
               jr nc,1B
                add a,12
                ld c,a       ; c

                ld hl,(BUFF+10)
               push hl
                ld de,#0208
                ld a,c
                sub d
               jr nc,1F
                dec l
                add a,e
1               cp e
               jr c,1F
                inc l
                sub e
1               ld c,a

                ld a,b
                sub d
               jr nc,1F
                dec h
                add a,e
1               cp e
               jr c,1F
                inc h
                sub e
1               ld b,a

               pop de

                ld a,h
                xor d
               jr nz,1F
                ld a,l
                xor e
               jr z,2F

1               ld a,l
                cp 32
               jr c,1F
                ld l,e
1               ld a,h
                cp 24
               jr c,1F
                ld h,d
1               ld (ARW_XC),hl
               jp .r0


2               ld h,b
                ld a,(WinXU.csx)
                call MULS     ; hl = a*h
                ex de,hl

                ld b,c
                inc b
                ld a,1
1               rrca
               djnz 1B
                ld c,a       ; маска бита

                ld hl,(BUFF+2)
                push hl
                add hl,de
                ld de,6912
                add hl,de
                ld a,c
                xor (hl)
                ld (hl),a
                call wmbooframka
                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 wnCNK_curbyte  ;.CNK_curbyte   ;  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



.MColSelB_      ld bc,Boxes_PG*256+Box_Num ; BoxPgn module
               jp CALLSWPhl  ; Вход DE - адрес подпрограммы, HL - параметр, B - страница, C - номер модуля




;WinXU               ; позиции текущего сохранённого окна
;                    ; используется при копировании, переводе x8<->x1 и в Изменить.
;.x        DB 0  ;+0   - позиция в знакоместах по x
;.y        DB 0  ;+1   - позиция в знакоместах по y
;.csx      DB 0  ;+2   - размер в знакоместах по x
;.csy      DB 0  ;+3   - размер в знакоместах по y
;.dx       DB 0  ;+4   - смещение начала пикселей по х
;.dy       DB 0  ;+5   - смещение начала пикселей по y
;.px       DB 0  ;+6   - позиция в пикселях по x
;.py       DB 0  ;+7   - позиция в пикселях по y
;.dsx      DB 0  ;+8   - размер в пикселях по x
;.dsy      DB 0  ;+9   - размер в пикселях по y







WWinCutLinse   DB 0,8,14,15,5*8,5,128+%1010                                           ; для линзы
               DB 5*8+3      ; атрибут неактивного цвета (non active color attribute)

               DW .Te        ; объект-текст (text object)
               DW .Sl   ; объект-подсветка (выборка) (highlighting object)
               DW Nil ;.Hl              ; горячие клавиши (hotkeys)
               DW 4          ; пропуск: кнопки , флажки , радио кнопки , ползунок
               DW .CrWl      ; вызов при создании (call on create)
               DW .Imm       ; вызов на прерывании
              DW #FFFF


.Te         DB 22,10,13,"Ok!>"   ; WWinCutLinse.Te
           DB 0


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


.CrWl       xor a
            ld (.fImm_mig),a
            inc a
            ld (.fImm_cmg),a
            ld hl,(WWinCutLinse)   ; (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
            jr nz,3F
             call .cr_z2Hor_   ; снизу пропуск
            jr 4F
3            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
4
.outboxAdr_ EQU $+1 : ld hl,#0000      ; выводим точки знакоместа
             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.bSprsOut
              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.bSprsMzer   ; .bSprs+8   ; mask & zero
               rla
              jr nc,2F
               ex af,af'
               rla
              jr nc,3F
               ld de,MiniLoupe.bSprsMpix  ;.bSprs+24  ; mask & pixel
              jr 3F
2              ld de,MiniLoupe.Mspr0   ;.bSprs+16  ; zero
               ex af,af'
               rla
              jr nc,3F
               ld de,MiniLoupe.Mspr1    ;.bSprs+32  ; 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


.Imm          ; обработка прерывания
              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
              call 2F
              inc h
              ld b,6
1              ld a,#81
               xor (hl)
               ld (hl),a
               inc h
             djnz 1B
2             ld a,#FF
              xor (hl)
              ld (hl),a
             ret

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




;--------------------------------------------------------
LENwinLoupe EQU $-PgnAdr

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