Subversion Repositories wimsdev

Rev

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

Rev 7158 Rev 7571
Line 14... Line 14...
14
 *  along with this program; if not, write to the Free Software
14
 *  along with this program; if not, write to the Free Software
15
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
15
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16
 */
16
 */
17
 
17
 
18
/* This is an internal program,
18
/* This is an internal program,
19
 * used to show statistics of frequentation, module by module.
19
 * used to show statistics of frequentation, module by module.
20
*/
20
*/
21
 
21
 
22
#include "../Lib/libwims.h"
22
#include "../Lib/libwims.h"
23
 
23
 
24
#define MAX_EXO        64
24
#define MAX_EXO        64
Line 42... Line 42...
42
/* cid: combined index of difficulty */
42
/* cid: combined index of difficulty */
43
double scsum, scavg, scdeviat, scmin, scmax, cid;
43
double scsum, scavg, scdeviat, scmin, scmax, cid;
44
double dursum, duravg, durdeviat, durmin, durmax;
44
double dursum, duravg, durdeviat, durmin, durmax;
45
 
45
 
46
int filecnt=0, fcind;
46
int filecnt=0, fcind;
47
char *dirbase, types[256];
47
char *dirbase, *sdata;
48
 
48
 
49
int str2time(char *p)
49
int str2time(char *p)
50
{
50
{
51
    int sec,min,hr;
51
    int sec,min,hr;
52
    sec=atoi(p+15); p[14]=0;
52
    sec=atoi(p+15); p[14]=0;
Line 119... Line 119...
119
void onedir(char *dirname)
119
void onedir(char *dirname)
120
{
120
{
121
    char buf[MAX_LINELEN+1], buf2[MAX_LINELEN+1];
121
    char buf[MAX_LINELEN+1], buf2[MAX_LINELEN+1];
122
    DIR *dir;
122
    DIR *dir;
123
    struct dirent *ff;
123
    struct dirent *ff;
124
    char *t1, *t2;
124
    char *t1, *t2, types[256];
125
 
-
 
-
 
125
    snprintf(types,sizeof(types),"%s",sdata);
126
    for(t1=find_word_start(types); *t1; t1=find_word_start(t2)) {
126
    for(t1=find_word_start(types); *t1; t1=find_word_start(t2)) {
127
      t2=find_word_end(t1); if(*t2) *t2++=0;
127
      t2=find_word_end(t1); if(*t2) *t2++=0;
128
      snprintf(buf,sizeof(buf),"%s/%s/%s",dirbase,dirname,t1);
128
      snprintf(buf,sizeof(buf),"%s/%s/%s",dirbase,dirname,t1);
129
      dir=opendir(buf); if(dir==NULL) return;
129
      dir=opendir(buf); if(dir==NULL) return;
130
      while((ff=readdir(dir))!=NULL) {
130
      while((ff=readdir(dir))!=NULL) {
Line 163... Line 163...
163
      }
163
      }
164
      scdeviat=sqrt(scdeviat/i); durdeviat=sqrt(durdeviat/i);
164
      scdeviat=sqrt(scdeviat/i); durdeviat=sqrt(durdeviat/i);
165
    }
165
    }
166
}
166
}
167
 
167
 
168
      /* Output line format:
168
/* Output line format:
169
       * type sh exo newcnt scorecnt scsum dursum scavg duravg scmin durmin scmax durmax scdeviat durdeviat cid*/
169
 * type sh exo newcnt scorecnt scsum dursum scavg duravg scmin durmin scmax durmax scdeviat durdeviat cid
-
 
170
 */
170
void output(void)
171
void output(void)
171
{
172
{
172
    int i;
173
    int i;
173
    for(i=0;i<MAX_SHEET*MAX_EXO;i++) {
174
    for(i=0;i<MAX_SHEET*MAX_EXO;i++) {
174
      if(shdata[i].newcnt<=0) continue;
175
      if(shdata[i].newcnt<=0) continue;
Line 177... Line 178...
177
%4.0f %4.0f %5.2f %5.2f \
178
%4.0f %4.0f %5.2f %5.2f \
178
%5.2f %4.1f %5.2f %5.1f \
179
%5.2f %4.1f %5.2f %5.1f \
179
%5.2f %5.2f %4.1f\n",
180
%5.2f %5.2f %4.1f\n",
180
             i/MAX_EXO+1,i%MAX_EXO+1,
181
             i/MAX_EXO+1,i%MAX_EXO+1,
181
             shdata[i].newcnt, shdata[i].scorecnt,
182
             shdata[i].newcnt, shdata[i].scorecnt,
182
             scsum, dursum,
183
             scsum, dursum,
183
             scavg, duravg,
184
             scavg, duravg,
184
             scmin,durmin,scmax,durmax,
185
             scmin,durmin,scmax,durmax,
185
             scdeviat, durdeviat,
186
             scdeviat, durdeviat,
186
             cid);
187
             cid);
187
    }
188
    }
188
    for(i=0;i<MAX_EXAM*MAX_EXO;i++) {
189
    for(i=0;i<MAX_EXAM*MAX_EXO;i++) {
Line 204... Line 205...
204
 
205
 
205
int main()
206
int main()
206
{
207
{
207
    char cla[MAX_LINELEN+1];
208
    char cla[MAX_LINELEN+1];
208
    char *c1, *c2;
209
    char *c1, *c2;
209
    char *sdata, *cdata;
210
    char *cdata;
210
 
211
 
211
    memset(shdata,0,sizeof(shdata)); memset(examdata,0,sizeof(examdata));
212
    memset(shdata,0,sizeof(shdata)); memset(examdata,0,sizeof(examdata));
212
    dirbase=getenv("exostat_dirbase");
213
    dirbase=getenv("exostat_dirbase");
213
    if(dirbase==NULL || *dirbase==0) dirbase="../log/classes";
214
    if(dirbase==NULL || *dirbase==0) dirbase="../log/classes";
214
    sdata=getenv("exostat_types");
215
    sdata=getenv("exostat_types");
215
    if(sdata==NULL || *sdata==0) sdata="score noscore";
216
    if(sdata==NULL || *sdata==0) sdata="score noscore";
216
    cdata=getenv("exostat_classes");
217
    cdata=getenv("exostat_classes");
217
    if(cdata==NULL || *cdata==0) cdata=getenv("w_wims_class");
218
    if(cdata==NULL || *cdata==0) cdata=getenv("w_wims_class");
218
    if(cdata==NULL || *cdata==0) return -1;
219
    if(cdata==NULL || *cdata==0) return -1;
219
    snprintf(types,sizeof(types),"%s",sdata);
-
 
220
    snprintf(cla,sizeof(cla),"%s",cdata);
220
    snprintf(cla,sizeof(cla),"%s",cdata);
221
    for(c1=cla; *c1; c1++) if(!isalnum(*c1) && *c1!='/') *c1=' ';
221
    for(c1=cla; *c1; c1++) if(!isalnum(*c1) && *c1!='/') *c1=' ';
222
    for(c1=find_word_start(cla); *c1; c1=find_word_start(c2)) {
222
    for(c1=find_word_start(cla); *c1; c1=find_word_start(c2)) {
223
      c2=find_word_end(c1); if(*c2) *c2++=0;
223
      c2=find_word_end(c1); if(*c2) *c2++=0;
224
      onedir(c1);
224
      onedir(c1);