File:  [LON-CAPA] / loncom / homework / caparesponse / capa.i
Revision 1.7: download - view: text, annotated - select for diffs
Wed Apr 24 21:11:49 2024 UTC (2 weeks, 2 days ago) by raeburn
Branches: MAIN
CVS tags: HEAD
- Support swig 4.2
  - specifying target language as arg in %typemap no longer supported.
  - use of $source and $target in typemap declaration no longer supported.

%module capa
%{

%}

%typemap(in) char** reterror (char* cvalue) {
  SV* tempsv;
  int len;
  if (!SvROK($input)) {
    croak("expected a reference\n");
  }
  tempsv = SvRV($input);
  if ((!SvPOK(tempsv))) {
    croak("expected a double reference\n");
  }
  cvalue = SvPV(tempsv,len);
  $1 = &cvalue;
}

%typemap(argout) char ** reterror {
  SV *tempsv;
  tempsv = SvRV($arg);
  if (($1!=NULL) && (*$1!=NULL)) {
    sv_setpv(tempsv, *$1);
    free(*$1);
  }
}

%typemap(in) double* scaled {
  double *temp;
  if (!SvROK($input)) {
    croak("expected a reference\n");
  }
  SV* tempsv;
  tempsv = SvRV($input);
  if (!SvPOK(tempsv) && !SvIOK(tempsv) && !SvNOK(tempsv)) {
    croak("expected a single reference to a scalar\n");
  }
  temp = malloc(sizeof(double));
  *temp = SvNV(tempsv);
  $1 = temp;
}

%typemap(argout) double* scaled {
  SV *tempsv;
  tempsv = SvRV($arg);
  sv_setnv(tempsv, *$1);
  free($1);
}


extern int caparesponse_capa_check_answer(char *response,char *correct,
				   int type,int tol_type,double tolerance,
				   int sig_lbound,int sig_ubound, 
				   char *ans_fmt, char *unit_str,
				   int calc, char *id_list, char *pts_list,
				   char *rndseed, char** reterror);

extern int caparesponse_get_real_response(char* unit_str, char* answer,
					  double* scaled);

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>