#ifndef COMPILE_H
#include "COMPILE.H"
#endif
#ifdef MEDIA772_SU1E
/* if UTBLTSHR.C is added as a standalone file in ANIMATE.FTL, it is not linked into the final executable because the function it contains is not referenced */
#include "BLIT.C"
#include "EXPAND.C"

#if ((EXETYPE == C05_ANIM) || (EXETYPE == C06_CEDT) || (EXETYPE == C07_HINT))
#include "BLTSHRNK.C"

void F0134_VIDEO_FillBitmap(register long* P5486_, register int16_t P5487_, register int16_t P5488_) {
        asm {
                        moveq   #0,d0
                        moveq   #0,d1
                        lsr.w   #1,d7
                        bcc.s   @Tloc_ADE
                        not.w   d0
                        swap    d0
                @Tloc_ADE:
                        lsr.w   #1,d7
                        bcc.s   @Tloc_AE4
                        not.w   d0
                @Tloc_AE4:
                        lsr.w   #1,d7
                        bcc.s   @Tloc_AEC
                        not.w   d1
                        swap    d1
                @Tloc_AEC:
                        lsr.w   #1,d7
                        bcc.s   @Tloc_AF2
                        not.w   d1
                @Tloc_AF2:
                        move.l  d0,(a4)+
                        move.l  d1,(a4)+
                        subq.w  #1,d6
                        bne.s   @Tloc_AF2
        }
}

void F0135_VIDEO_FillBox(P0221_puc_Bitmap, P0222_pi_Box, P0223_i_Color, P0224_i_ByteWidth)
unsigned char* P0221_puc_Bitmap;
int16_t* P0222_pi_Box;
int16_t P0223_i_Color; /* If bit 15 is set then only every other pixel is overwritten */
int16_t P0224_i_ByteWidth;
{
        asm {
                        movem.l d4-d7,-(sp)
                        movea.l P0222_pi_Box(a6),a0
                        tst.w   G0578_B_UseByteBoxCoordinates(a5)
                        beq.s   @Tloc_B26
                        moveq   #0,d0
                        moveq   #0,d1
                        moveq   #0,d2
                        moveq   #0,d3
                        move.b  (a0)+,d0
                        move.b  (a0)+,d1
                        move.b  (a0)+,d2
                        move.b  (a0),d3
                        bra.s   @Tloc_B2E
                @Tloc_B26:
                        move.w  (a0)+,d0
                        move.w  (a0)+,d1
                        move.w  (a0)+,d2
                        move.w  (a0),d3
                @Tloc_B2E:
                        swap    d0
                        move.w  d2,d0
                        swap    d0
                        movea.l P0221_puc_Bitmap(a6),a1
                        sub.w   d2,d3
                        swap    d3
                        mulu.w  P0224_i_ByteWidth(a6),d2
                        adda.w  d2,a1
                        lea     @Tword_CD6,a0
                        moveq   #0xF,d6
                        and.w   d0,d6
                        add.w   d6,d6
                        move.w  (a0,d6.w),d6
                        lsr.w   #4,d0
                        moveq   #0xF,d4
                        and.w   d1,d4
                        addq.w  #1,d4
                        add.w   d4,d4
                        move.w  (a0,d4.w),d4
                        not.w   d4
                        lsr.w   #4,d1
                        move.w  d0,d2
                        lsl.w   #3,d2
                        adda.w  d2,a1
                        sub.w   d0,d1
                        move.w  d1,d3
                        bne.s   @Tloc_B70
                        or.w    d4,d6
                @Tloc_B70:
                        subq.w  #1,d3
                        swap    d3
                        addq.w  #1,d1
                        lsl.w   #3,d1
                        move.w  P0224_i_ByteWidth(a6),d7
                        sub.w   d1,d7
                        move.w  d4,d5
                        not.w   d5
                        move.w  d6,d1
                        not.w   d1
                        swap    d7
                        clr.w   d7
                        btst    #0xF,P0223_i_Color(a6)
                        beq.s   @Tloc_BA0
                        swap    d0
                        move.w  #0x5555,d7
                        btst    #0,d0
                        bne.s   @Tloc_BA0
                        add.w   d7,d7
                @Tloc_BA0:
                        moveq   #0xF,d0
                        and.w   P0223_i_Color(a6),d0
                        add.w   d0,d0
                        move.w  d0,d2
                        add.w   d0,d0
                        add.w   d2,d0
                        jmp     @Tloc_BB2(pc,d0.w)
                @Tloc_BB2:
                        lea     @Tlocret_C9C,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_C9A,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CA6,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_C96,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CBC,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CCE,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CA2,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_C92,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CB2,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CB0,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CC4,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CC2,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CB8,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_CAC,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_C9E,a0
                        bra.s   @Tloc_C10
                        lea     @Tloc_C8E,a0
                @Tloc_C10:
                        swap    d3
                        move.w  d3,d2
                        swap    d3
                        move.w  d6,d0
                        or.w    d7,d0
                        and.w   d0,(a1)
                        and.w   d0,2(a1)
                        and.w   d0,4(a1)
                        and.w   d0,6(a1)
                        not.w   d7
                        move.w  d1,d0
                        and.w   d7,d0
                        not.w   d7
                        jsr     (a0)
                        addq.l  #8,a1
                        tst.w   d2
                        bmi.s   @Tloc_C76
                        dbf     d2,@Tloc_C3E
                        bra.s   @Tloc_C58
                @Tloc_C3E:
                        move.w  d7,d0
                        not.w   d0
                @Tloc_C42:
                        and.w   d7,(a1)
                        and.w   d7,2(a1)
                        and.w   d7,4(a1)
                        and.w   d7,6(a1)
                        jsr     (a0)
                        addq.l  #8,a1
                        dbf     d2,@Tloc_C42
                @Tloc_C58:
                        move.w  d4,d0
                        or.w    d7,d0
                        and.w   d0,(a1)
                        and.w   d0,2(a1)
                        and.w   d0,4(a1)
                        and.w   d0,6(a1)
                        not.w   d7
                        move.w  d5,d0
                        and.w   d7,d0
                        not.w   d7
                        jsr     (a0)
                        addq.l  #8,a1
                @Tloc_C76:
                        swap    d7
                        adda.w  d7,a1
                        swap    d7
                        tst.w   d7
                        beq.s   @Tloc_C82
                        not.w   d7
                @Tloc_C82:
                        dbf     d3,@Tloc_C10
                        movem.l (sp)+,d4-d7
                        bra.w   @Tloc_CF8
                @Tloc_C8E:
                        or.w    d0,6(a1)
                @Tloc_C92:
                        or.w    d0,4(a1)
                @Tloc_C96:
                        or.w    d0,2(a1)
                @Tloc_C9A:
                        or.w    d0,(a1)
                @Tlocret_C9C:
                        rts
                @Tloc_C9E:
                        or.w    d0,6(a1)
                @Tloc_CA2:
                        or.w    d0,4(a1)
                @Tloc_CA6:
                        or.w    d0,2(a1)
                        rts
                @Tloc_CAC:
                        or.w    d0,4(a1)
                @Tloc_CB0:
                        or.w    d0,(a1)
                @Tloc_CB2:
                        or.w    d0,6(a1)
                        rts
                @Tloc_CB8:
                        or.w    d0,6(a1)
                @Tloc_CBC:
                        or.w    d0,4(a1)
                        rts
                @Tloc_CC2:
                        or.w    d0,(a1)
                @Tloc_CC4:
                        or.w    d0,6(a1)
                        or.w    d0,2(a1)
                        rts
                @Tloc_CCE:
                        or.w    d0,4(a1)
                        or.w    d0,(a1)
                        rts
                @Tword_CD6:
                        dc.w 0
                        dc.w 0x8000
                        dc.w 0xC000
                        dc.w 0xE000
                        dc.w 0xF000
                        dc.w 0xF800
                        dc.w 0xFC00
                        dc.w 0xFE00
                        dc.w 0xFF00
                        dc.w 0xFF80
                        dc.w 0xFFC0
                        dc.w 0xFFE0
                        dc.w 0xFFF0
                        dc.w 0xFFF8
                        dc.w 0xFFFC
                        dc.w 0xFFFE
                        dc.w 0xFFFF
                @Tloc_CF8:
        }
}

void F0136_VIDEO_HatchScreenBox(P0225_pi_Box, P0226_Color)
int16_t* P0225_pi_Box;
int16_t P0226_Color;
{
        F0135_VIDEO_FillBox(G0348_Bitmap_Screen, P0225_pi_Box, P0226_Color | MASK0x8000_HATCH, C160_BYTE_WIDTH_SCREEN); /* Hatching will be used: only every other pixel will be written */
}

void F1756_HatchBox_Unreferenced(unsigned char* P5489_puc_Bitmap, int16_t* P5490_pi_Box, int16_t P5491_i_Color, int16_t P5492_i_Width) {
        F0135_VIDEO_FillBox(P5489_puc_Bitmap, P5490_pi_Box, P5491_i_Color | MASK0x8000_HATCH, P5492_i_Width); /* Hatching will be used: only every other pixel will be written */
}
#endif
#endif
