#define deb 0
#define configDir "/opt/zeletronik/conf/"
#define comlogDir "/opt/zeletronik/log/"
#define reportlog "lin4leic_rep"
//#define raportDir "/var/log/letronik/"
//#define reportsDir "opt/zeletronik/reports/"
//rapotry poniwnny byc tworzone tam gdzie pliki zrodlowe
//#define timeFile "/media/zeletronik/time_"
//zeby nie wpisywac do logow co minute
#define demon 0  //1 program niemowa, 0 program wypisuje na konsoli
#define debug 1 //do debugowania
#define debugDir "/opt/zeletronik/log/"
#define programName "lin4leic_rep-0.5.1-20101025-1"
#define ramDir "/opt/zeletronik/ramdisk/" // sciezka do ramdysku
#define recMaxNum 1000 //dopuszczalna ilosc rekordow do wczytania.
#define max4    100 //maksymalna długość linii
/*
ISC License (ISCL)

Copyright (c) 2010.  Leszek Loboda - Zakład Elektroniczny Letronik.
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/



#include <stdlib.h>
#include <termios.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>

#include "leszekllib.c"

int runInt=1;//kontynuuj dzialanie jesli 1
static char *weekDays[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday", "Friday","Saturday" };
int dayNr=0,da,mo,ye, monthend,today,now;
int recNr=0;
int wday=0,wdayOld=0;
long int t, start=0, stop=0; //biezacy czas w sekundach
int verbose=0;// czy wyswietlac konunikaty do logu na ramdysku
int verboseB=0;//gadatliwosc blokowana logBlok
int logBlok=0;// jednorazowe wpisywanie do logu
int heading=1;// czy drukowac naglowki


char filename[250],filenameO[250],diskName[250], suffix[10],prefix[250],logname[100],tmpchar[250],recline[255],vlogName[250],tmpstr[250], ramName[250],monthFile[250],oldsum[10];
char raportDirV[100];
//vlogName na log tymczasowy w ramie
char confName[250];
long int startSec=0, stopSec=0;
int startMin,startHour, stopMin, stopHour,intoldsum;
char checksumChar[10];
int fd, i, j,n=0,nRec,m,num=0,numold=0,numOfRec=0,rekordIstnieje=0, bladSumy;
int przekret=0;
long int longN;
int rectimint;//odstep rekordow
char openHourCh[50];
long int openSec[2][7];

//nRec - ilosc recordow
int res=0,res1=0,res2=0,nbuf=0,nwait=0;//rezultat odczytu ilosc odczytanych znakow. nbuf - ilość odebranych buforow
int bladF=0,dayF, bladFR;//ilosc bledow fotokomorki
int bladC=0, dayC;//ilosc bledow komunikacji
unsigned int c;//bufor znaku;
char godzina[10];
//char godzinaV[10];//godzina z lub bez sekund
char dateday[40];

char rectim[10];
char ch;
char blady[50];//bufor tekstu bledow 
char buf[255];//bufor znakow
char lbuf[255];//sklejany bufor znakow
char anum[10];//bufor liczby
long int oldLinuxTime=0;
long int oldMin=0; //stare minuty
char char4line[max4];//linia pliku z 4
char charVar[20];
long int mum=0, delta=0, daynum=0,startnum=0,monthnum=0;
char errors[10];
char Y_M[8], Y_M_D[31][10];

struct inLin //linia recordu z lin4leic
{
char inTime[15];
long int inNum;
int inF;
int inC;
int inSum;

} inTab[recMaxNum];

struct outLin
{
char time[15];
long int stan;
long int wzrost;
long int dzis;
char blady[10];
int sum;
int ind;//odpowiedni nr wiersza tabeli wejsciowej txt
} oT[recMaxNum];

long int times[100];//wykaz czasow zapisu rekordow
//char fconfig[100];//nazwa pliku configuracji
FILE *flog,*fcom,*frec, *vlog, *fmon ,*tfile, *fcsv, *fram ,*fopen();


void rapMies(void)
{
//poczatek procedury rapMies-liczy od poczatku miesiaca od montheng
sscanf(dateday,"%4d%2d%2d",&ye,&mo,&monthend);
strncpy(Y_M,dateday,6);
Y_M[6]=0;
#if deb > 0
printf("Y_M=%s\n",Y_M);
#endif

strcpy(monthFile,prefix);
strcat(monthFile,"_");
strcat(monthFile,Y_M);
//strcat(monthFile,".");
strcat(monthFile,".csv");
nameBase(tmpchar,monthFile);
fmon=fopen(monthFile,"w");
fprintf(fmon,"Data;Wzrost;W miesiacu;Blady;Stan;Podpis;%s\n",tmpchar);
monthnum=0;
for (i=0;i<monthend;i++)
{//wdm wyliczanie dni miesiaca--mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
strcpy(Y_M_D[i],Y_M);//kopiuj rok miesiąc do pełnej daty
sprintf(tmpstr,"%02d",i+1);//kopiuj dzień do tmpstr
strcat(Y_M_D[i],tmpstr);//stwórz pełną datę
da=i+1;
sscanf(Y_M,"%4d%2d",&ye,&mo);//wyciąganie do stuletniego kalendarza

//super - wzor na stuletni kalendarz Christiana Zellera, poprawiony przez  Mike'a Keitha
wday=((da+=mo<3?ye--:ye-2,23*mo/9+da+4+ye/4-ye/100+ye/400)%7);
da=i+1;
#if deb > 0
printf("Y_M_D=%s, year=%d   da=%d mo=%d wday=%d %s\n",Y_M_D[i], ye, da, mo, wday,weekDays[wday]);
#endif
//przenosze ten nawias na koniec}


dayF=0;
dayC=0;
bladSumy=0;


//rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
//czytanie licznika

//poczatak petli minutowej

strcpy(filenameO,prefix);
strcat(filenameO,"_");
strcat(filenameO,Y_M_D[i]);
strcat(filenameO,".");
strcat(filenameO,suffix);
#if deb > 0
printf("data biezada %s nazwa pliku zrodlowego %s\n",Y_M_D[i],filenameO);
#endif


//WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
//-------------------------glowne sterowanie czekaniem na wlasciwy czas---------------

{//odczytywanie godzin pracy

//(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7
//wday=weekday();
start=(openSec[0][wday]);
stop=(openSec[1][wday]);
if (stop == 24*60)//zeby nie przelatywalo przez 12.
stop--;
//sleep(1);
//t=(gettimesec())/60;
//printf("t=%ld\n",t);
//printf("\n%d",t % rectimint);
//gettime(godzina);
//flog=fopen(logname,"a");
//getdate('-',dateday);
//fprintf(flog,"\nstart=%d, stop=%d rectimint=%d t=%d\n",start,stop,rectimint,t);
//fclose(flog);
}

//tworzenie tabeli czasow rekordow

recNr=0;
if((today!=da)||(start<now))
if((start % rectimint)!=0)
{//wpisywanie godziny startu jezeli nie jest podzielna przez odstep

//times[recNr]=start;
sprintf(oT[recNr].time,"%02ld:%02ld",start/60,start%60);
recNr++;

}
n=0;
while(n < stop)
{
  if((today!=da)||(n<now))
if(n>start)
{

//times[recNr]=n;
sprintf(oT[recNr].time,"%02d:%02d",n/60,n%60);
recNr++;
}
n+=rectimint;
}

//if (times[recNr] != stop)
if((today!=da)||(stop<now))
{
sprintf(oT[recNr].time,"%02ld:%02ld",stop/60,stop%60);
//times[recNr]=stop;
recNr++;
}
numOfRec=recNr;
#if deb > 0
printf("\nrekordow  %d start=%ld stop=%ld\n",recNr, start,stop);
#endif
for(n=0;n<numOfRec; n++)
{//tpd tworzenie pustego dnia w tabeli oT

oT[n].stan=-1;
oT[n].wzrost=0;
oT[n].dzis=0;
strcpy(oT[n].blady,"K");
sprintf(tmpstr,"%s;%ld;%ld;%s;%ld",oT[n].time,oT[n].wzrost,oT[n].dzis,oT[n].blady,oT[n].stan);
oT[n].sum=checksumll(tmpstr);
sprintf(tmpchar,"0x%X",oT[n].sum);
oT[n].ind=-1;//nie bylo odpowieniego rekordu w pliku wejsciowym.


#if deb > 0
printf("%s;%s\n",tmpstr,tmpchar);
#endif


}//tworzenie pustego dnia w tabeli oT
/*
struct inLin //linia recordu z lin4leic
{
char inTime[15];
long int inNum;
int inF;
int inC;
int inSum;

} inTab[recN];
*/


//wpt wczytywanie pliku txt

nRec=0;
#if deb > 0
printf("nazwa pliku zrodlowego %s\n",filenameO);
#endif
nameBreak(diskName,suffix,filenameO);
strcat(diskName,".csv");
if(nameBase(tmpchar,diskName))
{
#if deb > 0
printf("nazwa=%s nazwaBazowa=%s\n",prefix, tmpchar);
#endif
strcpy(ramName,ramDir);
strcat(ramName,tmpchar);
#if deb > 0
printf("nazwaRam=%s\n",ramName);
#endif
}
else
{
#if deb > 0
printf("blad nazwy bazowej\n");
#endif

vlog=fopen(vlogName,"a");
fprintf(vlog,"blad nazwy bazowej z nazwy %s\n",filenameO);
fclose(vlog);
}

//fcsv=fopen(prefix,"w");
fram=fopen(ramName,"w");
if(fram == NULL)
{
vlog=fopen(vlogName,"a");
fprintf(vlog,"blad otwarcia pliku %s\n",ramName);
fclose(vlog);
}
#if deb > 0
printf("blad otwarcia pliku %s\n",ramName);
printf("\r\nGodzina;Wzrost;Dzis;Bledy;Stan;Podpis;%s\r\n",tmpchar);
#endif
fprintf(fram,"Godzina;Wzrost;Dzis;Bledy;Stan;Podpis;%s\r\n",tmpchar);
if( frec = fopen(filenameO, "r"))
{//wpt
//for(n=0;n<100;n++)
//cpt
#if deb > 0
printf("\n");
printf("Data %s. Raport dla wejścia:\n%s\n",dateday,filenameO);
#endif
recNr=0;
while(fgetline(frec,char4line,max4))//wez linię z pliku dziennego txt
if(char4line[0] != '#')
{//wlpt wczytywanie linii pliku tekstowego
#if deb > 0
printf("%s\n",char4line);
#endif
//wycinanie godziny.
n=0;
while(char4line[n]!=';' && char4line[n]!='\n'&& char4line[n]!=EOF)
{
inTab[recNr].inTime[n]=char4line[n];
n++;
}





//sscanf((inTab[recNr].inTime),"%d:%d",&startHour, &startMin);//wycinanie czasu
//printf("%2d:%02d\n", startHour,startMin);
//wycinanie liczby
#if deb > 1
printf("godzina %s\n",inTab[recNr].inTime);
#endif
//printf("nastepny znak = %c\n",char4line[n]);
n++;
m=0;
while(char4line[n]!=';' && char4line[n]!='\n'&& char4line[n]!=EOF)
{
charVar[m]=char4line[n];
n++;
m++;
}
charVar[m]=0;
#if deb > 1
printf("stan %s\n",charVar);
#endif
sscanf(charVar,"%ld",&inTab[recNr].inNum);
#if deb > 1
printf("stan ls = %06ld\n",inTab[recNr].inNum);
#endif

//wycinanie bladF
//printf("nastepny znak = %c\n",char4line[n]);
n++;
m=0;
while(char4line[n]!=';' && char4line[n]!='\n'&& char4line[n]!=EOF)
{
charVar[m]=char4line[n];
n++;
m++;
}
charVar[m]=0;
#if deb > 1
printf("bladF %s\n",charVar);
#endif
sscanf(charVar,"%d",&inTab[recNr].inF);
#if deb > 1
printf("stan ls = %2d\n",inTab[recNr].inF);
#endif
//wycinanie bladC
//printf("nastepny znak = %c\n",char4line[n]);
n++;
m=0;
while(char4line[n]!=';' && char4line[n]!='\n'&& char4line[n]!=EOF)
{
charVar[m]=char4line[n];
n++;
m++;
}
charVar[m]=0;
#if deb > 1
printf("bladC %s\n",charVar);
#endif
sscanf(charVar,"%d",&inTab[recNr].inC);
#if deb > 1
printf("stan ls = %2d\n",inTab[recNr].inC);
#endif
//wycinanie sumy kontrolnej
//printf("nastepny znak = %c\n",char4line[n]);
n++;
m=0;
while(char4line[n]!=';' && char4line[n]!='\n'&& char4line[n]!=EOF)
{
charVar[m]=char4line[n];
n++;
m++;
}
charVar[m]=0;
sscanf(charVar,"%X",&inTab[recNr].inSum);
#if deb > 1
printf("suma kontrolna %s;0x%04X\n",charVar,inTab[recNr].inSum);
#endif
strncpy(charVar,char4line,18);
charVar[18]=0;
#if deb > 1
printf("linia do sumy %s\n",charVar);
printf("wyliczona suma 0x%4X\n",checksumll(charVar));
#endif
//inTab[recNr].inTime[n]=0;

//sscanf(char4line,"%5c;%ld",inTab[recNr].inDate, &inTab[recNr].inNum);
//inTab[recNr].inDate[5]=0;

recNr++;

}
//wlpt
fclose(frec);

#if deb > 0
for(n=0;n<recNr;n++)
printf("%s;%6ld;%d;%d;0x%04X\n",inTab[n].inTime,inTab[n].inNum,inTab[n].inF,inTab[n].inC,inTab[n].inSum);
#endif
n=0;

//printf("%s;%6ld;%6ld;     ;%6ld;\n",inTab[n].inTime,0,0,inTab[n].inNum);
//printf("%06ld\n",inTab[n].inNum);

daynum=0;
startnum=-1;//stan licznika  na poczatku dnia
przekret=0;
//if(recNr != numOfRec)
	dayC=0;
for(j=0;j<numOfRec;j++)//przemiatanie tabeli csv
{//prot przemiatanie rekordów oT
rekordIstnieje=0;
for(n=0;n<recNr;n++)//przemiatanie tabeli txt
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
//porownywanie godzin w rekordach
if(strcmp(inTab[n].inTime,oT[j].time)==0)
{//rgz rowne godziny znaleziono
rekordIstnieje=1;
#if deb > 1
printf("zarejestrowano o godzinie = %s\n",oT[j].time);
#endif
oT[j].ind=n;//parowanie rekordów inTab/oT
//szukanie stanu poczatkowego dnia
if(startnum<0)
if(inTab[n].inNum>=0)
startnum=inTab[n].inNum;


oT[j].stan=inTab[n].inNum;
strcpy(oT[j].blady,"");


if(inTab[n].inC)
{
strcat(oT[j].blady,"K");
dayC++;
#if deb > 0
printf("bo bylo inC dayC = %d\n", dayC);
#endif
}
//else
//dayC=0;

if(inTab[n].inF)
{
	strcat(oT[j].blady,"F");
	dayF=1;
}

if((n>0)&&(inTab[n-1].inNum>=0)&&(inTab[n].inNum>=0))
{

oT[j].wzrost=inTab[n].inNum-inTab[n-1].inNum;
if(oT[j].wzrost<-990000) 
{
oT[j].wzrost+=1000000;
przekret=1;
}


if(startnum>=0)
oT[j].dzis=oT[j].stan-startnum;
if(przekret)
	oT[j].dzis+=1000000;
}



longN=oT[j].stan;
}
//rgz
//printf("%s;%6ld;%d;%d;0x%04X\n",inTab[n].inTime,inTab[n].inNum,inTab[n].inF,inTab[n].inC,inTab[n].inSum);
if(rekordIstnieje==0)
{
  dayC++;
  #if deb > 0
printf("bo rekord nie istnieje dayC = %d\n", dayC);
#endif
  
}
}
//prot przemiatanie rekordów oT
//if(recNr != numOfRec)
//	dayC=1;

//uzupełnianie odwiedzin jeżeli nie ma odpowienich rekordół w pliku źródłowym.
for(n=1;n<numOfRec;n++)
if (oT[n].dzis<oT[n-1].dzis)
oT[n].dzis=oT[n-1].dzis;


if(start != stop)
for(n=0;n<numOfRec; n++)//po recordach cvs
  //for(n=0;n<recNr; n++)
  
{


//oT[n].wzrost=0;
//oT[n].dzis=0;
j=oT[n].ind;
if(j>=0)
{
sprintf(tmpstr,"%s;%6ld;%2d;%2d",inTab[j].inTime,inTab[j].inNum,inTab[j].inF,inTab[j].inC);
intoldsum=checksumll(tmpstr);
sprintf(oldsum,"0X%X",intoldsum);
}


sprintf(tmpstr,"%s;%ld;%ld;%s;%ld",oT[n].time,oT[n].wzrost,oT[n].dzis,oT[n].blady,oT[n].stan);
daynum=oT[n].dzis;


oT[n].sum=checksumll(tmpstr);

sprintf(tmpchar,"0x%X",oT[n].sum);
if(j>=0)
if(intoldsum !=inTab[j].inSum)
//SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
{
strcpy(tmpchar,"0X0000");
bladSumy=1;
#if deb > 0
printf("bladSumy\n");
#endif
}

#if deb > 0
printf("%s;%s;%s;%d\r\n",tmpstr,tmpchar,oldsum,dayC);
#endif

fprintf(fram,"%s;%s\r\n",tmpstr,tmpchar);

}
fclose(fram);


	}//jest plik









//wpt
else
{//nie było pliku txt
vlog=fopen(vlogName,"a");
//getdate('-',dateday);
fprintf(vlog,"nie udalo sie otworzyc pliku %s\n", filenameO);
fclose(vlog);
daynum=0;
dayC=1;
dayF=0;
longN=-1;

//zapisywanie pustego pliku csv jak nie było pliku txt
if(start != stop)
for(n=0;n<numOfRec; n++)//po recordach cvs
  //for(n=0;n<recNr; n++)
  
{//zppc


//oT[n].wzrost=0;
//oT[n].dzis=0;


sprintf(tmpstr,"%s;%ld;%ld;%s;%ld",oT[n].time,oT[n].wzrost,oT[n].dzis,oT[n].blady,oT[n].stan);
daynum=oT[n].dzis;


oT[n].sum=checksumll(tmpstr);

sprintf(tmpchar,"0x%X",oT[n].sum);


#if deb > 0
printf("%s;%s;%s;%d\r\n",tmpstr,tmpchar,oldsum,dayC);
#endif

fprintf(fram,"%s;%s\r\n",tmpstr,tmpchar);

}//zppc
fclose(fram);



#if deb > 0
printf("dayC = %d\n", dayC);
#endif
}//nie było pliku txt

//kopiowanie raportu na dysk
if( fileExists (diskName) == 0)
{//nie ma pliku
if(n=filecopy(diskName, ramName)<1)
{
vlog=fopen(vlogName,"a");
fprintf(vlog,"blad kopiowania %s do %s = %d\n",ramName,diskName,n);
fclose(vlog);
}

}//nie ma pliku
else
	{//jest plik
n=filecmp(diskName, ramName);
#if deb > 0
printf("wynik porownania n=%d\n",n);
#endif
	if(n>0) 
{

if(n=filecopy(diskName, ramName)<1)
{
vlog=fopen(vlogName,"a");
fprintf(vlog,"blad kopiowania %s do %s = %d\n",ramName,diskName,n);
fclose(vlog);
}
}//kopiowanie raportu na dysk	
	}

strcpy(tmpchar,"");
if(start != stop)//jeżeli w tym dniu liczenie
{
//sprawdzanie bledow komunikacji w całej tabeli oT dla tego dnia - przerzucić do wpt

  



if(dayC)
	strcat(tmpchar,"K");
if(dayF)
	strcat(tmpchar,"F");

}
monthnum+=daynum;
sprintf(tmpstr,"%d;%ld;%ld;%s;%ld",da,daynum,monthnum,tmpchar,longN);
sprintf(tmpchar,"0x%X",checksumll(tmpstr));

if(bladSumy)
fprintf(fmon,"%s;0x000\n",tmpstr);  
else
fprintf(fmon,"%s;%s\n",tmpstr,tmpchar);
}//koniec wyliczania dni miesiąca
fclose(fmon);
}//koniec procedury rapMies




//MAIN()MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
int main(int argc, char *argv[])
{//main



//struct termios oldtio,newtio,oldstdtio,newstdtio,oldout;
//struct sigaction sa,sak;





//tworzenie nazwy PLIKU KONFIGURACYJNEGO
strcpy(tmpchar,argv[0]);
nameBase(tmpstr,tmpchar);
cpto_(tmpchar,tmpstr);

//----------------------tworzenie nazwy vlog
strcpy(vlogName,debugDir);
strcat(vlogName,tmpchar);
strcat(vlogName,"_rep.log");
//---------------------odczytywanie argumentu -vv
if (argc>1)
{
if (strcmp(argv[1],"-v")==0)
verbose=1;
else
{
if (strcmp(argv[1],"-vv")==0)
verbose=2;
else
verbose=3;//blad argumentu

}

}
//nameBreak(prefix,suffix,tmpchar);
strcpy(confName,configDir);
strcat(confName,tmpchar);
strcat(confName,".conf");
//wpis do logu i wymazanie starego logu
vlog=fopen(vlogName,"w");
getdate('-',dateday);
fprintf(vlog,"\n*****************************\n%s Wersja: %s nameBase %s cpto_ %s\n", dateday,programName,tmpstr,tmpchar, confName);
verboseB=verbose;//*(1-logBlok);

// konfiguracyjnego---KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK



n = confRead(confName,"entry", filename)> 0;
if(n)
{
if(verboseB)
fprintf(vlog,"Sciezka/nazwa pliku raportu = %s\n",filename);
}
else
{
fprintf(vlog,"Nie znaleziono nazwy pliku raportu 'entry' com w pliku %s", confName);
fclose(vlog);
goto error;
}
//wyrzucamy z konfiguracji czy zapisywać strumien wejsciowy

//if (confRead(confName,"comlog", yeslog)> 0)

//odczytywanie czasowy odstepu rekordow
n= confRead(confName,"recordtime", rectim)> 0;
if(n)
{
if(verboseB == 1)
fprintf(vlog,"Odstep czasowy rekordow = %s minut\n", rectim);
}
else
{
fprintf(vlog,"Nie znaleziono czasowego osdtepu rekordow 'recordtime' w pliku %s", confName);
fclose(vlog);
goto error;
}

//globalny czas otwarcia wejsc
n = (confRead(confName,"opentime", openHourCh)> 0);
if(n)
{
if(verboseB == 1)
fprintf(vlog,"Globalny czas otwarcia sklepu:  %s\n", openHourCh);
}
else
{

fprintf(vlog,"Nie znaleziono globarnego czasu otwarcia sklepu 'opentime' w pliku %s", confName);
fclose(vlog);
goto error;
}

//vlog=fopen(vlogName,"a");
if(sscanf(openHourCh,"%2d:%2d-%2d:%2d",&startHour, &startMin, &stopHour, &stopMin) !=4)
{
fprintf(vlog,"\nblad odczytu godzin otwarcia\n");
goto error;
}
else
if(verboseB)
fprintf(vlog,"zdekodowano globalne godziny pracy  %2d:%02d-%2d:%02d\n",startHour, startMin, stopHour, stopMin);
startSec=(startHour*60+startMin);
stopSec=(stopHour*60+stopMin);

//godziny otwoarcia stale na caly tydzien.
for (n=0;n<7;n++)
{
openSec[0][n]=startSec;
openSec[1][n]=stopSec;

}
for(dayNr=0;dayNr<7;dayNr++)
{ //dni tygodnia
if (confRead(confName,weekDays[dayNr], openHourCh)>0)

{//utawic niedziele
if(sscanf(openHourCh,"%2d:%2d-%2d:%2d",&startHour, &startMin, &stopHour, &stopMin) !=4)
{
fprintf(vlog,"\nblad odczytu godzin otwarcia w %s\n",weekDays[dayNr]);
goto error;
}
else
if(verboseB == 2)
fprintf(vlog,"wczytano %s %2d:%02d-%2d:%02d\n",weekDays[dayNr],startHour, startMin, stopHour, stopMin);

startSec=(startHour*60+startMin);
stopSec=(stopHour*60+stopMin);
openSec[0][dayNr]=startSec;
openSec[1][dayNr]=stopSec;
}//ustawic niedziele

}//dni tygodnia
//fclose(vlog);



rectimint=atoi(rectim); //odtwarzanie odstepu rekordow
//if(rectimint<10) rectimint=10;

//printf("nazwa raportu = %s\n",filename);
nameBreak(prefix,suffix,filename);
//printf("\n%s_%s\n",filenameO,suffix);
gettime(godzina);
getdate('0',dateday);
//strcpy(filename,raprtDirV);
strcpy(filenameO,prefix);
strcat(filenameO,"_");
strcat(filenameO,dateday);
strcat(filenameO,".");
strcat(filenameO,suffix);

if(verboseB)
{

fprintf(vlog,"Zdekodowany odstep rekordow = %d min.\n",rectimint);
//fprintf(vlog,"nazwa logg serwisowy = %s\n",logname);
fprintf(vlog,"nazwa raportu = %s\n",filenameO);
for (n=0;n<7;n++)
{
//printf("%d, open %10d, close%10d\n",n,openSec[0][n]/3600,openSec[1][n]/3600);
fprintf(vlog,"%s, %2d:%02d-%2d:%02d\n", weekDays[n], mTh(openSec[0][n]),mTm(openSec[0][n]), mTh(openSec[1][n]),mTm(openSec[1][n]));
}
fprintf(vlog,"Dzisiaj %s, oootwarte: %2d:%02d-%2d:%02d\n", weekDays[weekday()], mTh(openSec[0][weekday()]),mTm(openSec[0][weekday()]), mTh(openSec[1][weekday()]),mTm(openSec[1][weekday()]));


}
fclose(vlog);

//TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
//szukanie dni miesiaca

//uad ustalanie aktualnej daty
//miesiac biezacy
getdate('0',dateday);
sscanf(dateday,"%4d%2d%2d",&ye,&mo,&da);
today=da;//żeby strawdzać tylko do teraz.(now)
now=gettimemin();
rapMies();

getdate('0',dateday);
sscanf(dateday,"%4d%2d%2d",&ye,&mo,&da);
if(da<7)
{  //miesiac poprzedni
olddate(da,'0',dateday);
//poczatek procedury rapMies -liczy od poczatku miesiaca od montheng
today=-1;
now=25+60;
rapMies();
}
//koniec procedury rapMies
goto koniec;
error:
vlog=fopen(vlogName,"a");
fprintf(vlog,"\nprogram przerwany z powodu powyzszych bledow\n%s %s STOP\n", dateday,godzina);
fclose(vlog);
koniec:
		
		return 0;
;

}//main


