File:
[LON-CAPA] /
loncom /
homework /
caparesponse /
caparesponse.c
Revision
1.11:
download - view:
text,
annotated -
select for diffs
Mon Jul 28 18:30:08 2003 UTC (21 years, 2 months ago) by
albertel
Branches:
MAIN
CVS tags:
version_1_1_X,
version_1_1_3,
version_1_1_2,
version_1_1_1,
version_1_1_0,
version_1_0_99_3,
version_1_0_99_2,
version_1_0_99_1,
version_1_0_99,
version_1_0_3,
version_1_0_2,
version_1_0_1,
version_1_0_0,
version_0_99_5,
version_0_99_4,
HEAD
- udoing a stupid commit
/* The LearningOnline Network with CAPA
* CAPA wrapper code
* $Id: caparesponse.c,v 1.11 2003/07/28 18:30:08 albertel Exp $
*
* 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 <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 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)
{
long result,seed1,seed2;
Problem_t p;
char *error=NULL,filename[FILE_NAME_LENGTH];
FILE *fp;
/* need to initialize unit parser*/
sprintf(filename,"/home/httpd/html/res/adm/includes/capa.units");
if ((fp=fopen(filename,"r"))==NULL) {
/* printf("Error: can't open %s\n",filename);*/
return (-1);
}
u_getunit(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.answer = correct;
p.tol_type = tol_type;
p.tolerance = tolerance;
p.sig_lbound = sig_lbound;
p.sig_ubound = sig_ubound;
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);
p.ans_unit = u_parse_unit(unit_str);
} else {
p.unit_str[0]='\0';
p.ans_unit=NULL;
}
p.calc = calc;
result=capa_check_answer(&p,response,&error);
if (error!=NULL) {free(error);}
return result;
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>