Subversion Repositories wimsdev

Rev

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

Rev 7642 Rev 8254
Line 18... Line 18...
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
#include "../wimsdef.h"
23
 
24
 
24
#define MAX_EXO        64
-
 
25
#define MAX_SHEET      64
-
 
26
#define MAX_EXAM       32
25
#define MAX_EXAMS       32
27
#define MAX_SCORE      512*1024
26
#define MAX_SCORE      512*1024
28
 
27
 
29
typedef struct {
28
typedef struct {
30
    short int dure,score;
29
    short int dure,score;
31
    long int next;
30
    long int next;
32
} scoredata;
31
} statscoredata;
33
scoredata scores[MAX_SCORE];
32
statscoredata scores[MAX_SCORE];
34
int sccnt=0;
33
int sccnt=0;
35
 
34
 
36
typedef struct {
35
typedef struct {
37
    int newcnt,scorecnt,lasttime,firstscore,lastscore;
36
    int newcnt,scorecnt,lasttime,firstscore,lastscore;
38
    char lastnew[12];
37
    char lastnew[12];
39
} exodata;
38
} statexodata;
40
exodata shdata[MAX_SHEET*MAX_EXO],examdata[MAX_EXAM*MAX_EXO];
39
statexodata shdata[MAX_SHEETS*MAX_EXOS],examdata[MAX_EXAMS*MAX_EXOS];
41
 
40
 
42
/* cid: combined index of difficulty */
41
/* cid: combined index of difficulty */
43
double scsum, scavg, scdeviat, scmin, scmax, cid;
42
double scsum, scavg, scdeviat, scmin, scmax, cid;
44
double dursum, duravg, durdeviat, durmin, durmax;
43
double dursum, duravg, durdeviat, durmin, durmax;
45
double best[10];
44
double best[10];
Line 58... Line 57...
58
 
57
 
59
void oneline(char *p, char *typ)
58
void oneline(char *p, char *typ)
60
{
59
{
61
    int i, sh, ex, t;
60
    int i, sh, ex, t;
62
    char *data[64];
61
    char *data[64];
63
    exodata *tab;
62
    statexodata *tab;
64
    char *pp, *pe;
63
    char *pp, *pe;
65
    for(i=0, pp=find_word_start(p); i<9  && *pp; pp=find_word_start(pe),i++) {
64
    for(i=0, pp=find_word_start(p); i<9  && *pp; pp=find_word_start(pe),i++) {
66
      pe=find_word_end(pp); if(*pe) *pe++=0;
65
      pe=find_word_end(pp); if(*pe) *pe++=0;
67
      data[i]=pp;
66
      data[i]=pp;
68
    }
67
    }
69
    if(i<6) return;
68
    if(i<6) return;
70
    sh=atoi(data[2]); ex=atoi(data[3]);
69
    sh=atoi(data[2]); ex=atoi(data[3]);
71
    if(sh<=0 || ex<=0 || ex>MAX_EXO || strlen(data[1])>10) return;
70
    if(sh<=0 || ex<=0 || ex>MAX_EXOS || strlen(data[1])>10) return;
72
    if(data[0][0]=='E') {
71
    if(data[0][0]=='E') {
73
      tab=examdata; data[0]++; if(sh>MAX_EXAM) return;
72
      tab=examdata; data[0]++; if(sh>MAX_EXAMS) return;
74
    }
73
    }
75
    else {
74
    else {
76
      tab=shdata; if(sh>MAX_SHEET) return;
75
      tab=shdata; if(sh>MAX_SHEETS) return;
77
    }
76
    }
78
    tab+=(sh-1)*MAX_EXO+(ex-1);
77
    tab+=(sh-1)*MAX_EXOS+(ex-1);
79
    t=str2time(data[0]); if(t==-1) return;
78
    t=str2time(data[0]); if(t==-1) return;
80
    if(strstr(data[4],"new")!=NULL) {
79
    if(strstr(data[4],"new")!=NULL) {
81
      if(strcmp(typ,"score")==0 &&
80
      if(strcmp(typ,"score")==0 &&
82
        ((i > 6 && strcmp(data[6],"noscore")==0) || (i > 7 && strcmp(data[7],"noscore")==0)
81
        ((i > 6 && strcmp(data[6],"noscore")==0) || (i > 7 && strcmp(data[7],"noscore")==0)
83
            || (i > 8 && strcmp(data[8],"noscore")==0))){ return; }
82
            || (i > 8 && strcmp(data[8],"noscore")==0))){ return; }
Line 182... Line 181...
182
      u2=find_word_end(u1); if(*u2) *u2++=0;
181
      u2=find_word_end(u1); if(*u2) *u2++=0;
183
      oneuser(dirname, u1);
182
      oneuser(dirname, u1);
184
  }
183
  }
185
}
184
}
186
 
185
 
187
void stati(exodata *dat)
186
void stati(statexodata *dat)
188
{
187
{
189
    int i,j;
188
    int i,j;
190
    double s,d;
189
    double s,d;
191
 
190
 
192
    scsum=scavg=scdeviat=dursum=duravg=durdeviat=cid=0;
191
    scsum=scavg=scdeviat=dursum=duravg=durdeviat=cid=0;
Line 229... Line 228...
229
  switch(flag) {
228
  switch(flag) {
230
     case 0: printf(":S %2d %2d %4d %4d \
229
     case 0: printf(":S %2d %2d %4d %4d \
231
%4.0f %4.0f %5.2f %5.2f \
230
%4.0f %4.0f %5.2f %5.2f \
232
%5.2f %4.1f %5.2f %5.1f \
231
%5.2f %4.1f %5.2f %5.1f \
233
%5.2f %5.2f %4.1f\n",
232
%5.2f %5.2f %4.1f\n",
234
             i/MAX_EXO+1,i%MAX_EXO+1,
233
             i/MAX_EXOS+1,i%MAX_EXOS+1,
235
             shdata[i].newcnt, shdata[i].scorecnt,
234
             shdata[i].newcnt, shdata[i].scorecnt,
236
             scsum, dursum,
235
             scsum, dursum,
237
             scavg, duravg,
236
             scavg, duravg,
238
             scmin,durmin,scmax,durmax,
237
             scmin,durmin,scmax,durmax,
239
             scdeviat, durdeviat,
238
             scdeviat, durdeviat,
240
             cid); break;
239
             cid); break;
241
     case 1: printf("%d_%d=%d,%d,\
240
     case 1: printf("%d_%d=%d,%d,\
242
%.0f,%.0f,%.2f,%.2f,\
241
%.0f,%.0f,%.2f,%.2f,\
243
%.2f,%.1f,%.2f,%.1f,\
242
%.2f,%.1f,%.2f,%.1f,\
244
%.2f,%.2f,%.1f;",
243
%.2f,%.2f,%.1f;",
245
             i/MAX_EXO+1,i%MAX_EXO+1,
244
             i/MAX_EXOS+1,i%MAX_EXOS+1,
246
             shdata[i].newcnt, shdata[i].scorecnt,
245
             shdata[i].newcnt, shdata[i].scorecnt,
247
             scsum, dursum,
246
             scsum, dursum,
248
             scavg, duravg,
247
             scavg, duravg,
249
             scmin,durmin,scmax,durmax,
248
             scmin,durmin,scmax,durmax,
250
             scdeviat, durdeviat,
249
             scdeviat, durdeviat,
Line 261... Line 260...
261
      stati(examdata+i);
260
      stati(examdata+i);
262
      printf(":E %2d %2d %4d %4d \
261
      printf(":E %2d %2d %4d %4d \
263
%4.0f %4.0f %5.2f %5.2f \
262
%4.0f %4.0f %5.2f %5.2f \
264
%5.2f %4.1f %5.2f %5.1f \
263
%5.2f %4.1f %5.2f %5.1f \
265
%5.2f %5.2f %4.1f\n",
264
%5.2f %5.2f %4.1f\n",
266
             i/MAX_EXO+1,i%MAX_EXO+1,
265
             i/MAX_EXOS+1,i%MAX_EXOS+1,
267
             examdata[i].newcnt, examdata[i].scorecnt,
266
             examdata[i].newcnt, examdata[i].scorecnt,
268
             scsum, dursum,
267
             scsum, dursum,
269
             scavg, duravg,
268
             scavg, duravg,
270
             scmin,durmin,scmax,durmax,
269
             scmin,durmin,scmax,durmax,
271
             scdeviat, durdeviat,
270
             scdeviat, durdeviat,
Line 273... Line 272...
273
}
272
}
274
 
273
 
275
void output(void)
274
void output(void)
276
{
275
{
277
    int i;
276
    int i;
278
    for(i=0;i<MAX_SHEET*MAX_EXO;i++) { outsheetexo(i, 0);}
277
    for(i=0;i<MAX_SHEETS*MAX_EXOS;i++) { outsheetexo(i, 0);}
279
    for(i=0;i<MAX_EXAM*MAX_EXO;i++) { outexamexo(i);}
278
    for(i=0;i<MAX_EXAMS*MAX_EXOS;i++) { outexamexo(i);}
280
}
279
}
281
 
280
 
282
int main()
281
int main()
283
{
282
{
284
    char cla[MAX_LINELEN+1], user[256];
283
    char cla[MAX_LINELEN+1], user[256];
Line 307... Line 306...
307
      multiuser(cla, user);
306
      multiuser(cla, user);
308
      sh=getenv("exostat_sheet");
307
      sh=getenv("exostat_sheet");
309
      if( sh==NULL || *sh==0 ) { output(); }
308
      if( sh==NULL || *sh==0 ) { output(); }
310
      else {
309
      else {
311
         int s=atoi(sh);
310
         int s=atoi(sh);
312
         s=(s-1)*MAX_EXO;
311
         s=(s-1)*MAX_EXOS;
313
         int i;
312
         int i;
314
         for(i=s;i < s + MAX_EXO;i++) {
313
         for(i=s;i < s + MAX_EXOS;i++) {
315
         outsheetexo(i, 1);
314
         outsheetexo(i, 1);
316
         }
315
         }
317
       };
316
       };
318
    }
317
    }
319
    return 0;
318
    return 0;