Diff for /capa/capa51/pProj/capalogin.c between versions 1.1 and 1.10

version 1.1, 1999/09/28 21:26:21 version 1.10, 2000/10/10 20:03:23
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 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
      General Public License for more details.
   
      You should have received a copy of the GNU 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 741  char *log_string; Line 764  char *log_string;
    tmtime=localtime(&t);     tmtime=localtime(&t);
    strftime(timeStr,FILE_NAME_LENGTH,"%d/%m %X",tmtime);     strftime(timeStr,FILE_NAME_LENGTH,"%d/%m %X",tmtime);
    /*ct[ strlen(ct)-1 ]=0;*/ /* Trash newline */     /*ct[ strlen(ct)-1 ]=0;*/ /* Trash newline */
    protect_log_string(log_string);     /*protect_log_string(log_string);*/
    fprintf(fp,"%s\t%s\t%s\n",student_number,timeStr,log_string); fflush(fp);     fprintf(fp,"%s\t%s\t%s\n",student_number,timeStr,log_string); fflush(fp);
    fclose(fp);     fclose(fp);
    return (0);     return (0);
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 1549  int   *section; Line 1589  int   *section;
 int    prob;  int    prob;
 {  {
   int i,length;    int i,length;
   char date_str[DATE_LENGTH];    char date_str[DATE_LENGTH],*tmp;
   char **sbuf_pp,answer[(EDIT_HEIGHT*(EDIT_WIDTH+1))+1];    char **sbuf_pp,answer[(EDIT_HEIGHT*(EDIT_WIDTH+1))+1];
   char submissions_str[(EDIT_HEIGHT*(EDIT_WIDTH+1))+MAX_BUFFER_SIZE];    char submissions_str[(EDIT_HEIGHT*(EDIT_WIDTH+1))+MAX_BUFFER_SIZE];
   time_t     curtime;    time_t     curtime;
Line 1575  int    prob; Line 1615  int    prob;
     capa_mfree((char *)sbuf_pp[i]);      capa_mfree((char *)sbuf_pp[i]);
   }    }
   capa_set_subjective(set,prob,student_number,answer);    capa_set_subjective(set,prob,student_number,answer);
   sprintf(submissions_str,"%d\t%s\t",prob,answer);    tmp=strsave(answer);
     protect_log_string(tmp);
     sprintf(submissions_str,"%d\t%s\t",prob,tmp);
     capa_mfree(tmp);
   log_submissions(student_number,set,submissions_str);    log_submissions(student_number,set,submissions_str);
   capa_mfree((char *)sbuf_pp);    capa_mfree((char *)sbuf_pp);
   return 1;    return 1;
Line 1615  int   *section; Line 1658  int   *section;
    T_entry    entry;     T_entry    entry;
    char       answer[256], *a_str, **ans_strs;     char       answer[256], *a_str, **ans_strs;
    int        num, offset, num_questions, start_from, leng;     int        num, offset, num_questions, start_from, leng;
    char      *log_string,submissions_str[MAX_BUFFER_SIZE];     char      *log_string,submissions_str[MAX_BUFFER_SIZE],*tmp;
    int       *tried,answered;     int       *tried,answered;
    int        scr_idx=1, display=1, second_scr, canAnswer;     int        scr_idx=1, display=1, second_scr, canAnswer;
    int        usr_command, whereto, allow_hint=0, ex=0;     int        usr_command, whereto, allow_hint=0, ex=0;
Line 1820  int   *section; Line 1863  int   *section;
   if ( is_all_ws(ans_strs[0]) )  break;    if ( is_all_ws(ans_strs[0]) )  break;
   trim_response_ws(ans_strs[0]);    trim_response_ws(ans_strs[0]);
  }   }
    tmp=strsave(a_str);
  sprintf(submissions_str,"%d\t%s\t",num+1,a_str);   protect_log_string(tmp);
    sprintf(submissions_str,"%d\t%s\t",num+1,tmp);
    capa_mfree(tmp);
  log_submissions(student_number,set,submissions_str);   log_submissions(student_number,set,submissions_str);
   
  {   {
Line 1856  int   *section; Line 1901  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;
Line 1870  int   *section; Line 1915  int   *section;
                 /* ------------------------------ check due date */                  /* ------------------------------ check due date */
                 time(&curtime);                  time(&curtime);
                 /* ===> if (compare_datetime(curtime,header.due_date) > 0) { */                  /* ===> if (compare_datetime(curtime,header.due_date) > 0) { */
   #ifndef NO_DATE_CHECK
                 if( capa_check_date(CHECK_DUE_DATE,student_number,*section,set) > 0 ) {                  if( capa_check_date(CHECK_DUE_DATE,student_number,*section,set) > 0 ) {
                   capa_get_date(CHECK_DUE_DATE,student_number,*section,set,date_str);                    capa_get_date(CHECK_DUE_DATE,student_number,*section,set,date_str);
                   sprintf(answer,"Sorry, the due date was: %s",date_str);                    sprintf(answer,"Sorry, the due date was: %s",date_str);
                   move(20,1); clrtobot(); addstr(answer); mypause(23,1);                    move(20,1); clrtobot(); addstr(answer); mypause(23,1);
                 } else {                  } else
   #endif
                   {
                   capa_set_entry(&entry,student_number,set,offset);                    capa_set_entry(&entry,student_number,set,offset);
                 }                  }
               } break;                } break;
Line 2389  void print_version() Line 2437  void print_version()
 {  {
   printf("capalogin\n");    printf("capalogin\n");
   printf("       CAPA version %s, %s\n",CAPA_VER,COMPILE_DATE);    printf("       CAPA version %s, %s\n",CAPA_VER,COMPILE_DATE);
     printf("       CAPA is released under the GNU GPL v2 see COPYING for details.\n");
 }  }
   
 /* ------------------------------------------------------------------------- */  /* ------------------------------------------------------------------------- */

Removed from v.1.1  
changed lines
  Added in v.1.10


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