/*
 *	Vdi raster funcs library interface
 *
 *		vro_cpyfm	copy raster opaque
 *		vrt_cpyfm	copy raster transparent
 *		vr_trnfm	transform form
 *		v_get_pixel get pix
 *
 *			++jrb	bammi@cadence.com
 *			modified: mj -- ntomczak@vm.ucs.ualberta.ca
 */
#include "common.h"

#ifdef __DEF_ALL__

#define L_vro_cpyf
#define L_vrt_cpyf
#define L_vr_trnfm
#define L_v_get_pi

#endif /* __DEF_ALL__ */


#ifdef L_vro_cpyf

/* vro_cpyfm	copy raster opaque
 * returns void
 */
void vro_cpyfm(int handle, int mode, int pxyarray[],
		   void *src,  void *dst)
{
#ifdef __MSHORT__		/* we have 16 bit ints, just change vdi params */
	_vdiparams[2] = (void *) &pxyarray[0];
#else					/* 32 bit ints - let's copy */
	register short i;

	for(i = 0; i < 8; i++)
	_ptsin[i] = pxyarray[i];
#endif

	_intin[0] = mode;
	*((void **)(&_contrl[7])) = src;
	*((void **)(&_contrl[9])) = dst;

	__vdi__(VDI_CONTRL_ENCODE(109, 4, 1, 0), handle);

#ifdef __MSHORT__
	_vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
#endif
}
#endif /* L_vro_cpyf */

#ifdef L_vrt_cpyf

/* vrt_cpyfm	copy raster transparent
 * returns void
 */
void vrt_cpyfm(int handle, int mode, int pxyarray[],
		   void *src,  void *dst, int color[])
{
#ifdef __MSHORT__		/* we have 16 bit ints, just change vdi params */
	_vdiparams[2] = (void *) &pxyarray[0];
#else					/* 32 bit ints - let's copy */
	register short i;

	for(i = 0; i < 8; i++)
	_ptsin[i] = pxyarray[i];
#endif

	_intin[0] = mode;
	_intin[1] = color[0];
	_intin[2] = color[1];

	*((void **)(&_contrl[7])) = src;
	*((void **)(&_contrl[9])) = dst;

	__vdi__(VDI_CONTRL_ENCODE(121, 4, 3, 0), handle);

#ifdef __MSHORT__
	_vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */
#endif
}
#endif /* L_vrt_cpyf */

#ifdef L_vr_trnfm

/* vr_trnfm transform form
 * returns void
 */
void vr_trnfm(int handle, void *src, void *dst)
{
	*((void **)(&_contrl[7])) = src;
	*((void **)(&_contrl[9])) = dst;

	__vdi__(VDI_CONTRL_ENCODE(110, 0, 0, 0), handle);
}
#endif /* L_vr_trnfm */

#ifdef L_v_get_pi

/* v_get_pixel	get pix
 * returns void (results in args)
 */
void v_get_pixel( int handle, int x, int y, int *pel, int *index)
{
	_ptsin[0] = x;
	_ptsin[1] = y;

	__vdi__(VDI_CONTRL_ENCODE(105, 1, 0, 0), handle);

	*pel = _intout[0];
	*index = _intout[1];
}
#endif /* L_v_get_pi */

/* -eof- */
