/* Copyright (C) 2015-2018 Night Dive Studios, LLC. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* * $Source: n:/project/lib/src/2d/RCS/genfl8c.c $ * $Revision: 1.1 $ * $Author: kevin $ * $Date: 1994/03/15 13:15:15 $ * * Generic flat8 clut bitmap routines. * * $Log: genfl8c.c $ * Revision 1.1 1994/03/15 13:15:15 kevin * Initial revision * */ #include "scrdat.h" #include "bitmap.h" #include "clpcon.h" #include "cnvdat.h" #include "grcbm.h" #include "grpix.h" /* bozo flat8 bitmap drawer. */ void gen_flat8_clut_ubitmap (grs_bitmap *bm, short x, short y, uchar *cl) { uchar *src = bm->bits; short right = x+bm->w; short bot = y+bm->h; short cur_x; if (cl==NULL) cl=grd_screen->clut; if (bm->flags & BMF_TRANS) { for ( ; yrow-bm->w) { for (cur_x=x ; cur_xrow-bm->w) { for (cur_x=x ; cur_xw; h = bm->h; p = bm->bits; /* check for trivial reject. */ if (x+bm->w=grd_clip.right || y+bm->h=grd_clip.bot) return CLIP_ALL; /* clip & draw that sucker. */ if (x < grd_clip.left) { /* off left edge */ extra = grd_clip.left - x; bm->w -= extra; bm->bits += extra; x = grd_clip.left; code |= CLIP_LEFT; } if (x+bm->w > grd_clip.right) { /* off right edge */ bm->w -= x+bm->w-grd_clip.right; code |= CLIP_RIGHT; } if (y < grd_clip.top) { /* off top */ extra = grd_clip.top - y; bm->h -= extra; bm->bits += bm->row*extra; y = grd_clip.top; code |= CLIP_TOP; } if (y+bm->h > grd_clip.bot) { /* off bottom */ bm->h -= y+bm->h-grd_clip.bot; code |= CLIP_BOT; } gr_flat8_clut_ubitmap (bm, x, y, cl); /* restore bitmap to normal. */ bm->w = w; bm->h = h; bm->bits = p; return code; }