#include <stdio.h>
#include <libraries/dosextens.h>
#include <exec/memory.h>

int handle1, handle2, dummy=0, nbtrans;
int prn=0, days, lday=0, nday,last=0;
long pfile1=0L,pfile2=0L,filesize2;
char line1[80],line2[80];
char sday[2],smonth[2],syear[2],shour[8];
char name[80];
int time,tot,half;
int disp=0;
float cash=0,today=0;
int status; /* 0:Normal 1:Connect */

int findtax(char bbs[80]);
int otime();
void test();
void findday();
long FileSize(char fname[]);
void vtime(int stime);
void vtaxe(int stime);

void main(argc,argv)
int argc;
char *argv[];
{
   long filesize1;
   char logfile[81],taxfile[81];

   printf("\n       Jr-Comm 1.02 Swiss Phone Taxe Watcher v1.0");
   printf("\n                  by David Schweikert\n");
   if(*argv[1]=='N' || *argv[1]=='n') disp=1;
   filesize1=FileSize("JRCOMM:jrcomm.log");
   if(filesize1==-1)
   {
      printf(" Can't find JRCOMM:jrcomm.log !\n  Please enter logfile name : ");
      do {
         scanf("%s",logfile);
         filesize1=FileSize(logfile);
         if(filesize1==-1)
            printf(" Can't find %s !\n  Please enter logfile name : ",logfile);
      } while(filesize1==-1);
      handle1=open(logfile, 0, dummy);
   }
   else
      handle1=open("JRCOMM:jrcomm.log", 0, dummy);
   filesize2=FileSize("JRCOMM:jrs.taxes");
   if(filesize2==-1)
   {
      printf(" Can't find JRCOMM:jrs.taxes !\n  Please enter jrs-taxes file name : ");
      do {
         scanf("%s",taxfile);
         filesize2=FileSize(taxfile);
         if(filesize2==-1)
            printf(" Can't find %s !\n  Please enter jrs-taxes file name : ",taxfile);
      } while(filesize2==-1);
      handle2=open(taxfile, 2, dummy);
   }
   else
      handle2=open("JRCOMM:jrs.taxes", 0, dummy);
		if(disp==0)
printf("\n -----DAY------  --HOUR--  ---------BBS-------  -TIME  TAXE  -PRICE-\n\n");
   do {
      lseek(handle1, pfile1, 0);
      nbtrans = read(handle1,line1,80);
      for(prn=0;line1[prn]!='\n';prn++)
         ;
      prn++;
       pfile1+=prn;
      if(line1[20]=='D' && line1[21]=='i' && line1[22]=='s' && line1[23]=='c')
         test();
      else if(line1[20]=='J' && line1[21]=='R' && line1[22]=='-' && line1[23]=='C')
         test();
      else if(line1[20]=='Z' && line1[22]=='d' && line1[23]=='/' && line1[24]=='l')
         ; /* Not Yet Implemented ! */
      else if(line1[20]=='Z' && line1[22]=='u' && line1[23]=='/' && line1[24]=='l')
         ; /* Not Yet Implemented ! */
      else if(line1[20]=='H' && line1[21]=='a' && line1[22]=='n' && line1[23]=='g')
         ;
      else {
         for (prn=0;line1[prn+20]!=':';prn++)
            name[prn]=line1[prn+20];
         sday[0]  =line1[3]; sday[1]  =line1[4];
         smonth[0]=line1[0]; smonth[1]=line1[1];
         syear[0] =line1[6]; syear[1] =line1[7];
         shour[0]=line1[9]; shour[1]=line1[10]; shour[2]=line1[11];
         shour[3]=line1[12]; shour[4]=line1[13]; shour[5]=line1[14];
         shour[6]=line1[15]; shour[7]=line1[16];
         name[prn]='\0';
         status=1;
         time=ora();
      }
   } while(pfile1<filesize1);
   days=nday-lday;
   printf("                                                                                ");
   printf("         Today : %.2f Fr.\n",today);
	printf("           %d Days : %.2f Fr.",days,cash);
   printf("\n        ");
	disp=0;
   vtime(tot);
   printf(" minutes online.\n          %5.2f Fr. each day",cash/days);
   printf(" : %.2f Fr. for a month !\n\n",cash/days*30.0);
   close(handle1);
   close(handle2);
}

int ora()
{
   int otime;
   otime =((line1[9]-48)*10+line1[10]-48)*3600;
   otime+=((line1[12]-48)*10+line1[13]-48)*60;
   otime+=((line1[15]-48)*10+line1[16]-48);
   return otime;
}

void test()
{
   int ttime;
   if (status==1)
   {
      ttime=ora();
      tot=tot+ttime-time;
      findday();
      if(disp==0)
			printf(" %-18s ",name);
      vtime(ttime-time);
      vtaxe(ttime-time);
      half=0;
      status=0;
   }
}

void vtime(int stime)
{
   int mins,secs;
   mins =stime/60;
   secs =stime-60*mins;
   if(disp==0)
		printf("%4d:%2d",mins,secs);
}

void vtaxe(int stime)
{
   float price;
   int taxe=0;
   taxe=findtax(name);
   if(disp==0)
		printf("   %2d",taxe);
   price=stime*taxe/6000.0;
   if(disp==0)
	{
		if(half==0)
   	   printf("  %5.2f Fr.\n",price);
   	else
   	   printf("* %5.2f Fr.\n",price);
	}
	today+=price;
	cash+=price;
}

int findtax(char bbs[80])
{
   char fname[80];
   int taxe=0;
   int semi;
   char ligne[81];
   int normal;
   int y=0;
   do {
      in:
      lseek(handle2, pfile2, 0);
      nbtrans = read(handle2,line2,80);
      for(prn=0;line2[prn]!='\n';prn++)
         ;
      prn++;
      pfile2+=prn;
      for (prn=0;line2[prn]!=':';prn++)
         fname[prn]=line2[prn];
      fname[prn]='\0';
      for(y=0;y<prn;y++)
      {
         if(fname[y]!=bbs[y])
            goto out1;
      }
         if( ( (time>=28800 && time<61200) || (time>=68400 && time<75600) ) && (half==0) )
         taxe=(line2[prn+1]-48)*10+line2[prn+2]-48;
      else
      {
         half=1;
         taxe=(line2[prn+4]-48)*10+line2[prn+5]-48;
      }
      goto out2;
   out1:
      ;
   } while(pfile2<filesize2);
   printf("\nPlease enter %s normal taxe :",bbs);
   scanf("%d",&normal);
   printf("Please enter %s semi   taxe :",bbs);
   scanf("%d",&semi);
   if(disp==0)
		printf("\r\v\v\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
   if(filesize2>6)
      lseek(handle2,0L,2);
   if(normal<=9)
      sprintf(ligne,"%s:0%1d",bbs,normal);
   else
      sprintf(ligne,"%s:%2d",bbs,normal);
   write(handle2,ligne,strlen(ligne));
   if(semi<=9)
      sprintf(ligne,":0%1d\n",semi);
   else
      sprintf(ligne,":%2d\n",semi);
   write(handle2,ligne,strlen(ligne));
   pfile2=0L;
   filesize2+=80;
   goto in;
   out2:
   pfile2=0L;
   return taxe;
}

long FileSize(char fname[])
{
   BPTR lock;
   struct FileInfoBlock *fileinfoblock;
   fileinfoblock = AllocMem(sizeof(struct FileInfoBlock),MEMF_CLEAR);

   lock=Lock(fname,ACCESS_READ);
   if(lock==NULL) return(-1);

   if(Examine(lock,fileinfoblock)==FALSE) return (-1);

   UnLock(lock);

   return (fileinfoblock->fib_Size);
}

void findday()
{
   int day,month,year;
   month=(line1[0]-48)*10+line1[1]-48;
   day  =(line1[3]-48)*10+line1[4]-48;
   year =(line1[6]-48)*10+line1[7]-48;
   switch(month) {
      case  1: nday=day; break;
      case  2: nday=day+31; break;
      case  3: nday=day+59; break;
      case  4: nday=day+90; break;
      case  5: nday=day+120; break;
      case  6: nday=day+151; break;
      case  7: nday=day+181; break;
      case  8: nday=day+212; break;
      case  9: nday=day+243; break;
      case 10: nday=day+273; break;
      case 11: nday=day+304; break;
      case 12: nday=day+334; break;
   }
   if(lday==0 || lday>nday)
      lday=nday;
	if(last<nday)
		today=0;
	if((nday+1)%7==0 || (nday+2)%7==0)
   {
      if(disp==0)
			printf(" %d * %.2s/%.2s/%.2s ",nday,sday,smonth,syear);
      half=1;
   }
   else
      if(disp==0)
			printf(" %d | %.2s/%.2s/%.2s ",nday,sday,smonth,syear);
   if(disp==0)
		printf(" %.8s ",shour);
	last=nday;
}


















