From: Andriy Shinkarchuck Date: Sun, 24 Jul 2011 15:55:53 +0000 (+0300) Subject: redraw.c moved to repo. Added licence notification X-Git-Url: https://deadsoftware.ru/gitweb?p=flatwaifu.git;a=commitdiff_plain;h=419a2ae2167d9035748a264a53abc5842c56051e redraw.c moved to repo. Added licence notification --- diff --git a/redraw.c b/redraw.c new file mode 100755 index 0000000..363bec0 --- /dev/null +++ b/redraw.c @@ -0,0 +1,117 @@ +/* + Copyright (C) Prikol Software 1996-1997 + Copyright (C) Aleksey Volynskov 1996-1997 + Copyright (C) 2011 + + This file is part of the Doom2D:Rembo project. + + Doom2D:Rembo is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + Doom2D:Rembo 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 or + write to the Free Software Foundation, Inc., + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include +//#include "..\averr.h" +#include "vga.h" +#include "glob.h" +/* +#define MAXRECT 500 + +typedef struct{short x,w,y,h;}rect; + +static rect *rt,*rp; +static redraw_f *fn; +static short sl,st,sr,sb; + + +void *RD_init(short x,short w,short y,short h) { + rect *p; + + if(!(p=malloc((MAXRECT*2+1)*sizeof(rect)))) + {error(0,0,ENOMEM,NULL,NULL);return NULL;}//{error(EZ_VGALIB,ET_STD,ENOMEM,NULL,NULL);return NULL;} + p->x=x;p->w=x+w-1;p->y=y;p->h=y+h-1; + memset(p+1,0,MAXRECT*2*sizeof(rect)); + return p; +} + +void RD_start(void *p,redraw_f *f) { + rt=p;fn=f; + sl=rt->x;sr=rt->w; + st=rt->y;sb=rt->h; + ++rt; + rp=rt; +} + +static void add(short x,short r,short y,short b) { + int i; + short rx,rr,ry,rb; + + for(i=0;i(rr=(rx=rp[i].x)+rp[i].w-1)) continue; + if(r(rb=(ry=rp[i].y)+rp[i].h-1)) continue; + if(brr) add(rr+1,r,y,b); + if(yrb) add(max(rx,x),min(rr,r),rb+1,b); + return; + } + for(i=0;isr) return; + if(x+w<=sl) return; + if(y>sb) return; + if(y+h<=st) return; + w+=x-1;h+=y-1; + if(xsr) w=sr; + if(h>sb) h=sb; + add(x,w,y,h); +} + +void RD_spr(short x,short y,vgaimg *v) { + RD_rect(x-v->sx,v->w,y-v->sy,v->h); +} + +void RD_spr2(short x,short y,vgaimg *v) { + RD_rect(x-v->w+v->sx,v->w,y-v->sy,v->h); +} + +void RD_end(void) { + int i; + + V_setscr(scrbuf); + rp=rt+MAXRECT; + for(i=0;i