Exemple #1
0
CAMLexport
int triunsuitable(vertex triorg, vertex tridest, vertex triapex, REAL area)
{
  CAMLparam0();
  CAMLlocal1(vd);
  static value * closure = NULL;
  value args[NARGS_TRIUNSUITABLE];
  if (closure == NULL) {
    closure = caml_named_value("triunsuitable_callback");
  }

#define COPY_DOUBLE(dest, d) \
  vd = caml_copy_double(d);  \
  dest = vd

  COPY_DOUBLE(args[0], triorg[0]);
  COPY_DOUBLE(args[1], triorg[1]);
  COPY_DOUBLE(args[2], tridest[0]);
  COPY_DOUBLE(args[3], tridest[1]);
  COPY_DOUBLE(args[4], triapex[0]);
  COPY_DOUBLE(args[5], triapex[1]);
  COPY_DOUBLE(args[6], area);
  CAMLreturn(Bool_val(callbackN(*closure, NARGS_TRIUNSUITABLE, args)));

#undef COPY_DOUBLE
}
Exemple #2
0
static int call_back (
   HRASCONN 		hrasconn,
   int 			istate,
   char 		state[],
   int 			ierror,
   char 		error[] ) 
{
   value_t	args[6], ret;
   CAMLparam0   ();
   CAMLlocal2	(v_state, v_error);

   if ( *cb_info.p_closure == 0 )
      return -1;

   v_state = copy_string ( state?state:"" );
   v_error = copy_string ( error?error:"" );

   args[0] = Val_int (LOWORD(hrasconn));
   args[1] = Val_int (HIWORD(hrasconn));
   args[2] = Val_int ( istate );
   args[3] = v_state;
   args[4] = Val_int ( error );
   args[5] = v_error;

   ret = callbackN ( *cb_info.p_closure, 6, args );

   CAMLreturn ( Bool_val ( ret ) );
   return 0;  /* dummy ! */
}
Exemple #3
0
value mycallback4(value fun, value arg1, value arg2, value arg3, value arg4)
{
  value args[4];
  value res;
  args[0] = arg1;
  args[1] = arg2;
  args[2] = arg3;
  args[3] = arg4;
  res = callbackN(fun, 4, args);
  return res;
}