/*                   */
/* 'EdDI' binding    */
/*                   */

/* 
	Patched for Lattice C 5.52 [2/10/94] by Craig Graham.
*/

#include <vdi.h>
#include <portab.h>
#include <osbind.h>
#include "eddilib.h"

/* Funktionsprototypen */
void  v_opnbm( short *work_in, MFDB *bitmap, short *handle, short *work_out );
void  v_clsbm( short handle );

extern short _VDIcontrl[12],
      _VDIintin[128],
      _VDIintout[128],
      _VDIptsin[128],
      _VDIptsout[128];

/* OPEN BITMAP (VDI 100, 1) */
void  v_opnbm( short *work_in, MFDB *bitmap, short *handle, short *work_out )
{
	_VDIpb[1] = work_in;
	_VDIpb[3] = work_out;
	_VDIpb[4] = work_out + 45;

	_VDIcontrl[0] = 100;
	_VDIcontrl[1] = 0;
	_VDIcontrl[3] = 20;
	_VDIcontrl[5] = 1;
	*((ULONG *)(&_VDIcontrl[7])) = (ULONG) bitmap;

   cg_vdi((ULONG)_VDIpb);

   *handle = _VDIcontrl[6];
   _VDIpb[1] = _VDIintin;
   _VDIpb[3] = _VDIintout;
   _VDIpb[4] = _VDIptsout;
}

/* CLOSE BITMAP (VDI 101, 1)  */
void  v_clsbm( short handle )
{
   _VDIcontrl[0] = 101;
   _VDIcontrl[1] = 0;
   _VDIcontrl[3] = 0;
   _VDIcontrl[5] = 1;
   _VDIcontrl[6] = handle;
   cg_vdi((ULONG)_VDIpb);
}

/* Open an Off-Screen-Bitmap (simple interface to v_opnbm()) */
short open_bitmap( short x, short y, MFDB *bitmap, short *work_out )
{
	short	count,
			dummy,
			work_in[20];
	short handle;

	handle = graf_handle( &dummy, &dummy, &dummy, &dummy );

	for ( count = 1; count < 10; count++ )
		work_in[count] = 1;

	work_in[0] = Getrez()+2;
	work_in[10] = 2;								/* Rasterkoordinaten */
	work_in[11] = x;								/* Breite - 1 */
	work_in[12] = y;								/* Hhe - 1 */
	work_in[13] = work_in[14] = 0;			/* Pixelbreite und -Hhe des Bildschirms bernehmen */
	
	for ( count = 15; count < 20; count++ )
		work_in[count] = 0;						/* reserviert */
	
	v_opnbm( work_in, bitmap, &handle, work_out );

	return( handle );
}
