4.3BSD/usr/ingres/source/libq/IIcvar.c

Compare this file to the similar file:
Show the results in this format:

# include	<ingres.h>
# include	<symbol.h>
# include	"IIglobals.h"
# include	<sccs.h>

SCCSID(@(#)IIcvar.c	8.2	2/10/86)


/*
**	IIcvar -- write C variable values to parser
**
**
**		IIcvar is used to write the contents
**		of a C-variable to the quel parser.
**
**		Floats are converted to doubles first.
**
*/

IIcvar(obj, type, len)
char	*obj;
int	type;
int	len;
{
	register int		length;
	register ANYTYPE	*addr;
	char			t;
	double			d;

	t = type;	/* copy type of symbol */
	length = len;	/* and its length */
	addr = (ANYTYPE *) obj;	/* and a pointer to it */

	switch (t)
	{

	  case opFLOAT:
		/* convert from f4 to f8 */
		d = addr->f4type;
		addr = (ANYTYPE *) &d;
		length = sizeof d;
		t = opDOUBLE;
		break;

	  case opSTRING:
		length = IIlength(addr) + 1;	/* length includes null byte at end */

	  case opSHORT:
	  case opLONG:
	  case opDOUBLE:
		break;

	  default:
		IIsyserr("IIcvar:bad type %d", t);
	}


#	ifdef xETR1
	if (IIdebug)
		printf("IIcvar:type %d, length %d\n", t, length);
#	endif

	IIpb_put(&t, 1, &IIpb);
	IIpb_put(addr, length, &IIpb);
}