// .---------------.-----------------.
// | SKEL-10r v1.2 | 10 Day Reporter |
// `---------------^-----------------^

//**********************
//*****  Includes  *****
//**********************

#include <proto/all.h>
#include <stdio.h>

#include <string.h>
#include <skeleton/commas.h>
#include <tempest/Skel-Data.h>

//************************
//*****  Structures  *****
//************************

struct SKEL SKEL;

char *mon[]={ "Jan","Feb","Mar","Apr","May","Jun",
              "Jul","Aug","Sep","Oct","Nov","Dec" };

void main(int argc,char *argv[])
{
//************************
//*****  Variables  ******
//************************

 int  fd,i=1,j=0,NODES,Month,
      Calls=0,Messages=0,Busy=0,NewUsers=0,UL=0,DL=0;
 long ULKB=0L,DLKB=0L;
 char string[255],string1[255],Date[255],shit1[255],shit2[255],shit3[255];
 FILE *out2;

//***************************
//*****  Command Line  ******
//***************************

 sprintf(shit1,"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"");
 if (argc != 4)
  {
   PutStr("\n[m[1m    _______ _________\n");
   PutStr("   / ___/ [4m/[m[1m/ / ___/ /    [[32mSKEL-10R v3.27[m[1m] - [3mTen Day Report[m\n");
   PutStr("[1m  [4m/[m[1m__  /   _/ ___/ [4m/[m[1m__\n");
   PutStr("[1m [4m/[m[1m____[4m/[m[1m_/\\_[4m)[m[1m____[4m/[m[1m____/   For Tempest BBS - [Programmer: Michael Bockert]\n");
   PutStr(shit1);
   PutStr("\n[m   USAGE: SKEL-10R OutFile Nodes BBS:\n");
   PutStr(" EXAMPLE: SKEL-10R RAM:TEST 2 BBS:\n\n");
   PutStr("[OutFile] Path & Name of the created file\n");
   PutStr("  [Nodes] Number of Nodes\n");
   PutStr("   [BBS:] Path Node1 & Accounts.Data File\n\n");
   exit(0);
  }
 NODES = atoi(argv[2]);

//*********************************
//*****  Load Skel-Data.Data  *****
//*********************************

 sprintf(string,"%sSetup/Skel-Data.Data",argv[3]);
 fd=Open(string,MODE_OLDFILE);
 if(fd==0)
  {
   PutStr("\nSkel-Data.Data not found!\nRun Skel-Updater Util!\n");
   exit(0);
  }
 Read(fd,(char *)&SKEL, sizeof(struct SKEL));
 Close(fd);

//**********************
//*****  Averages  *****
//**********************

 i = 1;
 do
  {
   if(SKEL.HCalls[i] == 0)
    {
     i++;
     break;
    }
   Calls    += SKEL.HCalls[i];
   Messages += SKEL.HMessages[i];
   Busy     += SKEL.HBusy[i];
   NewUsers += SKEL.HNewUsers[i];
   UL       += SKEL.HUL[i];
   ULKB     += SKEL.HULKB[i];
   DL       += SKEL.HDL[i];
   DLKB     += SKEL.HDLKB[i];
   i++;
   j++;
  }
 while(i < 11);

 if(j>0)
  {
   if(Calls>0)    Calls    /= j;
   if(Messages>0) Messages /= j;
   if(Busy>0)     Busy     /= j;
   if(NewUsers>0) NewUsers /= j;
   if(UL>0)       UL       /= j;
   if(ULKB>0)     ULKB     /= j;
   if(DL>0)       DL       /= j;
   if(DLKB>0)     DLKB     /= j;
  }

//********************
//*****  Output  *****
//********************

 out2=fopen(argv[1],"w");
 if(out2==NULL)
  {
   PutStr("Error writing output file!\n");
   exit(0);
  }
 strcpy(shit2,".-------.------.----.------. .------.----------..------.----------.\n");
 strcpy(shit3,"`-------^------^----^------' `------^----------'`------^----------'");
 fprintf(out2,"\f~+                      [36m10 Day Report for [33m[ [0m%d[33m] [36mNode(s)\n",
                                                                                     NODES);
 fprintf(out2,"[34m%s\"\"\"\"\"\"\"\n",shit1);
 fprintf(out2,"[34m.--------.  %s",shit2);
 fprintf(out2,"[34m|  [33mDate  [34m|  | [33mCalls [34m| [33mMsgs [34m| [33mNU [34m| [33mMins [34m| | [33mUL's [34m| [33mUL'ed KB [34m|| [33mDL's [34m| [33mDL'ed KB [34m|\n");
 fprintf(out2,"[34m`--------'  %s\n",shit3);
 fprintf(out2,"[34m.--------.  %s",shit2);
 i=1;
 do
  {
   strmid(SKEL.HDate[i],string,3,2);
   Month = atoi(string);
   strcpy(string,mon[Month-1]);
   strmid(SKEL.HDate[i],string1,1,2);
   sprintf(Date,"%s %2s",string,string1);
   fprintf(out2,"[34m| [35m%s [34m|  | [36m%4d  [34m| [0m%4d [34m| [35m%2d [34m| [36m%4d [34m| | [32m%4d [34m| [31m%7s  [34m|| [32m%4d [34m| ",
           Date,SKEL.HCalls[i],SKEL.HMessages[i],SKEL.HNewUsers[i],SKEL.HBusy[i],SKEL.HUL[i],commas(SKEL.HULKB[i],buff),SKEL.HDL[i]);
   fprintf(out2,"[31m%7s  [34m|\n",
                commas(SKEL.HDLKB[i],buff));
   i++;
  }
 while(i < j+1);
 fprintf(out2,"[34m`--------'  %s\n",shit3);
 fprintf(out2,"[34m.----------.%s",shit2);
 fprintf(out2,"[34m| [33mAverages [34m|| [36m%4d  [34m| [0m%4d [34m| [35m%2d [34m| [36m%4d [34m| | [32m%4d [34m| [31m%7s  [34m|| [32m%4d [34m| ",
  Calls,Messages,NewUsers,Busy,UL,commas(ULKB,buff),DL);
 fprintf(out2,"[31m%7s  [34m|\n",
             commas(DLKB,buff));
 fprintf(out2,"[34m|----------||-------|------|----|------| |------|----------||------|----------|\n");
 fprintf(out2,"[34m| [33mRecords  [34m|| [36m%4d  [34m| [0m%4d [34m| [35m%2d [34m| [36m%4d [34m| | [32m%4d [34m| [31m%7s  [34m|| [32m%4d [34m| ",
  SKEL.RCalls,SKEL.RMessages,SKEL.RNewUsers,SKEL.RBusy,SKEL.RUL,commas(SKEL.RULKB,buff),SKEL.RDL);
 fprintf(out2,"[31m%7s  [34m|\n",
             commas(SKEL.RDLKB,buff));
 fprintf(out2,"[34m`----------'%s[0m~r\n",shit3);
 fclose(out2);
 PutStr("\nSKEL-10R Done!\n");
 exit(0);
}
