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 |
|
162 | ut.actime=ut.modtime=nowtime; |
164 |
|
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 |
|
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 | } |