home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Black Box 4
/
BlackBox.cdr
/
progc
/
dbvgal17.arj
/
SRC_C.ZIP
/
VIDLIB4.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-01-26
|
5KB
|
150 lines
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <mem.h>
#include "vidlib.h"
/* video to video copy, 16 colors, planar */
int Vcopy16(unsigned dx, unsigned dy,
unsigned sx, unsigned sy, unsigned sdx, unsigned sdy)
{
char *dest;
char *src;
unsigned yo;
int oldWmode;
/* check parameters */
if ( (dx+sdx > _screen_width) || (sx+sdx > _screen_width) ||
(dy+sdy > _memory_length) || (sy+sdy > _memory_length) ||
((long)(sdx * sdy) > 0xFFFFL ) )
return(0);
if ( vgadebug != NULL ) {
sprintf(tdbg,"Vc16: dx=%u, dy=%u, sx=%u, sy=%u, sdx=%u, sdy=%u\n",
dx, dy, sx, sy, sdx, sdy);
fputs(tdbg,vgadebug);
}
oldWmode=What_Wmode();
Select_Wmode(1);
dest=(char *)normalize(_screen_start + dy*_screen_width + dx);
src=(char *)normalize(_screen_start + sy*_screen_width + sx);
if ( vgadebug != NULL ) {
sprintf(tdbg," : dest=%Fp, src=%Fp, m1=%u, m2=%u\n",
dest, src, oldWmode, What_Wmode());
fputs(tdbg,vgadebug);
}
for (yo=0; yo < sdy; yo++) {
/* must use a byte-at-a-time copy only here! */
memcpyb(dest, src, sdx);
dest=(char *)normalize(dest + _screen_width);
src=(char *)normalize(src + _screen_width);
}
Select_Wmode(oldWmode);
return(1);
}
/* Memory to video copy, 16 color, planar memory to planar video */
int Vdisp16( unsigned dx, unsigned dy,
char *s, unsigned sw, unsigned sl,
unsigned sx, unsigned sy, unsigned sdx, unsigned sdy)
{
char *dest;
char *src;
unsigned yo;
/* check parameters */
if ( ( dx+sdx > _screen_width) || (dy+sdy > _memory_length) ||
( sx+sdx > sw) || (sy+sdy > sl) ) {
printf("Invalid parameters to Vdisp16\n");
return(0);
}
dest=(char *)normalize(_screen_start + dy*_screen_width + dx);
src=(char *)normalize(s + sy*sw*4 + sx);
if ( vgadebug != NULL ) {
sprintf(tdbg,"Vd16: dx=%u, dy=%u, s=%Fp, sw=%u, sl=%u, sx=%u\n"
" sy=%u, sdx=%u, sdy=%u\n",
dx, dy, s, sw, sl, sx, sy, sdx, sdy);
fputs(tdbg,vgadebug);
sprintf(tdbg," : dest=%Fp, src=%Fp\nGC[0]=%x, GC[1]=%x, GC[2]=%u"
", GC[3]=%u, GC[5]=%u, GC[8]=%x\n", dest, src,
GCread_reg(0), GCread_reg(1), GCread_reg(2), GCread_reg(3),
GCread_reg(5), GCread_reg(8));
fputs(tdbg,vgadebug);
}
Select_Wmode(0);
for (yo=0; yo < sdy; yo++) {
Select_WPlane(WPlane0);
memcpy(dest,src,sdx);
src=(char *)normalize(src + sw);
Select_WPlane(WPlane1);
memcpy(dest,src,sdx);
src=(char *)normalize(src + sw);
Select_WPlane(WPlane2);
memcpy(dest,src,sdx);
src=(char *)normalize(src + sw);
Select_WPlane(WPlane3);
memcpy(dest,src,sdx);
dest=(char *)normalize(dest + _screen_width);
src=(char *)normalize(src + sw);
}
Select_WPlane(WPlaneALL);
return(1);
}
/* Video to Memory copy, 16 color, planar video to planar memory */
int Vcapt16( char *d, unsigned dw, unsigned dl,
unsigned dx, unsigned dy,
unsigned sx, unsigned sy, unsigned sdx, unsigned sdy)
{
char *dest;
char *src;
unsigned yo;
/* check parameters */
if ( ( sx+sdx > _screen_width) || (sy+sdy > _memory_length) ||
( dx+sdx > dw) || (dy+sdy > dl) ) {
printf("Invalid parameters to Vdisp16\n");
return(0);
}
src=(char *)normalize(_screen_start + sy*_screen_width + sx);
dest=(char *)normalize(d + dy*dw*4 + dx);
if ( vgadebug != NULL ) {
sprintf(tdbg,"Vct16: d=%Fp, dw=%u, dl=%u, dx=%u, dy=%u\n"
" sx=%u, sy=%u, sdx=%u, sdy=%u\n",
d, dw, dl, dx, dy, sx, sy, sdx, sdy);
fputs(tdbg,vgadebug);
sprintf(tdbg," : dest=%Fp, src=%Fp\n", dest, src);
fputs(tdbg,vgadebug);
}
for (yo=0; yo < sdy; yo++) {
Select_RPlane(0);
memcpy(dest, src, sdx);
dest=(char *)normalize(dest + dw);
Select_RPlane(1);
memcpy(dest, src, sdx);
dest=(char *)normalize(dest + dw);
Select_RPlane(2);
memcpy(dest, src, sdx);
dest=(char *)normalize(dest + dw);
Select_RPlane(3);
memcpy(dest, src, sdx);
src=(char *)normalize(src + _screen_width);
dest=(char *)normalize(dest + dw);
}
return(1);
}