version 1.5, 2000/11/29 00:29:43
|
version 1.8, 2003/05/27 15:29:02
|
Line 1
|
Line 1
|
|
/* The LearningOnline Network with CAPA |
|
* CAPA wrapper code |
|
* $Id$ |
|
* |
|
* Copyright Michigan State University Board of Trustees |
|
* |
|
* This file is part of the LearningOnline Network with CAPA (LON-CAPA). |
|
* |
|
* LON-CAPA is free software; you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License as published by |
|
* the Free Software Foundation; either version 2 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* LON-CAPA is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License |
|
* along with LON-CAPA; if not, write to the Free Software |
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
* |
|
* /home/httpd/html/adm/gpl.txt |
|
* |
|
* http://www.lon-capa.org/ |
|
*/ |
|
|
#include <capaCommon.h> |
#include <capaCommon.h> |
|
#include <ranlib.h> |
|
|
|
PointsList_t * parse_pts_list (char *pts_list) { |
|
PointsList_t *new=NULL, *end=NULL, *beforeend=NULL, *rlist=NULL; |
|
char *idx_pts=pts_list; |
|
int done=0; |
|
/*fprintf(stderr,"ids %s\n",id_list); |
|
fprintf(stderr,"pts %s\n",pts_list);*/ |
|
while (!done) { |
|
int idx; |
|
/*fprintf(stderr,"pts; %s\n",idx_pts);*/ |
|
new=gen_ptslist_str(idx_pts); |
|
if (!new) break; |
|
if (!rlist) { rlist=new; } |
|
if (end) { |
|
end->pts_next=new; |
|
idx=end->pts_idx; |
|
} else { |
|
idx=-1; |
|
} |
|
end=new; |
|
while (end) { |
|
idx++; |
|
end->pts_idx=idx; |
|
/*fprintf(stderr,"end is:%d:%d:%s:%d\n",idx,end->pts_idx,end->pts_str, |
|
end->pts_next);*/ |
|
beforeend=end; |
|
end=end->pts_next; |
|
} |
|
end=beforeend; |
|
idx_pts=strchr(idx_pts,';'); |
|
if (idx_pts) { idx_pts++; } else { done=1; } |
|
} |
|
|
|
return rlist; |
|
} |
|
|
int caparesponse_capa_check_answer(char *response,char *correct, |
int caparesponse_capa_check_answer(char *response,char *correct, |
int type,int tol_type,double tolerance, |
int type,int tol_type,double tolerance, |
int sig_lbound,int sig_ubound, |
int sig_lbound,int sig_ubound, |
char *ans_fmt, char *unit_str, |
char *ans_fmt, char *unit_str, |
int calc) |
int calc, char *id_list, char *pts_list, |
|
char *rndseed) |
|
|
{ |
{ |
int result; |
long result,seed1,seed2; |
Problem_t p; |
Problem_t p; |
char *error=NULL,filename[FILE_NAME_LENGTH]; |
char *error=NULL,filename[FILE_NAME_LENGTH]; |
FILE *fp; |
FILE *fp; |
|
|
printf("hi in caparesponse\n"); |
/* eed to initialize unit parser*/ |
/*need to initialize unit parser*/ |
|
sprintf(filename,"/home/httpd/html/res/adm/includes/capa.units"); |
sprintf(filename,"/home/httpd/html/res/adm/includes/capa.units"); |
if ((fp=fopen(filename,"r"))==NULL) { |
if ((fp=fopen(filename,"r"))==NULL) { |
/* printf("Error: can't open %s\n",filename);*/ |
/* printf("Error: can't open %s\n",filename);*/ |
Line 19 int caparesponse_capa_check_answer(char
|
Line 84 int caparesponse_capa_check_answer(char
|
} |
} |
u_getunit(fp); |
u_getunit(fp); |
fclose(fp); |
fclose(fp); |
|
/* need to setup random generator (FIXME) should only do this if |
|
it hasn't been yet*/ |
|
phrtsd(rndseed,&seed1,&seed2); |
|
setall(seed1,seed2); |
|
|
|
/* assign_id_list and assign_pts_list exist in capaGrammerDef.y */ |
|
p.id_list=NULL; |
|
p.pts_list=NULL; |
|
|
|
if (type == ANSWER_IS_FORMULA) { |
|
p.id_list=id_list; |
|
p.pts_list=parse_pts_list(pts_list); |
|
} |
p.ans_type = type; |
p.ans_type = type; |
p.answer = correct; |
p.answer = correct; |
p.tol_type = tol_type; |
p.tol_type = tol_type; |
p.tolerance = tolerance; |
p.tolerance = tolerance; |
p.sig_lbound = sig_lbound; |
p.sig_lbound = sig_lbound; |
p.sig_ubound = sig_ubound; |
p.sig_ubound = sig_ubound; |
strncpy(p.ans_fmt,ans_fmt,ANSWER_STRING_LENG-1); |
|
if (unit_str[0]!='\0') { |
if (ans_fmt != NULL ) { |
|
strncpy(p.ans_fmt,ans_fmt,ANSWER_STRING_LENG-1); |
|
} |
|
if (unit_str != NULL && unit_str[0]!='\0') { |
strncpy(p.unit_str,unit_str,ANSWER_STRING_LENG-1); |
strncpy(p.unit_str,unit_str,ANSWER_STRING_LENG-1); |
p.ans_unit = u_parse_unit(unit_str); |
p.ans_unit = u_parse_unit(unit_str); |
} else { |
} else { |
p.unit_str[0]='\0'; |
p.unit_str[0]='\0'; |
p.ans_unit=NULL; |
|
} |
} |
p.calc = calc; |
p.calc = calc; |
|
|
/* assign_id_list and assign_pts_list exist in capaGrammerDef.y */ |
|
p.id_list=NULL; |
|
p.pts_list=NULL; |
|
|
|
result=capa_check_answer(&p,response,&error); |
result=capa_check_answer(&p,response,&error); |
|
|
if (error!=NULL) {free(error);} |
if (error!=NULL) {free(error);} |