#define libver 20100827-1


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


20100414
leszekllib.c
biblioteka leszka lobody


*/


/*
//time example 
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t seconds;

  seconds = time (NULL);
  printf ("%ld hours since January 1, 1970", seconds/3600);
  
  return 0;
}

*/


#if ! defined (leszekl_b)
#define leszekl_b

#include <stdlib.h>

#include <stdio.h>
#include <string.h>
#include <time.h>


int sTh(long int s)//sekkundy na godziny
{
return s/3600;
}

int sTm(long int s)//sekkundy na minuty
{
return (s % 3600)/60;
}


int mTh(long int s)//sekkundy na godziny
{
return s/60;
}

int mTm(long int s)//sekkundy na minuty
{
return s % 60;
}

//odczytywanie linii z pliku, musi być otwarty do czytania
//wczytuje linie, zwraca ilość znaków.
int fgetline(FILE* file,char s[], int lim)
{
//wprowadzić ze strony 102
int c,i=0;
while(--lim >0 && (c=getc(file))!=EOF && c!='\n')
	s[i++]=c;
if(c=='\n')
	s[i++]=c;
s[i]='\0';
return i;

}



int fileprint (const char* fileName)
{
       
 FILE* plik;
int c;
//printf("\n6\n");
        plik = fopen(fileName, "r");  /* ważne, by nie tworzyć pliku, jeśli nie istnieje, tryb "r" (tylko odczyt) */
        if ( plik )
        {
printf("\n\n");
while((c=getc(plik)) != EOF)
putchar(c);
printf("\n\n");



            fclose(plik);
            return 1;
        }
     //   fclose(plik);
//printf("\n7\n");
        return 0;
}



int filecopy (const char* targetname, const char* sourcename)
{//filecopy
       
 FILE *target, *source;
int c,n=0;
//printf("\n6\n");
        source = fopen(sourcename, "r");  /* ważne, by nie tworzyć pliku, jeśli nie istnieje, tryb "r" (tylko odczyt) */
	if(source == NULL)
return -2;//nie otwarto source
else
{//jest zrodlo
        target = fopen(targetname, "w");  /* ważne, by nie tworzyć pliku, jeśli nie istnieje, tryb "r" (tylko odczyt) */
	if(target != NULL)

        {//mozna kopiowac
//printf("\n\n");
while((c=getc(source)) != EOF)
{
putc(c,target);
//printf("\n\n");
n++;
}


fclose(source);
fclose(target);
            return n;
        }//mozna kopiowac

fclose(source);
return -1; //nie otwarto target
}//jest zrodlo
    
}//filecopy

int filecmp (const char* targetname, const char* sourcename)
{//filecmp 0 rowne, 1 rozne -1,-2 blad
       
 FILE *target, *source;
int c,d,n=0;
//printf("\n6\n");
        source = fopen(sourcename, "r");  /* ważne, by nie tworzyć pliku, jeśli nie istnieje, tryb "r" (tylko odczyt) */
	if(source == NULL)
return -2;//nie otwarto source
else
{//jest zrodlo
        target = fopen(targetname, "r");  /* ważne, by nie tworzyć pliku, jeśli nie istnieje, tryb "r" (tylko odczyt) */
	if(target != NULL)

        {//mozna kopiowac
//printf("\n\n");
while((c=getc(source)) != EOF)
{
if(c != getc(target))
return 1;
}


fclose(source);
//fclose(target);
if(getc(target) != EOF)
{
fclose(target);
return 1;
}
fclose(target);
return 0;
        }//mozna kopiowac

fclose(source);
return -1; //nie otwarto target
}//jest zrodlo
    
}//filecopy



/*
Suma kontrolna ciągu znaków c1...cn
i-ta podsuma Pi=c1+c2+..+ci
Pierwszy bajt sumy kontrolnej S1=Pn modulo 251
Drugi bajt sumy kontrolnej S2=(P1+P2+P3....+Pn) modulo 251


*/

int checksumll(char napis[])
{
int n=0, p=0,s1=0,s2=0;
//printf("%s\n",napis);
while((napis[n]) && (n<255))
{
s1+=napis[n];
s2+=s1;
//printf(" %c %d s1=%d s2=%d\n",napis[n],napis[n],s1,s2);
n++;

}
s1=(s1) % 251;
s2 = s2 % 251;
//printf(" cs1=%d %0x  cs2=%d %x\n",*cs1,*cs1,*cs2,*cs2);
return 256* (s1)+(s2);

}

int cpto_(char target[], char source[])
//kopiuj poczatek nazwy i rozszerzenie
{
int n=0;
while((source[n])&&(source[n] != '.') &&(source[n] != '_') && (n<255))
{
target[n]=source[n];
n++;
}
if(source[n+1] == '/')
{
target[n]=source[n];//kopiowanie dopuszczalnej kropki
n++;
while((source[n] != '.') &&(source[n] != '_') && (n<255))
{
target[n]=source[n];
n++;
}
}
target[n]=0;


return n;
}


int nameBreak(char target[],char suffix[], char source[])
{
int n=0,m=0;

while((source[n])&&(source[n] != '.') && (n<255))
{
target[n]=source[n];
//printf("%d %1c\n",n,source[n]);
n++;
}
target[n]=0;
n++;//wyrzucanie kropki
while((source[n])&& (n<255))
{
suffix[m]=source[n];
//printf("%d %1c\n",n,source[n]);
n++;
m++;
}
suffix[m]=0;
}


int nameBase(char base[], char source[])//oddzielenie nazwy od sciezli na "/"
{
int n=strlen(source), j=0,k=0;
while((source[n]!='/')&&(n>0)) n--;
n++;
#if deb == 1
printf("len=%d, n=%d\n",strlen(source),n);
#endif
for(k=n;k<strlen(source);k++)
{
base[j]=source[k];
j++;

}
base[j]=0;
return j;



}



int fileExists (const char* fileName)
{

        FILE* plik;
        plik = fopen(fileName, "r");  /* ważne, by nie tworzyć pliku, jeśli nie istnieje, tryb "r" (tylko odczyt) */
        if ( plik )
        {
            fclose(plik);
            return 1;
        }
        //fclose(plik);
        return 0;
}


//-------------------------------------weekday()---------------------------------------------------
// 0 niediela 6 sobota
int weekday(void)
{

time_t t1;
struct tm tm1;

      (void) time(&t1);
     tm1=*localtime(&t1);

     	return tm1.tm_wday;
}



int monthday(void)
{

time_t t1;
struct tm tm1;

      (void) time(&t1);
     tm1=*localtime(&t1);

     	return tm1.tm_mday;
}


long int linuxTime(void)
{

time_t t1;
struct tm tm1;

      (void) time(&t1);

     	return t1;
}

//-------------------------------------homin()---------------------------------------------------
void homin(char czas[])
{

time_t t1;
struct tm tm1;

      (void) time(&t1);
     tm1=*localtime(&t1);

     	sprintf(czas,"%02d:%02d",tm1.tm_hour,tm1.tm_min);
}


//-------------------------------------gettime()---------------------------------------------------
void gettime(char czas[40])
{

time_t t1;
struct tm tm1;

      (void) time(&t1);
     tm1=*localtime(&t1);

     	sprintf(czas,"%02d:%02d.%02d",tm1.tm_hour,tm1.tm_min,tm1.tm_sec);
}	

//-------------------------------------gettime()---------------------------------------------------
long int gettimesec(void)
{

time_t t1;
struct tm tm1;

      (void) time(&t1);
     tm1=*localtime(&t1);

     	return tm1.tm_hour*3600+tm1.tm_min*60+tm1.tm_sec;
}	


int gettimemin(void)
{

time_t t1;
struct tm tm1;

      (void) time(&t1);
     tm1=*localtime(&t1);

     	return tm1.tm_hour*60+tm1.tm_min;
}

void getdate(char separator ,char day[40])
//separator '0' bez, inaczej jest kopiowany.

{
time_t t1;
char sseparator[2];
//sseparator[0]=separator;
//sseparator[1]=0;
struct tm tm1;
      (void) time(&t1);
     tm1=*localtime(&t1);
     if(separator=='0')
	sprintf(day,"%d%02d%02d",tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday) ;
	else
	sprintf(day,"%d%c%02d%c%02d",tm1.tm_year+1900,separator,tm1.tm_mon+1,separator,tm1.tm_mday) ;
}

void olddate(int n, char separator ,char day[40])
//separator '0' bez, inaczej jest kopiowany.

{
time_t t1;
char sseparator[2];
//sseparator[0]=separator;
//sseparator[1]=0;
struct tm tm1;

      (void) time(&t1);
t1-=n*24*3600;
     tm1=*localtime(&t1);
     if(separator=='0')
	sprintf(day,"%d%02d%02d",tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday) ;
	else
	sprintf(day,"%d%c%02d%c%02d",tm1.tm_year+1900,separator,tm1.tm_mon+1,separator,tm1.tm_mday) ;
}

//----------------------------------------------------------------------------------
int confRead( char conffile[], char item[], char value[])
//wylawianie z pliku konfiguracyjnego wartosci dla item
{//poczatek cR
  FILE* plik;
	int c; //czytany znak
int i=0;//nr litery slowa
int inw=0;//czy w slowie 
int ret=0;//do return
int coment=0;

char word[250],word1[250],word2[250];
plik = fopen(conffile, "r");  /* wazne, by nie tworzyc pliku, jezli istnieje, tryb "r" (tylko odczyt) */
i=0;
//printf("\nconfiguracja\n");
if (plik>0)
{//jest plik
while((c=getc(plik)) != EOF)
{//szukanie komentarzy
if(c=='#') coment=1;
if((coment)&&(c=='\n')) coment = 0;
if(coment == 0)
        {//poczatek przegladania pliku
        if(c==' '||c=='\n'||c=='\t')
                {//poczatek pole biale
                if(inw==1)
                        {//pole biale po znaku
                        word[i]=0;


                        //printf("%s - %s - %s\n",word2,word1,word);

                        if (strcmp(word2,item)==0)
                        if (strcmp(word1,"=")==0)
                                {//rozpoznano item
                                strcpy(value,word);
                              
                                ret++;
                              // printf("zlapalem value_%s = %s\n",item,value);
                                }//koniec rozpoznano item

                        strcpy(word2,word1);
                        strcpy(word1,word);
                        i=0;

	
                      //  printf("zlapalem value_%s = %s\n",item,value);
                        }//koniec pole biale po znaku
                        //kazde biale pole
                inw=0;
                }//koniec pole biale
        else 
                {//pole czarne
                word[i]=c;
                i++;
                inw=1;


                }//koniec pola czarnego


        }//koniec przegladania pliku
}//szukanie komentarzy
       // printf("\nkoniec1\n");
	
        fclose(plik);
       // printf("\nkoniec2\n");
}// jest plik
else
{
	ret=-1;
	printf("\nBlad - nie znaleziono pliku kofiguracji %s\n",conffile);
}
	
        return ret;

}//koniec cR



#endif

