version 1.1, 1999/09/28 21:26:21
|
version 1.6, 2000/07/07 18:33:03
|
Line 1
|
Line 1
|
/* Copyright 1992-1997 Michigan State University, Board of Trustee */ |
/* main code that implements the capa login shell |
|
Copyright (C) 1992-2000 Michigan State University |
|
|
|
The CAPA system is free software; you can redistribute it and/or |
|
modify it under the terms of the GNU Library General Public License as |
|
published by the Free Software Foundation; either version 2 of the |
|
License, or (at your option) any later version. |
|
|
|
The CAPA system 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 |
|
Library General Public License for more details. |
|
|
|
You should have received a copy of the GNU Library General Public |
|
License along with the CAPA system; see the file COPYING. If not, |
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
Boston, MA 02111-1307, USA. |
|
|
|
As a special exception, you have permission to link this program |
|
with the TtH/TtM library and distribute executables, as long as you |
|
follow the requirements of the GNU GPL in regard to all of the |
|
software in the executable aside from TtH/TtM. |
|
*/ |
|
|
/* version 4.6 */ |
/* version 4.6 */ |
|
|
/* Jan 28 1997 I.T. */ |
/* Jan 28 1997 I.T. */ |
Line 777 int type;
|
Line 800 int type;
|
set_score, /* Score on a set */ |
set_score, /* Score on a set */ |
term_score=0, /* Total points received */ |
term_score=0, /* Total points received */ |
term_total=0, /* Total points possible */ |
term_total=0, /* Total points possible */ |
result; |
result, |
|
tot_num_sets=0; |
T_entry entry; /* Database entry for a set */ |
T_entry entry; /* Database entry for a set */ |
char buf[MAX_BUFFER_SIZE], buf2[MAX_BUFFER_SIZE]; |
char buf[MAX_BUFFER_SIZE], buf2[MAX_BUFFER_SIZE]; |
T_header header; /* Problem set header */ |
T_header header; /* Problem set header */ |
Line 796 int type;
|
Line 820 int type;
|
probs_in_set[0]= 0; |
probs_in_set[0]= 0; |
for (set_idx=1; set_idx<=set; set_idx++) { |
for (set_idx=1; set_idx<=set; set_idx++) { |
if (capa_get_header(&header,set_idx)) return; |
if (capa_get_header(&header,set_idx)) return; |
|
if ( capa_check_date(CHECK_OPEN_DATE,student_number,*section,set_idx) < 0 ) |
|
continue; |
|
tot_num_sets++; |
capa_get_entry(&entry,student_number,set_idx); |
capa_get_entry(&entry,student_number,set_idx); |
sscanf(header.num_questions,"%d", &(probs_in_set[set_idx]) ); |
sscanf(header.num_questions,"%d", &(probs_in_set[set_idx]) ); |
start_at[set_idx] = start_at[set_idx-1]+2*(1+probs_in_set[set_idx-1]/50); |
start_at[set_idx] = start_at[set_idx-1]+2*(1+probs_in_set[set_idx-1]/50); |
Line 840 int type;
|
Line 867 int type;
|
|
|
/* SHOW TOTALS */ |
/* SHOW TOTALS */ |
/* if capalogin_show_summary_score is set to none don't show it */ |
/* if capalogin_show_summary_score is set to none don't show it */ |
sprintf(buf,"%d sets, total=%3d/%3d (%d%%)", set, term_score, term_total, |
if (term_total > 0 ) { |
100*term_score/term_total); |
sprintf(buf,"%d sets, total=%3d/%3d (%d%%)", tot_num_sets, term_score, term_total, |
|
100*term_score/term_total); |
|
} else { |
|
sprintf(buf,"%d sets, total=%3d/%3d", tot_num_sets, term_score, term_total); |
|
} |
result=read_capa_config("capalogin_show_summary_score",buf2); |
result=read_capa_config("capalogin_show_summary_score",buf2); |
if (result != 0 && result != -1) { |
if (result != 0 && result != -1) { |
if (strcasecmp(buf2,"none")==0) { |
if (strcasecmp(buf2,"none")==0) { |
Line 860 int type;
|
Line 891 int type;
|
/* don't show summary for set if inhibit response is set*/ |
/* don't show summary for set if inhibit response is set*/ |
inhibit_response=capa_check_option(OPTION_INHIBIT_RESPONSE,set_idx,*section); |
inhibit_response=capa_check_option(OPTION_INHIBIT_RESPONSE,set_idx,*section); |
if (inhibit_response > 0) continue; |
if (inhibit_response > 0) continue; |
|
if ( capa_check_date(CHECK_OPEN_DATE,student_number,*section,set_idx) < 0 ) |
|
continue; |
set_score=0; |
set_score=0; |
set_start_line=line; |
set_start_line=line; |
/* Stop if not enough lines to summarize set */ |
/* Stop if not enough lines to summarize set */ |
Line 1124 print_unit_components(FILE *fp,Unit_t *t
|
Line 1156 print_unit_components(FILE *fp,Unit_t *t
|
} |
} |
|
|
|
|
#define ANSWER_STRING_LENG 64 |
/*#define ANSWER_STRING_LENG 64*/ |
#define UNIT_STRING_LENG 64 |
#define UNIT_STRING_LENG 64 |
#define FORMAT_STRING_LENG 32 |
#define FORMAT_STRING_LENG 32 |
|
|
Line 1133 int give_response(Problem_t *p,char **a
|
Line 1165 int give_response(Problem_t *p,char **a
|
{ |
{ |
int can_answer; |
int can_answer; |
char tmp_str[MAX_BUFFER_SIZE], *c_answer_str; |
char tmp_str[MAX_BUFFER_SIZE], *c_answer_str; |
|
char *error=NULL; |
|
|
|
switch( capa_check_answers(p,a,cnt,&error) ) { |
switch( capa_check_answers(p,a,cnt) ) { |
|
|
|
case EXACT_ANS: move(A_ROW,S_COL); clrtoeol(); |
case EXACT_ANS: move(A_ROW,S_COL); clrtoeol(); |
mvaddstr(A_ROW,S_COL,"*Yes Computer gets:"); |
mvaddstr(A_ROW,S_COL,"*Yes Computer gets:"); |
Line 1163 int give_response(Problem_t *p,char **a
|
Line 1195 int give_response(Problem_t *p,char **a
|
*log_char='Y'; can_answer=NAY; |
*log_char='Y'; can_answer=NAY; |
if(*tried < TRY_BOUND) (*tried)++; |
if(*tried < TRY_BOUND) (*tried)++; |
break; |
break; |
|
case WANTED_NUMERIC: move(S_ROW,S_COL); clrtoeol(); |
|
mvaddstr(S_ROW,S_COL,"*Enter a Number Ans"); |
|
*log_char='S'; can_answer=YAK; |
|
break; |
case SIG_FAIL: move(S_ROW,S_COL); clrtoeol(); |
case SIG_FAIL: move(S_ROW,S_COL); clrtoeol(); |
mvaddstr(S_ROW,S_COL,"*Adjust Sig. Figs. "); |
mvaddstr(S_ROW,S_COL,"*Adjust Sig. Figs. "); |
*log_char='S'; can_answer=YAK; |
*log_char='S'; can_answer=YAK; |
|
capa_mfree(error); |
break; |
break; |
case UNIT_FAIL: move(S_ROW,S_COL); clrtoeol(); |
case UNIT_FAIL: move(S_ROW,S_COL); clrtoeol(); |
mvaddstr(S_ROW,S_COL,"*Units incorrect "); |
mvaddstr(S_ROW,S_COL,"*Units incorrect "); |
*log_char='U'; can_answer=YAK; |
*log_char='U'; can_answer=YAK; |
|
capa_mfree(error); |
break; |
break; |
case UNIT_NOTNEEDED: move(S_ROW,S_COL); clrtoeol(); |
case UNIT_NOTNEEDED: move(S_ROW,S_COL); clrtoeol(); |
mvaddstr(S_ROW,S_COL,"*Only a number required"); |
mvaddstr(S_ROW,S_COL,"*Only a number required"); |
*log_char='U'; can_answer=YAK; |
*log_char='U'; can_answer=YAK; |
|
capa_mfree(error); |
break; |
break; |
case NO_UNIT: move(S_ROW,S_COL); clrtoeol(); |
case NO_UNIT: move(S_ROW,S_COL); clrtoeol(); |
mvaddstr(S_ROW,S_COL,"*Units required "); |
mvaddstr(S_ROW,S_COL,"*Units required "); |
Line 1218 int give_inhibited_response(Problem_t *
|
Line 1257 int give_inhibited_response(Problem_t *
|
{ |
{ |
int can_answer; |
int can_answer; |
char tmp_str[MAX_BUFFER_SIZE]; |
char tmp_str[MAX_BUFFER_SIZE]; |
|
char *error=NULL; |
|
|
|
switch( capa_check_answers(p,a,cnt,&error) ) { |
switch( capa_check_answers(p,a,cnt) ) { |
|
|
|
|
|
case EXACT_ANS: *log_char='Y'; break; |
case EXACT_ANS: *log_char='Y'; break; |
case APPROX_ANS: *log_char='Y'; break; |
case APPROX_ANS: *log_char='Y'; break; |
case SIG_FAIL: *log_char='S'; break; |
case SIG_FAIL: *log_char='S'; capa_mfree(error); break; |
case UNIT_FAIL: *log_char='U'; break; |
case UNIT_FAIL: *log_char='U'; capa_mfree(error); break; |
case UNIT_NOTNEEDED: *log_char='U'; break; |
case UNIT_NOTNEEDED: *log_char='U'; capa_mfree(error); break; |
case NO_UNIT: *log_char='u'; break; |
case NO_UNIT: *log_char='u'; break; |
case BAD_FORMULA:*log_char='F'; break; |
case BAD_FORMULA:*log_char='F'; break; |
case INCORRECT: *log_char='N'; break; |
case INCORRECT: *log_char='N'; break; |
|
case WANTED_NUMERIC: *log_char='s'; break; |
case ANS_CNT_NOT_MATCH: *log_char='C'; break; |
case ANS_CNT_NOT_MATCH: *log_char='C'; break; |
} |
} |
|
|
Line 1856 int *section;
|
Line 1896 int *section;
|
mvaddstr(X_ROW,H_COL,":H = Show Hint"); |
mvaddstr(X_ROW,H_COL,":H = Show Hint"); |
} |
} |
switch(log_char) { |
switch(log_char) { |
case 'U': case 'u': case 'S': |
case 'U': case 'u': case 'S': case 'F': |
entry.answers[num]='N'; break; |
entry.answers[num]='N'; break; |
case 'Y': allow_hint=1; mvaddstr(X_ROW,H_COL,":H = Show Hint"); /* fall through here */ |
case 'Y': allow_hint=1; mvaddstr(X_ROW,H_COL,":H = Show Hint"); /* fall through here */ |
default: entry.answers[num]=log_char; break; |
default: entry.answers[num]=log_char; break; |