SYNOPSIS#include <sys/types.h>
#include "dbquery.h"
int fosetop(fo, type1, type2, func, ofunc)
FLDOP *fo;
int type1;
int type2;
fop_type func;
fop_type *ofunc;
DESCRIPTION
Fosetop changes a binary operator in the math unit of Texis. The
function func will be called for all operations on (type1, type2). If
the function does not know how to handle the specific operation, and ofunc
is not NULL, ofunc can be called to hande the operation.
The function being called should look like
int
func(f1, f2, f3, op)
FLD *f1;
FLD *f2;
FLD *f3;
int op;
{
}
Parameters
EXAMPLE#include <sys/types.h>
#include "dbquery.h"
fop_type o_ftich; /* the pointer to the previous handler */
int
n_ftich(f1, f2, f3, op)
FLD *f1;
FLD *f2;
FLD *f2;
int op;
{
TIMESTAMP *ts;
double d;
int n;
if (op != FOP_ASN) /* We only know about assignment. */
if (o_ftich)
return ((*o_ftich)(f1, f2, f3, op));
else
return FOP_EINVAL;
/* Set up the return field. */
f3->type = FTN_TIMESTAMP;
f3->elsz = sizeof(TIMESTAMP);
f3->size = sizeof(TIMESTAMP);
f3->n = 1;
if(sizeof(TIMESTAMP) > f3->alloced)
{
void *v;
v = malloc(sizeof(TIMESTAMP));
setfld(f2, v, sizeof(TIMESTAMP));
f3->alloced = sizeof(TIMESTAMP);
}
/* First 0 out all the elements */
ts = getfld(f1, NULL);
ts->year = 0;
ts->month = 0;
ts->day = 0;
ts->hour = 0;
ts->minute = 0;
ts->second = 0;
ts->fraction = 0;
/* Now read in the values */
n = sscanf(getfld(f2, NULL), "%hu/%hu/%hd %hu:%hu:%hu%lf",
&ts->month, &ts->day, &ts->year,
&ts->hour, &ts->minute, &ts->second, &d);
/* Convert any fractional seconds into the appropriate number
of billionths of a second.
*/
if (n == 7)
ts->fraction = d * 1000000000 ;
}
.
.
.
fosetop(fo, FTN_TIMESTAMP, FTN_CHAR, n_ftich, &o_ftich);
.
.
.
This example adds an operator to allow the assignment of a TIMESTAMP field from a character string. See dbaddtype for the definition of TIMESTAMP.