#define configDir "/opt/zeletronik/conf/"
#define comlogDir "/opt/zeletronik/log/"
//#define raportDir "/var/log/letronik/"

//#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-0.3.2-2010119-0"
//#define ramDir "/opt/zeletronik/ramdisk" // sciezka do ramdysku


/*
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.
*/



/*
20100827
przepisywanie do pracy na cron co 1 minute

20100803
log programu do ramdysku pod nazwa programu.
//vlogname na log tymczasowy w ramie
//FILE  *vlog
20100606
008
odczytuje godziny pracy z pliku konfiguracyjnego.
moze pracowac pod inna nazwa i oczytywać innny plik konfiguracyjny nazwa.conf - praca z wieloma licznikami.


20100504
tablica sekund otwarcia openSec 2x7
20100430
005 - godziny pracy.

024 - ukrywanie sekund w raportach dla recordtime>60
wstepne przygotowywanie linii raportu

021 - praca cicha. - 
lin4leic020
obsluga sygnalu ctrl-c
wprowadzenie pliku serwisowego miesiecznego lei4leic201004.txt

lincom16 - zmiana polozenia pliku configuracyjnego

lincom15 wylaczanie logu comlog.txt

Programm lincom do obslugi licznikow LEIC4650 firmy letronik.
lincom14
nowy format informacji o braku transmisji.
lincom13
podzial pliku programu
liczenie awarii F

lincom012
wyswietla rectimeint - moze zrobic liczenie F?
lincom011 wykrywa F, werjsa testowa z pelnym wydrukiem
lincom010 prawidlowo zamienia bufor na int
lincom007 wycina liczby z bufora, nie wykrywa F
lincomconf005
wyciaganie zmiennych z coma
20100413 linComConf003
comlog.txt

20100412

proceduta wpisywania godziny
plik konfigruacyjny lincom.conf

20100411 linCom.
wersja jendonwatkowa
*20050218
*20040804 ic4600f-1 - zamienilem ostatni zbedny znak na spacji i sredik na przecinek.
*logerr1200-0.0.2.c
*sprobojemy urodzic jeszcze jeden proses potomny
*logerr1200-0.0.1.c
*wsyla 10 razy znak r
*B1200
 *  AUTHOR: Sven Goldt (goldt@math.tu-berlin.de)
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License
 *  as published by the Free Software Foundation; either version 2
 *  of the License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
*/
/*
 This is like all programs in the Linux Programmer's Guide meant
 as a simple practical demonstration.
 It can be used as a base for a real terminal program.
*/
#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 "ll4650lib.c"
#include "leszekllib.c"




int runInt=1;//kontynuuj dzialanie jesli 1
static char *weekDays[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday", "Friday","Saturday" };
int dayNr;

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


/*
void waitN(int n, long int start, long int stop)
{
long int t;
int wday;

//t<start stoi
//t>start stoi
//start nie musi być podzielny przez n

do
{
wday=weekday();
start=openSec[0][wday];
stop=openSec[1][wday];
if (stop == 24*3600)//zeby nie przelatywalo przez 12.
stop--;
sleep(1);
t=gettimesec();
}
while((((t % n != 0) && (t != start) && (t != stop))||(t<start)||(t>stop)) && runInt)
//while((t=gettimesec() % n != 0))

}
*/
void zlapalem()//obsluga sygnalu ctrl-c
{
runInt=0;


 //fflush(stdout);

}

//MAIN()MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
main(int argc, char *argv[])
{//main
char filename[250],filenameO[250], suffix[10],prefix[250],logname[100],tempchar[50],recline[255],vlogName[250],clogName[250],tmpstr[250], tmpchar[250];
char raportDirV[100];
//vlogName na log tymczasowy w ramie
char confName[250];
long int startSec=0, stopSec=0;
int startMin,startHour, stopMin, stopHour;
char checksumChar[10];
int fd,j,n=0,nRec,m,num=0,numold=0;
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, bladFR;//ilosc bledow fotokomorki
int bladC=0;//ilosc bledow komunikacji
unsigned int c;//bufor znaku;
char godzina[10];
//char godzinaV[10];//godzina z lub bez sekund
char dateday[40];
char MODEMDEVICE[80],rectim[10],yeslog[6],yesconsole[6];
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 fconfig[100];//nazwa pliku configuracji
FILE *flog,*fcom,*frec, *vlog, *tfile, *fopen();
struct termios oldtio,newtio,oldstdtio,newstdtio,oldout;
//struct sigaction sa,sak;

signal(SIGINT, zlapalem);
signal(SIGTERM, zlapalem);
//----------------------tworzenie nazwy vlog
//strcpy(vlogName,debugDir);
//strcat(vlogName,argv[0]);
//strcat(vlogName,"_v.log");




strcpy(tmpchar,argv[0]);
nameBase(tmpstr,tmpchar);
cpto_(tmpchar,tmpstr);
strcpy(vlogName,debugDir);
strcat(vlogName,tmpchar);
strcat(vlogName,"_v.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

}

}

//strcpy(raportDirV, raportDir);
//sprawdzanie, czy program dziala co minute i czy zapisywac do logow
/*if (fileExists(timeFile))
{
tfile=fopen(timeFile,"r");
fscanf(tfile,"%ld %d %d %d %d",&oldLinuxTime,&bladC,&bladF,&wdayOld,&numold);
if((linuxTime()-oldLinuxTime) < 120)  logBlok=1;// jednorazowe wpisywanie do logu
else logBlok=0;
fclose(tfile);
}
*/
//tworzenie nazwy PLIKU KONFIGURACYJNEGO
strcpy(tmpchar,argv[0]);
nameBase(tmpstr,tmpchar);
cpto_(tmpchar,tmpstr);
strcpy(confName,configDir);
strcat(confName,tmpchar);
strcat(confName,".conf");



//vlog=fopen(vlogName,"a");
vlog=fopen(vlogName,"a");

/*if(verbose==2)
for(n=0;n<7;n++)
printf("%s\n",weekDays[n]);*/
//if (! logBlok)
{//lobBlok
//nie mozna zapisac do logu przed oczytem konfiguracji - nazwy pliku logu
//log serwisowy
//strcpy(logname,debugDir);
//strcat(logname,argv[0]);
getdate('0',dateday);
//strncat(logname,dateday,6);
strcat(logname,".log");
strcpy(tmpchar,argv[0]);
nameBase(tmpstr,tmpchar);
cpto_(tmpchar,tmpstr);
strcpy(logname,debugDir);
strcat(logname,tmpchar);
strcat(logname,".log");


gettime(godzina);
flog=fopen(logname,"a");
//flog=fopen("/opt/zeletronik/log/lin4leic.log","a");
getdate('-',dateday);
fprintf(flog,"\nSTART nazwa wywolania %s: %s - %s deltaT=%ld\n",argv[0],dateday, godzina,linuxTime()-oldLinuxTime);
fclose(flog);


if(verbose)
{

fprintf(vlog,"\n*******************************\nSTART: %s - %s \nWersja programu: %s\n",dateday,godzina, programName);
fprintf(vlog,"\nProgram do komunikacji z licznikami LEIC-4650\n");
fprintf(vlog,"Aby zakonczyc wcisnij ctrl-c \n");
fprintf(vlog,"log bledow: %s \npoziom debagowania = %d\n",vlogName, verbose);
fprintf(vlog,"nazwa pliku konfiguracji: %s\n", confName);
if(verbose == 3)
{
fprintf(vlog,"\n zla opcja %s, dopuszczalne -v i -vv: verbose - wyswietlaj\n",argv[1]);
verbose = 2;
}

}
}//logBlol
verboseB=verbose;//*(1-logBlok);

//getdate('0',dateday);
//printf("\n%s\n",dateday);
//getdate('+',dateday);
//printf("\n%s\n",dateday);

//printf("\n%s\n",dateday);

//printf("Program reaguje na klwiature, sam odpytuje licznik co 20 sekund.\r\n");
//printf("Program podaje czas i zliczenie \n\r");
//printf("Program dopisuje dane do pliku ic4600.csv w katalogu wywolania \n\n\r");


//----------czytanie pliku konfiguracyjnego---KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK


//odczytywanie nr PORTU COM z konfiguracji
n= confRead(confName,"portname", MODEMDEVICE);
if(n)
{
if(verboseB == 1)
fprintf(vlog,"PORT COM = %s\n",MODEMDEVICE);
}
else
{
if (n<0)
fprintf(vlog,"Nie znaleziono pliku konfiguracji%s\n", confName);
fprintf(vlog,"Nie znaleziono nazwy portu com 'portname' w pliku %s", confName);
fclose(vlog);
goto error;
}
//odczytywanie nazwy PLIKU RAPORTU
n = confRead(confName,"entry", filename)> 0;
if(n)
{
if(verboseB == 1)
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;
}
//fclose(vlog);


//podzial sciezki kropka na filenameO i suffix


{//KONFIGYRACJA BEZ DNI TYGODNIA OK.

/*if(verbose)
{
vlog=fopen(vlogName,"a");//skasowac stary log
fprintf(vlog,"\n*******************************\nSTART: %s - %s \nNazwa pliku vlog %s\n",dateday,godzina, vlogName);
fprintf(vlog,"verbose = %d\n", verbose);
fprintf(vlog,"nazwa pliku konfiguracji: %s\n", confName);
if(verbose == 3)
fprintf(vlog,"\n zla opcja %s, dopuszczalne -v i -vv: verbose - wyswietlaj\n",argv[1]);
fclose(vlog);
}
*/
//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);
strcpy(yeslog,"n");
confRead(confName,"comlog", yeslog);
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, otwarte: %2d:%02d-%2d:%02d\n", weekDays[weekday()], mTh(openSec[0][weekday()]),mTm(openSec[0][weekday()]), mTh(openSec[1][weekday()]),mTm(openSec[1][weekday()]));

//wyrzucamy z konfiguracji czy zapisywać strumien wejsciowy


{
if(yeslog[0]=='y')
fprintf(vlog,"comlog yes\n");
else
{
if(yeslog[0]=='m')
fprintf(vlog,"minute comlog \n");
else
fprintf(vlog,"no comlog \n");
}
}

//if(yesconsole[0]=='y')
//printf("console yes\n");
//else
//printf("console no\n");
}
fclose(vlog);




/* 
  Open modem device for reading and writing and not as controlling tty
  because we don't want to get killed if linenoise sends CTRL-C.
*/

#define BAUDRATE B1200
//#define MODEMDEVICE "/dev/ttyUSB0"
//#define ENDMINITERM 2 /* ctrl-b to quit miniterm */

//#define _POSIX_SOURCE 1 /* POSIX compliant source */



 


//if(!logBlok)
{
//nie mozna owierac portu co minute, bo kasuje sie bufor w ktorym sa bledy fotokomorki
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY);

 if (fd <0) 
 {
strcpy(tempchar,"Blad otwarcia portu");
 perror(MODEMDEVICE);
  exit(-1); 
  }
else
{
strcpy(tempchar,"Otwarto port ");
 tcgetattr(fd,&oldtio); /* save current modem settings */
 //bzero(&newtio, sizeof(newtio));//wyczysc strukture ustawienia portu

/* 
  Set bps rate and hardware flow control and 8n1 (8bit,no parity,1 stopbit).
  Also don't hangup automatically and ignore modem status.
  Finally enable receiving characters.
*/
// newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_cflag &= ~PARENB;
newtio.c_cflag &= ~PARODD;
newtio.c_cflag &= ~CSTOPB; 
/*
 Ignore bytes with parity errors and make terminal raw and dumb.
*/
 newtio.c_iflag = IGNPAR;
 
/*
 Raw output.
*/
 newtio.c_oflag = 0;
 
/*
 Don't echo characters because if you connect to a host it or your
 modem will echo characters for you. Don't generate signals.
*/
 newtio.c_lflag = 0;
 
/* blocking read until 1 char arrives */
 newtio.c_cc[VMIN]=0;
 newtio.c_cc[VTIME]=0;
 
/* now clean the modem line and activate the settings for modem */
 tcflush(fd, TCIFLUSH);
 tcsetattr(fd,TCSANOW,&newtio);
}

if(verbose)
{
vlog=fopen(vlogName,"a");
//printf("open 458\n");
fprintf(vlog,"%s %s\n",tempchar,MODEMDEVICE);
fclose(vlog);
}

flog=fopen(logname,"a");

fprintf(flog,"%s - %s\n",tempchar,MODEMDEVICE);
fclose(flog);
} 


//rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
//czytanie licznika

//poczatak petli minutowej
while(runInt)
{
while((runInt)&&( oldMin == ((gettimesec())/60) ))
{
sleep(1);


}
oldMin=((gettimesec())/60);
c='r';
nbuf=0;

//printf("\nprzed write");


getdate('-',dateday);
write(fd,&c,1);//wysylanie zapytania do licznika



//sleep(1);//odczekanie
//printf("Xza write\n");
res = 0;//read(fd,buf,255);
nwait=0;
while((res == 0)&&(nwait<10))
{//czekanie na odpowiedz
sleep(1);
 nwait++;
res = read(fd,buf,255);
}
strncpy(lbuf,buf,res);//ma skopiowac piewsze znaki do bufora
res1=res;
usleep(50000);
res = read(fd,buf,255);
while((res)&&(nbuf<10))
{//kolekcjonowanie odpowiedzi
strncat(lbuf,buf,res);//ma skopiowac piewsze znaki do bufora
res1+=res;
nbuf++;
usleep(50000);
res = read(fd,buf,255);
}

lbuf[res1]=0;

m=getdata(lbuf, &num,&bladFR);
//numold=num;//do sprawdzania, ile minut nie ma klientow lub zapisytania tylko zmian
bladF+=bladFR;

if(yeslog[0]=='m')
{
strcpy(tmpstr,comlogDir);
strcat(tmpstr,argv[0]);
strcat(tmpstr,"_com.log");


strcpy(tmpchar,argv[0]);
nameBase(tmpstr,tmpchar);
cpto_(tmpchar,tmpstr);
strcpy(clogName,debugDir);
strcat(clogName,tmpchar);
strcat(clogName,"_com.log");

fcom=fopen(clogName,"a");
gettime(godzina);
fprintf(fcom,"%s: nbuf=%2d , nwait=%2d: ",godzina, nbuf,nwait);
for (n=0;n<res1;n++)
{
if((lbuf[n]>31)&&(lbuf[n]<127))
fprintf(fcom,"%c",lbuf[n]);
else
fprintf(fcom,"_%02xh_",lbuf[n]);

}
fprintf(fcom,"\n");
fclose(fcom);
}
//vlog=fopen(vlogName,"a");//na probe
//gettime(godzina);
//fprintf(vlog,"m= %d lbuf=%s; num=%ld nwait=%d nbuf=%d res1= %d\n",m, lbuf,num, //nwait, nbuf, res1);
//fclose(vlog);
//strcpy(blady," ");
//bladC=0;
//jesli odebrano znaki
if(m != 0)
bladC++;//brak konumikacji
else
numold=num;//do spodawania starego stanu jak brak komunikacji.



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

{
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);
}

if((((t % rectimint) == 0) && (t > start) && (t < stop))||(t==start)||(t==stop))
{//poczatek petli rekordu


//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(verbose==2)
{
vlog=fopen(vlogName,"a");
//gettime(godzina);
fprintf(vlog,"---------------\nOdpytano licznik %s\n", godzina);
fclose(vlog);
}
//-------------------------glowne sterowanie czekaniem na wlasciwy czas---------------
if(wday != wdayOld)
{
bladC=0;
bladF=0;
gettime(godzina);
getdate('.',dateday);
if(heading)
{
frec=fopen(filenameO,"a");
fprintf(frec,"#START %s %s\n",dateday, godzina);
fprintf(frec,"#Godz; Stan ; F; K;ChSum\n");
fclose(frec);
}
if(verbose)
{
vlog=fopen(vlogName,"a");
//printf("open 547\n");
//gettime(godzina);
//getdate('.',dateday);
fprintf(vlog,"***************************");
fprintf(vlog,"\nOtwarcie dzisiaj =  %s-%s; %s, %2d:%02d-%2d:%02d\n", dateday, godzina, weekDays[wday], mTh(start),mTm(start), mTh(stop),mTm(stop));
/*fprintf(vlog,"Czyszczenie bufora start\n");
if(res1)
{
fprintf(vlog,"Czyszczenie bufora 1 :");
for (n=0;n<res1;n++)
{

if((buf[n]>31)&&(buf[n]<127))
fprintf(vlog,"%c",buf[n]);
else
fprintf(vlog,"%02xh ",buf[n]);
}
fprintf(vlog," : koniec czyszczenia\n");
}
if(res1)
{
for (n=0;n<res1;n++)
{
fprintf(vlog,"Czyszczenie bufora 2: ");
if((lbuf[n]>31)&&(lbuf[n]<127))
fprintf(vlog,"%c",lbuf[n]);
else
fprintf(vlog,"%02xh ",lbuf[n]);
}
fprintf(vlog," : koniec czyszczenia\n");
}
*/
fclose(vlog);
}
wdayOld=wday;
}//koniec oczyszczania bufora




//startSec=openSec[0][n];
//stopSec=openSec[1][n];

//if(verbose)
//sprintf(recline,"%s;%6d;%02d;00",godzinaV,num,bladF);
//putchar(blad);
if(yeslog[0]=='y')
{

strcpy(tmpstr,comlogDir);
strcat(tmpstr,argv[0]);
strcat(tmpstr,"_com.log");
fcom=fopen(tmpstr,"a");
gettime(godzina);
fprintf(fcom,"%s: nbuf=%d , nwait=%d: ",godzina, nbuf,nwait);
for (n=0;n<res;n++)
{
if((lbuf[n]>31)&&(lbuf[n]<127))
fprintf(fcom,"%c",lbuf[n]);
else
fprintf(fcom,"_%02xh_",lbuf[n]);

}
fprintf(fcom,"\n");
fclose(fcom);
}

if(verbose == 2)
{
vlog=fopen(vlogName,"a");
fprintf(vlog," odpowiedz licznika - ilosc znakow = %d, ilosc buforow = %d \n", res, nbuf);
{
fprintf(vlog,"Odpowiedz licznika: ");
for (n=0;n<res;n++)
{
if((lbuf[n]>31)&&(lbuf[n]<127))
fprintf(vlog,"%c",lbuf[n]);
else
fprintf(vlog,"_%02xh_",lbuf[n]);

}


}
fclose(vlog);
}//if verbose

homin(godzina);//dorobic formatowanie godziny
sprintf(recline,"%s;%6d;%2d;%2d",godzina,numold,bladF,bladC);
sprintf(checksumChar,";0X%04X",checksumll(recline));


if(verbose == 2)
{
vlog=fopen(vlogName,"a");
gettime(godzina);
fprintf(vlog,"\nWygenerowano linie rekordu %s %s \n", recline,checksumChar);
fclose(vlog);
}

if((start != stop) && runInt)
{
getdate('0',dateday);
//strcpy(filename,raportDirV);
strcpy(filenameO,prefix);
strcat(filenameO,"_");
strcat(filenameO,dateday);
strcat(filenameO,".");
strcat(filenameO,suffix);
//strcat(filename,"_");
//strncat(filename,godzina,2);
frec=fopen(filenameO,"a");

n=fprintf(frec,"%s%s\n", recline,checksumChar);
fclose(frec);

vlog=fopen(vlogName,"a");
if(verbose == 2) 
fprintf(vlog,"Ilosc wpisanych znakow do rekordu = %d\n",n);
if(frec == NULL)
fprintf(vlog,"Nie mozna otwozyc pliku %s\n", filenameO);

if ((n > 25)&&(verbose == 2))
fprintf(vlog,"udany wpis do pliku %s\n", filenameO);
fclose(vlog);
bladF=0;
bladC=0;

}
else
{
if(verbose && runInt)
{
vlog=fopen(vlogName,"a");
fprintf(vlog,"Dzisiaj zamkniete\n");
fclose(vlog);
}
}


//waitN(rectimint,startSec,stopSec);//glowne czekanie 
}//petla glowna

//}//jest konfiguracja
}//koniec petli rekordu




}//koniec petli minutowej
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

if(verbose)
{
vlog=fopen(vlogName,"a");
fprintf(vlog,"STOP: %s - %s\n",dateday, godzina);
fclose(vlog);

}

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:

//zapisywanie czasu do timeFile
/*tfile=fopen(timeFile,"w");
fprintf(tfile,"  %ld\t %d \t %d  \t %d \t %ld\nlinuxTime(),bladC,bladF,wdayOld,numold\n",linuxTime(),bladC,bladF,wdayOld,numold );
fprintf(tfile," d= %s  g=%s\n",dateday, godzina);
fclose(tfile);
*/
//homin(godzina);
//getdate('-',dateday);
//flog=fopen(logname,"a");
//getdate('-',dateday);
//fprintf(flog,"STOP: %s - %s\n",dateday, godzina);
//fclose(flog);


;
}//main


