home *** CD-ROM | disk | FTP | other *** search
/ MACD 8 / MACD8.iso / polminet / miamilog / miamilog.l < prev    next >
Encoding:
Text File  |  1998-02-28  |  2.7 KB  |  133 lines

  1. D            [0-9]
  2. DATE            {D}{D}"."{D}{D}"."{D}{D}{D}{D}
  3. TIME            {D}{D}":"{D}{D}":"{D}{D}
  4.  
  5. %{
  6. #include <stdio.h>
  7. #include <time.h>
  8. #include <string.h>
  9.  
  10. #define IMPULSE_COST        0.22
  11.  
  12. #define MODE_OFFLINE        0
  13. #define MODE_ONLINE            1
  14. #define MODE_RECONNECT    2
  15.  
  16. int flag = MODE_OFFLINE;
  17.  
  18. struct Connection
  19. {
  20.     int bday, bmonth, byear;
  21.     int bhour, bminute, bsecond;
  22.  
  23.     int eday, emonth, eyear;
  24.     int ehour, eminute, esecond;
  25.  
  26.     int total;
  27.     int last;
  28.     int days[32];
  29.     int crashes;
  30.  
  31. } conex, *ctx = &conex;
  32.  
  33. %}
  34. %%
  35. "Offline:"    {
  36.             flag = MODE_OFFLINE;
  37.         }
  38.  
  39. "Online:"    {
  40.             /* two "Online"'s in a row mean that there
  41.              was a crash/reboot inbetween */
  42.  
  43.             if(flag == MODE_ONLINE)
  44.             {
  45.                 ctx->crashes++;
  46.                 ctx->total++;
  47.             }
  48.  
  49.             flag = MODE_ONLINE;
  50.         }
  51.  
  52. "Reconnect:"    {
  53.             flag = MODE_RECONNECT;
  54.         }
  55.  
  56. {DATE}        {
  57.             if(flag == MODE_ONLINE)
  58.                 sscanf(yytext,"%d.%d.%d", &ctx->bday, &ctx->bmonth, &ctx->byear);
  59.             else
  60.                 sscanf(yytext,"%d.%d.%d", &ctx->eday, &ctx->emonth, &ctx->eyear);
  61.         }
  62.  
  63. {TIME}        {
  64.             struct tm itm;
  65.             int start, end;
  66.  
  67.             if(flag == MODE_ONLINE)
  68.                 sscanf(yytext,"%d:%d:%d", &ctx->bhour, &ctx->bminute, &ctx->bsecond);
  69.             else
  70.             {
  71.                 sscanf(yytext,"%d:%d:%d", &ctx->ehour, &ctx->eminute, &ctx->esecond);
  72.  
  73.                 itm.tm_sec = ctx->bsecond;
  74.                 itm.tm_min = ctx->bminute;
  75.                 itm.tm_hour = ctx->bhour;
  76.                 itm.tm_mday = ctx->bday;
  77.                 itm.tm_mon = ctx->bmonth;
  78.                 itm.tm_year = ctx->byear;
  79.                 itm.tm_isdst = 0;
  80.  
  81.                 start = mktime(&itm);
  82.  
  83.                 itm.tm_sec = ctx->esecond;
  84.                 itm.tm_min = ctx->eminute;
  85.                 itm.tm_hour = ctx->ehour;
  86.                 itm.tm_mday = ctx->eday;
  87.                 itm.tm_mon = ctx->emonth;
  88.                 itm.tm_year = ctx->eyear;
  89.                 itm.tm_isdst = 0;
  90.  
  91.                 end = mktime(&itm);
  92.  
  93.                 ctx->last = (end - start + 20 + 179) / 180;
  94.                 ctx->days[ctx->bday] += ctx->last;
  95.                 ctx->total += ctx->last;
  96.             }
  97.         }
  98.  
  99. \n            {}
  100. .            { /* ignore bad characters */ }
  101.  
  102. %%
  103.  
  104. yywrap()
  105. {
  106.     return(1);
  107. }
  108.  
  109. main()
  110. {
  111.     int i, x;
  112.  
  113.     memset(ctx, 0, sizeof(struct Connection));
  114.     yylex();
  115.  
  116.     for(i = 1; i <= ctx->eday; i++)
  117.     {
  118.         printf("day %02ld: ", i);
  119.         for(x = 0; x < ctx->days[i]; x++)
  120.             printf("#");
  121.  
  122.         printf("\n");
  123.     }
  124.  
  125. /*    printf("\nOstatnie poîâczenie: %d impulsy (%.2f zî)\nOgóîem:\t%d impulsów\nCena:\t%.2f zî\nDziennie:\t%.2f zî\n", ctx->last, ctx->last * IMPULSE_COST, ctx->total, ctx->total * IMPULSE_COST, ctx->total * IMPULSE_COST / ctx->eday); */
  126.  
  127.     printf("\nLast connection: %d pulses (%.2f zl)\nSum:\t%ld pulses\nPrice:\t%.2f zl\nDaily:\t%.2f zl\n", ctx->last, ctx->last * IMPULSE_COST, ctx->total, ctx->total * IMPULSE_COST, ctx->total * IMPULSE_COST / ctx->eday);
  128.  
  129.     if(ctx->crashes)
  130.         printf("\nWARNING!!!\nThere %s %ld crash%s so the actual pulse count may be higher!\n", ctx->crashes == 1 ? "was" : "were", ctx->crashes, ctx->crashes == 1 ? "" : "es");
  131.  
  132. }
  133.