2.11BSD/ingres/source/equel/runtime/IIcvar.c
# include "../../ingres.h"
# include "../../symbol.h"
# include "../../pipes.h"
# include "IIglobals.h"
/*
** 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 char *addr;
int t;
double d;
t = type; /* copy type of symbol */
length = len; /* and its length */
addr = obj; /* and a pointer to it */
switch (t)
{
case opFLOAT:
/* convert from f4 to f8 */
d = *((float *)addr);
addr = (char *) &d;
length = sizeof d;
t = opDOUBLE;
break;
case opSTRING:
length = IIlength(addr) + 1; /* length includes null byte at end */
case opINT:
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
if (IIwrpipe(P_NORM, &IIoutpipe, IIw_down, &t, 1) != 1)
IIsyserr("IIcvar:can't write to parser(1) %d", IIw_down);
if (IIwrpipe(P_NORM, &IIoutpipe, IIw_down, addr, length) != length)
IIsyserr("IIcvar:can't write to parser(2) %d", IIw_down);
}