char* get_gsl_version ();

#ifndef PERLGSL_DIFFEQ_PARAMS_STRUCT
#define PERLGSL_DIFFEQ_PARAMS_STRUCT

struct params {
  int num;
  SV* eqn;
  SV* jac;
};

#endif

int diff_eqs (double t, const double y[], double f[], void *params);

int jacobian_matrix (double t, const double y[], double *dfdy, 
          double dfdt[], void *params);

/* c_ode_solver needs stack to be clear when called,
   I recommend `local @_;` before calling. */
SV* c_ode_solver
  (SV* eqn, SV* jac, double t1, double t2, int steps, int step_type_num,
    double h_init, const double h_max,
    double epsabs, double epsrel, double a_y, double a_dydt);