1: %module capa
2: %{
3: #include "caparesponse.h"
4: %}
5:
6: %typemap(in) char** reterror (char* cvalue) {
7: SV* tempsv;
8: long unsigned int len;
9: if (!SvROK($input)) {
10: croak("expected a reference\n");
11: }
12: tempsv = SvRV($input);
13: if ((!SvPOK(tempsv))) {
14: croak("expected a double reference\n");
15: }
16: cvalue = SvPV(tempsv,len);
17: $1 = &cvalue;
18: }
19:
20: %typemap(argout) char ** reterror {
21: SV *tempsv;
22: tempsv = SvRV($arg);
23: if (($1!=NULL) && (*$1!=NULL)) {
24: sv_setpv(tempsv, *$1);
25: free(*$1);
26: }
27: }
28:
29: %typemap(in) double* scaled {
30: double *temp;
31: if (!SvROK($input)) {
32: croak("expected a reference\n");
33: }
34: SV* tempsv;
35: tempsv = SvRV($input);
36: if (!SvPOK(tempsv) && !SvIOK(tempsv) && !SvNOK(tempsv)) {
37: croak("expected a single reference to a scalar\n");
38: }
39: temp = malloc(sizeof(double));
40: *temp = SvNV(tempsv);
41: $1 = temp;
42: }
43:
44: %typemap(argout) double* scaled {
45: SV *tempsv;
46: tempsv = SvRV($arg);
47: sv_setnv(tempsv, *$1);
48: free($1);
49: }
50:
51:
52: extern int caparesponse_capa_check_answer(char *response,char *correct,
53: int type,int tol_type,double tolerance,
54: int sig_lbound,int sig_ubound,
55: char *ans_fmt, char *unit_str,
56: int calc, char *id_list, char *pts_list,
57: char *rndseed, char** reterror);
58:
59: extern int caparesponse_get_real_response(char* unit_str, char* answer,
60: double* scaled);
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>