version 1.1.1.1, 1999/09/28 21:26:21
|
version 1.7, 2000/02/09 22:10:24
|
Line 46 capa_excuse(int set,int prob,int secti
|
Line 46 capa_excuse(int set,int prob,int secti
|
/* Calculate parameters */ |
/* Calculate parameters */ |
if (capa_get_header(&header,set)) return (-1); |
if (capa_get_header(&header,set)) return (-1); |
sscanf(header.num_questions,"%d", &nq); |
sscanf(header.num_questions,"%d", &nq); |
capa_mfree(header.weight); |
|
capa_mfree(header.partial_credit); |
|
|
|
if( ( prob > nq ) || (section < 0 ) || (section > MAX_SECTION_COUNT) ) return (-1); |
if( ( prob > nq ) || (section < 0 ) || (section > MAX_SECTION_COUNT) ) return (-1); |
num_students= 0; |
num_students= 0; |
Line 57 capa_excuse(int set,int prob,int secti
|
Line 55 capa_excuse(int set,int prob,int secti
|
offset = capa_get_entry(&entry,tmp_number,set); |
offset = capa_get_entry(&entry,tmp_number,set); |
if(offset < 0 ) offset = -offset; |
if(offset < 0 ) offset = -offset; |
switch(entry.answers[prob-1]) { |
switch(entry.answers[prob-1]) { |
|
case '0': |
case '-': entry.answers[prob-1] = 'E'; break; |
case '-': entry.answers[prob-1] = 'E'; break; |
case 'N': entry.answers[prob-1] = 'E'; break; |
case 'N': entry.answers[prob-1] = 'E'; break; |
case 'n': entry.answers[prob-1] = 'e'; break; |
case 'n': entry.answers[prob-1] = 'e'; break; |
|
case '1': case '2': case '3': case '4': case '5': |
|
case '6': case '7': case '8': case '9': |
|
if (entry.answers[prob-1] < header.weight[prob-1]) { |
|
entry.answers[prob-1] = 'E'; |
|
} |
|
break; |
default : break; |
default : break; |
} |
} |
capa_set_entry(&entry,tmp_number,set,offset); |
capa_set_entry(&entry,tmp_number,set,offset); |
capa_mfree(entry.answers); entry.answers = NULL; |
capa_mfree(entry.answers); entry.answers = NULL; |
capa_mfree(entry.tries); entry.tries = NULL; |
capa_mfree(entry.tries); entry.tries = NULL; |
} |
} |
|
capa_mfree(header.weight); |
|
capa_mfree(header.partial_credit); |
free_students(student_p); |
free_students(student_p); |
return (0); |
return (0); |
} |
} |
Line 322 long offset;
|
Line 329 long offset;
|
/* entry->answers*3 == entry->tries, + fudge factor*/ |
/* entry->answers*3 == entry->tries, + fudge factor*/ |
a_line=capa_malloc(strlen(entry->tries)*5+MAX_STUDENT_NUMBER,1); |
a_line=capa_malloc(strlen(entry->tries)*5+MAX_STUDENT_NUMBER,1); |
sprintf(a_line,"%s %s,%s\n",entry->student_number,entry->answers,entry->tries); |
sprintf(a_line,"%s %s,%s\n",entry->student_number,entry->answers,entry->tries); |
|
printf("Setting:%s\n",a_line);/*TEST*/ |
new_len = strlen(a_line); |
new_len = strlen(a_line); |
sprintf(fmtbuf, "%%%dc",MAX_STUDENT_NUMBER); |
sprintf(fmtbuf, "%%%dc",MAX_STUDENT_NUMBER); |
flockstream(fp); /* <==== lock the setX.db file */ |
flockstream(fp); /* <==== lock the setX.db file */ |
Line 562 int set;
|
Line 570 int set;
|
} |
} |
funlockstream(fp); fclose(fp); |
funlockstream(fp); fclose(fp); |
if(!found) { |
if(!found) { |
ans_p = capa_malloc(nq+1,1); |
ans_p = capa_malloc(nq+2,1); |
tries_p = capa_malloc(3*nq+2,1); /* space and \0 */ |
tries_p = capa_malloc(3*nq+3,1); /* space and \0 */ |
for(ii=0;ii<nq;ii++) { /* Initialize answer string and tries string */ |
for(ii=0;ii<nq;ii++) { /* Initialize answer string and tries string */ |
ans_p[ii] = '-'; tries_p[3*ii] = ' '; tries_p[3*ii + 1] = '0'; |
ans_p[ii] = '-'; tries_p[3*ii] = ' '; tries_p[3*ii + 1] = '0'; |
if(ii < nq-1) tries_p[3*ii + 2] = ','; |
if(ii < nq-1) tries_p[3*ii + 2] = ','; |
Line 578 int set;
|
Line 586 int set;
|
comma=index(oneline,','); |
comma=index(oneline,','); |
length=((int)(comma-oneline))-(MAX_STUDENT_NUMBER+1); |
length=((int)(comma-oneline))-(MAX_STUDENT_NUMBER+1); |
if (length < nq) { |
if (length < nq) { |
ans_p = capa_malloc(nq+1,1); |
ans_p = capa_malloc(nq+2,1); |
tries_p = capa_malloc(3*nq+2,1); /* space and \0 */ |
tries_p = capa_malloc(3*nq+3,1); /* space and \0 */ |
} else { |
} else { |
ans_p = capa_malloc(length+1,1); |
ans_p = capa_malloc(length+2,1); |
tries_p = capa_malloc(3*length+2,1); /* space and \0 */ |
tries_p = capa_malloc(3*length+3,1); /* space and \0 */ |
} |
} |
sprintf(fmtbuf, "%%%dc",length); |
sprintf(fmtbuf, "%%%dc",length); |
sscanf(oneline + MAX_STUDENT_NUMBER+1,fmtbuf,ans_p); |
sscanf(oneline + MAX_STUDENT_NUMBER+1,fmtbuf,ans_p); |
|
ans_p[length]='\0'; |
sprintf(fmtbuf, "%%%dc",(3*length-1)); |
sprintf(fmtbuf, "%%%dc",(3*length-1)); |
sscanf(oneline + MAX_STUDENT_NUMBER+1+length+1,fmtbuf,tries_p); |
sscanf(oneline + MAX_STUDENT_NUMBER+1+length+1,fmtbuf,tries_p); |
|
tries_p[3*length-1]; |
entry->answers = ans_p; |
entry->answers = ans_p; |
entry->tries = tries_p; |
entry->tries = tries_p; |
entry->e_probs = nq; |
entry->e_probs = nq; |
Line 598 int set;
|
Line 608 int set;
|
} |
} |
ans_p[nq]='\0';tries_p[3*(nq)+2]='\0';tries_p[3*length-1]=','; |
ans_p[nq]='\0';tries_p[3*(nq)+2]='\0';tries_p[3*length-1]=','; |
} |
} |
|
printf("Got:%s:%s:\n",ans_p,tries_p);/*TEST*/ |
} |
} |
return (offset); |
return (offset); |
} |
} |
Line 1350 int capa_check_option(int option,int set
|
Line 1361 int capa_check_option(int option,int set
|
} |
} |
|
|
/*----------------------------------------------------------*/ |
/*----------------------------------------------------------*/ |
/* INPUT: set the X in logX.db */ |
/* INPUT: time the current time */ |
|
/* datetime the datetime string to compare */ |
/* OUTPUT: none */ |
/* OUTPUT: none */ |
/* */ |
/* */ |
/* RETURN: -1 file error */ |
/* RETURN: -1 time is earlier then datetime */ |
/* 0 no login */ |
/* 1 time is later than datetime */ |
/* >0 number of logins in that logX.db file */ |
|
/*----------------------------------------------------------*/ |
/*----------------------------------------------------------*/ |
int |
int |
compare_datetime(time,datetime) |
compare_datetime(time,datetime) |
Line 1384 char *datetime;
|
Line 1395 char *datetime;
|
/* What if: [7,3] date_info */ |
/* What if: [7,3] date_info */ |
/* [3,7] date_info */ |
/* [3,7] date_info */ |
/* 4 date_info */ |
/* 4 date_info */ |
|
/* RETURN: -1 if not pass time */ |
|
/* 1 if pass time (or no time available */ |
int capa_check_date(int which,char *student_number, int section,int set) |
int capa_check_date(int which,char *student_number, int section,int set) |
{ |
{ |
int result; |
int result; |
Line 2990 capa_check_ans(ai,ans) AnswerInfo_t *ai
|
Line 3002 capa_check_ans(ai,ans) AnswerInfo_t *ai
|
result = check_formula_ans(s,ans,ai->ans_id_list,ai->ans_pts_list,tt,to); |
result = check_formula_ans(s,ans,ai->ans_id_list,ai->ans_pts_list,tt,to); |
break; |
break; |
case ANSWER_IS_EXTERNAL: /* Not yet implemented */ |
case ANSWER_IS_EXTERNAL: /* Not yet implemented */ |
|
|
break; |
break; |
} |
} |
return (result); |
return (result); |
Line 3071 capa_check_answer(p, answer) Problem_t *
|
Line 3084 capa_check_answer(p, answer) Problem_t *
|
} |
} |
given = n_part * scale; /* convert the given answer into proper scale for units */ |
given = n_part * scale; /* convert the given answer into proper scale for units */ |
sig = calc_sig( input ); |
sig = calc_sig( input ); |
if( (sig < sig_l) || (sig > sig_u) ) { |
if( ((sig < sig_l) || (sig > sig_u)) && (sig!=0)) { |
result = SIG_FAIL; |
result = SIG_FAIL; |
} else { |
} else { |
switch( tol_type ) { |
switch( tol_type ) { |
Line 3143 capa_check_answer(p, answer) Problem_t *
|
Line 3156 capa_check_answer(p, answer) Problem_t *
|
result = check_formula_ans(correct,answer,p->id_list,p->pts_list,tol_type,tol); |
result = check_formula_ans(correct,answer,p->id_list,p->pts_list,tol_type,tol); |
break; |
break; |
case ANSWER_IS_EXTERNAL: /* not yet implemented */ |
case ANSWER_IS_EXTERNAL: /* not yet implemented */ |
|
/* we assume the external program is called through popen() */ |
|
/* and the result will be given back as 0 or 1 to indicate the */ |
|
/* given answer is correct or not */ |
|
/* arguments are given to the program as */ |
|
|
break; |
break; |
|
|
} |
} |
Line 3459 char *key_word;char *value;
|
Line 3477 char *key_word;char *value;
|
fclose(fp); |
fclose(fp); |
|
|
if (done) { |
if (done) { |
|
trim_response_ws(right); /*get rid of leading and trailing spaces*/ |
for(i=0,j=0;i<(strlen(right)+1);i++) { |
for(i=0,j=0;i<(strlen(right)+1);i++) { |
value[j]='\0'; |
value[j]='\0'; |
if (right[i] == '\\' && (i < (strlen(right))) ) { |
if (right[i] == '\\' && (i < (strlen(right))) ) { |