Subversion Repositories wimsdev

Rev

Rev 12287 | Rev 17255 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 12287 Rev 13168
Line 70... Line 70...
70
  }
70
  }
71
  if(t1<1 || t1>99 || t2<1 || t2>99) goto bad;
71
  if(t1<1 || t1>99 || t2<1 || t2>99) goto bad;
72
  snprintf(ps,sizeof(ps),"%s_examt%dt%d",p,t1,t2);
72
  snprintf(ps,sizeof(ps),"%s_examt%dt%d",p,t1,t2);
73
  isexam=1; setsesdir(ps); force_setvar("wims_isexam","1");
73
  isexam=1; setsesdir(ps); force_setvar("wims_isexam","1");
74
  force_setvar(ro_name[ro_session],ps);
74
  force_setvar(ro_name[ro_session],ps);
75
/* get exam setup data */
75
  /* get exam setup data */
76
  accessfile(cbuf,"r","%s/%s/examdata.%d", session_dir,pb,t1);
76
  accessfile(cbuf,"r","%s/%s/examdata.%d", session_dir,pb,t1);
77
  if(cbuf[0]==0) goto bad;
77
  if(cbuf[0]==0) goto bad;
78
  p=find_word_start(cbuf); p2=find_word_end(p); if(*p2) *p2++=0;
78
  p=find_word_start(cbuf); p2=find_word_end(p); if(*p2) *p2++=0;
79
  duration=atoi(p)*60; if(duration==0) goto bad;
79
  duration=atoi(p)*60; if(duration==0) goto bad;
80
  if(*p2) prime=atof(p2); else prime=0;
80
  if(*p2) prime=atof(p2); else prime=0;
81
  if (strstr(ps,parent_dir_string)!=NULL) user_error("wrong_session");
81
  if (strstr(ps,parent_dir_string)!=NULL) user_error("wrong_session");
82
/* Whether the exercise is already done */
82
  /* Whether the exercise is already done */
83
  p=getvar(ro_name[ro_cmd]); if(p!=NULL) {
83
  p=getvar(ro_name[ro_cmd]); if(p!=NULL) {
84
    if(strcmp(p,"getins")==0 || strcmp(p,"getframe")==0) goto skipped;
84
    if(strcmp(p,"getins")==0 || strcmp(p,"getframe")==0) goto skipped;
85
  }
85
  }
86
  exam_currscore(t1);
86
  exam_currscore(t1);
87
  if(exam_scoredata[t2-1]!=-1000) {
87
  if(exam_scoredata[t2-1]!=-1000) {
88
    snprintf(dbuf,sizeof(dbuf),"%.1f",exam_scoredata[t2-1]);
88
    snprintf(dbuf,sizeof(dbuf),"%.1f",exam_scoredata[t2-1]);
89
    setvar("wims_exo_lastscore",dbuf);
89
    setvar("wims_exo_lastscore",dbuf);
90
/* Do we need to erase subsession? */
90
    /* Do we need to erase subsession? */
91
    user_error("exam_exo_finished");
91
    user_error("exam_exo_finished");
92
  }
92
  }
93
  skipped:
93
  skipped:
94
  snprintf(session_prefix,sizeof(session_prefix),"%s/%s",session_dir,ps);
94
  snprintf(session_prefix,sizeof(session_prefix),"%s/%s",session_dir,ps);
95
  snprintf(vbuf,sizeof(vbuf),"%s/var",session_prefix);
95
  snprintf(vbuf,sizeof(vbuf),"%s/var",session_prefix);
Line 124... Line 124...
124
    direct_datafile=0;
124
    direct_datafile=0;
125
    if(buf[0][0]==0) goto bad;
125
    if(buf[0][0]==0) goto bad;
126
    fnd_line(buf[0],4,buf[1]);
126
    fnd_line(buf[0],4,buf[1]);
127
    if(buf[1][0]!=0) { /* dependencies */
127
    if(buf[1][0]!=0) { /* dependencies */
128
      if(!exam_depcheck(buf[1],t1)) {
128
      if(!exam_depcheck(buf[1],t1)) {
129
 
-
 
130
        user_error("exam_dep");
129
        user_error("exam_dep");
131
      }
130
      }
132
    }
131
    }
133
    fnd_line(buf[0],2,buf[1]); if(buf[1][0]==0) goto bad;
132
    fnd_line(buf[0],2,buf[1]); if(buf[1][0]==0) goto bad;
134
    calc_randitem(buf[1]);
133
    calc_randitem(buf[1]);
Line 147... Line 146...
147
    fnd_line(buf[0],1,buf[1]); if(buf[1][0]==0) goto bad2;
146
    fnd_line(buf[0],1,buf[1]); if(buf[1][0]==0) goto bad2;
148
    force_setvar(ro_name[ro_module],buf[1]);
147
    force_setvar(ro_name[ro_module],buf[1]);
149
    fnd_line(buf[0],2,eparm); /* if(eparm[0]==0) goto bad2; */
148
    fnd_line(buf[0],2,eparm); /* if(eparm[0]==0) goto bad2; */
150
    exam_parm();
149
    exam_parm();
151
  }
150
  }
152
/* Register start time */
151
  /* Register start time */
153
  snprintf(vbuf,sizeof(vbuf),"%s/%s/examreg.%d",
152
  snprintf(vbuf,sizeof(vbuf),"%s/%s/examreg.%d",
154
        session_dir,pb,t1);
153
        session_dir,pb,t1);
155
  if(stat(vbuf,&st)==0) { /* reg exists */
154
  if(stat(vbuf,&st)==0) { /* reg exists */
156
    char tbuf[MAX_LINELEN+1];
155
    char tbuf[MAX_LINELEN+1];
157
    struct utimbuf ut;
156
    struct utimbuf ut;
158
    accessfile(tbuf,"r",vbuf); start=atoi(tbuf);
157
    accessfile(tbuf,"r",vbuf); start=atoi(tbuf);
159
    if(start<=nowtime-duration) {
158
    if(start<=nowtime-duration) {
160
      user_error("expired_exam"); return;
159
      user_error("expired_exam"); return;
161
  }
160
    }
162
/* refresh session times */
161
    /* refresh session times */
163
      ut.actime=ut.modtime=nowtime;
162
    ut.actime=ut.modtime=nowtime;
164
      utime(mkfname(NULL,"%s/%s",session_dir,pb),&ut);
163
    utime(mkfname(NULL,"%s/%s",session_dir,pb),&ut);
165
  }
164
  }
166
  else { /* First time call: register starting time */
165
  else { /* First time call: register starting time */
167
    char *pu, *p1, tbuf[MAX_LINELEN+1];
166
    char *pu, *p1, tbuf[MAX_LINELEN+1];
168
    snprintf(dbuf,sizeof(dbuf),"%u",(unsigned int) nowtime);
167
    snprintf(dbuf,sizeof(dbuf),"%u",(unsigned int) nowtime);
169
    accessfile(dbuf,"w","%s",vbuf); start=nowtime;
168
    accessfile(dbuf,"w","%s",vbuf); start=nowtime;
Line 216... Line 215...
216
  if(*p) prime=atof(p); else prime=0;
215
  if(*p) prime=atof(p); else prime=0;
217
  exam_currscore(sh);
216
  exam_currscore(sh);
218
  snprintf(buf,sizeof(buf),"%s/%s/exams/.exam%d",class_base,cl,sh);
217
  snprintf(buf,sizeof(buf),"%s/%s/exams/.exam%d",class_base,cl,sh);
219
  direct_datafile=1;
218
  direct_datafile=1;
220
  excnt=datafile_recordnum(buf);
219
  excnt=datafile_recordnum(buf);
-
 
220
  w=sc=0;
221
  w=sc=0; for(i=0;i<excnt;i++) {
221
  for(i=0;i<excnt;i++) {
222
    sbuf[0]=0; datafile_fnd_record(buf,i+1,sbuf);
222
    sbuf[0]=0; datafile_fnd_record(buf,i+1,sbuf);
223
    p1=find_word_start(sbuf); *find_word_end(p1)=0;
223
    p1=find_word_start(sbuf); *find_word_end(p1)=0;
224
    ww=atof(p1); if(ww<=0) continue;
224
    ww=atof(p1); if(ww<=0) continue;
225
    w+=ww; if(exam_scoredata[i]>-1000) sc+=exam_scoredata[i]*ww;
225
    w+=ww; if(exam_scoredata[i]>-1000) sc+=exam_scoredata[i]*ww;
226
  }
226
  }