inline void register_object(const XLOPER & xDll) { // register objects register_leg (xDll); register_instrument (xDll); register_index (xDll); register_curve (xDll); register_mathObject (xDll); register_interestRateConvention (xDll); register_curveTransform (xDll); register_swapObject (xDll); register_fittingMethod (xDll); register_volatilitySurface (xDll); };
userval_info_t* arg_decls_to_uservals (filter_t *filter, arg_decl_t *arg_decls) { userval_info_t *infos = NULL; while (arg_decls != 0) { userval_info_t *result = 0; if (lookup_userval(infos, arg_decls->name) != NULL) { sprintf(error_string, _("The argument `%s' is declared more than once."), arg_decls->name); error_region = arg_decls->region; JUMP(1); } switch (arg_decls->type) { case ARG_TYPE_INT : if (arg_decls->v.integer.have_limits) result = register_int_const(&infos, arg_decls->name, arg_decls->v.integer.min, arg_decls->v.integer.max, arg_decls->v.integer.default_value); else result = register_int_const(&infos, arg_decls->name, -100000, 100000, 0); break; case ARG_TYPE_FLOAT : if (arg_decls->v.floating.have_limits) result = register_float_const(&infos, arg_decls->name, arg_decls->v.floating.min, arg_decls->v.floating.max, arg_decls->v.floating.default_value); else result = register_float_const(&infos, arg_decls->name, -1.0, 1.0, 0.0); break; case ARG_TYPE_BOOL : result = register_bool(&infos, arg_decls->name, arg_decls->v.boolean.default_value); break; case ARG_TYPE_COLOR : result = register_color(&infos, arg_decls->name); break; case ARG_TYPE_GRADIENT : result = register_gradient(&infos, arg_decls->name); break; case ARG_TYPE_CURVE : result = register_curve(&infos, arg_decls->name); break; case ARG_TYPE_FILTER : assert(0); case ARG_TYPE_IMAGE : result = register_image(&infos, arg_decls->name, image_flags_from_options(arg_decls->options)); break; default : assert(0); } if (result == 0) { sprintf(error_string, _("Conflict for argument %s."), arg_decls->name); error_region = arg_decls->region; JUMP(1); } arg_decls = arg_decls->next; } return infos; }