Annotation of loncom/homework/caparesponse/caparesponse.c, revision 1.6

1.1       albertel    1: #include <capaCommon.h>
1.6     ! albertel    2: #include <ranlib.h>
        !             3: 
        !             4: PointsList_t * parse_pts_list (char *pts_list) {
        !             5:   PointsList_t *new=NULL, *end=NULL, *beforeend=NULL, *rlist=NULL;
        !             6:   char *idx_pts=pts_list;
        !             7:   int done=0;
        !             8:   /*fprintf(stderr,"ids %s\n",id_list);
        !             9:     fprintf(stderr,"pts %s\n",pts_list);*/
        !            10:   while (!done) {
        !            11:     int idx;
        !            12:     /*fprintf(stderr,"pts; %s\n",idx_pts);*/
        !            13:     new=gen_ptslist_str(idx_pts);
        !            14:     if (!new) break;
        !            15:     if (!rlist) { rlist=new; }
        !            16:     if (end) { 
        !            17:       end->pts_next=new; 
        !            18:       idx=end->pts_idx;
        !            19:     } else {
        !            20:       idx=-1;
        !            21:     }
        !            22:     end=new;
        !            23:     while (end) {
        !            24:       idx++;
        !            25:       end->pts_idx=idx;
        !            26:       /*fprintf(stderr,"end is:%d:%d:%s:%d\n",idx,end->pts_idx,end->pts_str,
        !            27: 	end->pts_next);*/
        !            28:       beforeend=end;
        !            29:       end=end->pts_next;
        !            30:     }
        !            31:     end=beforeend;
        !            32:     idx_pts=strchr(idx_pts,';');
        !            33:     if (idx_pts) { idx_pts++; } else { done=1; }
        !            34:   }
        !            35:   
        !            36:   return rlist;
        !            37: }
        !            38: 
1.1       albertel   39: int caparesponse_capa_check_answer(char *response,char *correct,
                     40: 				   int type,int tol_type,double tolerance,
                     41: 				   int sig_lbound,int sig_ubound, 
                     42: 				   char *ans_fmt, char *unit_str,
1.6     ! albertel   43: 				   int calc, char *id_list, char *pts_list, 
        !            44: 				   char *rndseed)
        !            45: 				   
1.1       albertel   46: {
1.6     ! albertel   47:   long result,seed1,seed2;
1.1       albertel   48:   Problem_t p;
                     49:   char *error=NULL,filename[FILE_NAME_LENGTH];
                     50:   FILE *fp;
                     51: 
1.6     ! albertel   52:   /*fprintf(stderr,"hi in caparesponse\n");*/
1.1       albertel   53:   /*need to initialize unit parser*/
1.4       albertel   54:   sprintf(filename,"/home/httpd/html/res/adm/includes/capa.units");
1.1       albertel   55:   if ((fp=fopen(filename,"r"))==NULL) {
                     56:     /* printf("Error: can't open %s\n",filename);*/
                     57:       return (-1); 
                     58:   }
                     59:   u_getunit(fp);
                     60:   fclose(fp);
1.6     ! albertel   61:   /* need to setup random generator (FIXME) should only do this if 
        !            62:      it hasn't been yet*/
        !            63:   phrtsd(rndseed,&seed1,&seed2);
        !            64:   setall(seed1,seed2);
1.1       albertel   65: 
1.6     ! albertel   66:   /* assign_id_list and assign_pts_list exist in capaGrammerDef.y */
        !            67:   p.id_list=NULL;
        !            68:   p.pts_list=NULL;
        !            69: 
        !            70:   if (type == ANSWER_IS_FORMULA) {
        !            71:     p.id_list=id_list;
        !            72:     p.pts_list=parse_pts_list(pts_list);
        !            73:   }
1.2       albertel   74:   p.ans_type   = type;
                     75:   p.answer     = correct;
                     76:   p.tol_type   = tol_type;
                     77:   p.tolerance  = tolerance;
                     78:   p.sig_lbound = sig_lbound;
                     79:   p.sig_ubound = sig_ubound;
                     80:   strncpy(p.ans_fmt,ans_fmt,ANSWER_STRING_LENG-1);
1.5       albertel   81:   if (unit_str[0]!='\0') {
                     82:     strncpy(p.unit_str,unit_str,ANSWER_STRING_LENG-1);
                     83:     p.ans_unit   = u_parse_unit(unit_str);
                     84:   } else {
                     85:     p.unit_str[0]='\0';
                     86:     p.ans_unit=NULL;
                     87:   }
1.2       albertel   88:   p.calc       = calc;
1.1       albertel   89: 
                     90: 
                     91:   result=capa_check_answer(&p,response,&error);
                     92: 
                     93:   if (error!=NULL) {free(error);}
                     94: 
                     95:   return result;
                     96: }

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