static const char *pname;
static char *finame;
static FILE *fi;
-static int verbose=0,tree=0;
+static int verbose=0,tree=0,doaverage=0;
static char *formtotal=DEF_FORMTOTAL;
static char buf[LINE_MAX];
static int line=0;
static enum { SORT_NO,SORT_TIMETOT,SORT_STORES } sortby=SORT_TIMETOT;
+static unsigned lifetime_days=0;
static void usage(void)
{
-s, --stores\t\tSort the result by stores count\n\
-T, --timetot\t\tSort the result by total time (default)\n\
-t, --tree\t\tOrganize data as hierarchy tree\n\
+ -a, --average\t\tDisplay all times as average-per-day value\n\
-c, --condition\tDefine condition variable\n\
-f, --formtotal\tFormat \"Total\" column (\"text *val/val:width text\")\n\
-r, --rule\t\tAdd to the end of .rc file this rule (':'->'\\t')\n\
{"stores" ,0,0,'s'},
{"timetot" ,0,0,'T'},
{"tree" ,0,0,'t'},
+{"average" ,0,0,'a'},
{"condition",1,0,'c'},
{"formtotal",1,0,'f'},
{"rule" ,1,0,'r'},
static int dumpaction(const struct action *action)
{
-int tot FAKEUSE,mins FAKEUSE,hours FAKEUSE,days FAKEUSE,origtot;
+int tot,mins FAKEUSE,hours FAKEUSE,days FAKEUSE,origtot;
char *s,fmt[]="%?d";
if (action) {
tot=(action->timetot+30)/60;
+ if (doaverage && lifetime_days)
+ tot/=lifetime_days;
mins=tot; hours=mins/60; days=hours/24;
mins%=60; hours%=24;
- origtot=tot;
}
- else origtot=0;
+ else tot=0;
+ origtot=tot;
for (s=formtotal;*s;s++)
switch (*s) {
case '*': case '/': {
else origtot++;
}
if (action)
- printf("=%02d/%02d:%02d\t%4d\t%s\n",days,hours,mins,
+ printf("=%03d/%02d:%02d %4d\t%s\n",days,hours,mins,
action->stores,action->what);
return(origtot);
}
int totalwidth=dumpaction(NULL);
while (totalwidth-->5) putchar(' ');
- puts("Total Da Hr Mi\tStor\tDescription");
+ puts("Total Day Hr Mi Stor\tDescription");
if (!(sorta=malloc(sizeof(*sorta)*hashtable_tot))) {
fprintf(ERRH1"malloc() of %d pointers"ERRNO1,ERRH2,hashtable_tot,ERRNO2);
exit(EXIT_FAILURE);
int hour,min,sec;
pname=argv[0];
- while ((optc=getopt_long(argc,argv,"b:pw:qusTtc:f:r:vhV",longopts,NULL))!=EOF) switch (optc) {
+ while ((optc=getopt_long(argc,argv,"b:pw:qusTtac:f:r:vhV",longopts,NULL))!=EOF) switch (optc) {
case 'u':
sortby=SORT_NO;
case 't':
tree=1;
break;
+ case 'a':
+ doaverage=1;
+ break;
case 'c':
if (iscondition(optarg))
fprintf(ERRH1"Condition \"%s\" already set!\n",ERRH2,optarg);
#undef WANTED
basetime=t;
store(MARK_DAY,0);
+ lifetime_days++;
continue;
}