//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "test1.h"
#include "io.h"
#include "winsock2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

typedef void (_stdcall *TZdarzenieBarkod)(PChar AdresIP, PChar Barkod, PChar TekstNaWyswietlacz,
                                      unsigned long *RodzajDzwieku, unsigned long *CzasWyswietlania, PChar TekstDoDrukarki);
typedef void (_stdcall *TZdarzenieStatus)(PChar AdresIP, unsigned long TypWyswietlacza, unsigned long TypDrukarki,
                                    unsigned long Status, PChar Wersja );
typedef void (_stdcall *TZdarzenieBlad)(PChar AdresIP, unsigned long TypTransmisji, unsigned long NrBledu, PChar OpisBledu);
typedef void (_stdcall *OdczytajStatus1)(PChar AdresIP);
typedef void (_stdcall *ZatrzymanieObslugiSprawdzarek1)(void);
typedef void (_stdcall *WpiszTekstStaly1)(PChar AdresIP, unsigned long NrTekstu, PChar TekstNaWyswietlacz, unsigned long CzasWyswietlania);
typedef void (_stdcall *WpiszTekstReklamowy1)(PChar AdresIP, unsigned long NrTekstu, PChar TekstNaWyswietlacz, unsigned long CzasWyswietlania, unsigned long SposobWyswietlenia);

typedef unsigned char (_stdcall *UruchomionoObslugeSprawdzarek1)(unsigned long *NrBledu, PChar OpisBledu,
                      TZdarzenieBarkod ObslugaBarkodow, TZdarzenieStatus ObslugaStatusow, TZdarzenieBlad ObslugaBledow);

char TekstReklamowy1[]="    NOWA RODZINA     SPRAWDZAREK ELZAB  ";
char TekstReklamowy2[]="     DWA RODZAJE      CZYTNIKÓW KODÓW   ";
char TekstReklamowy3[]="    JEDNOLINIOWY      WIELOKIERUNKOWY   ";

char TekstReklamowy4[]=" Z.U.K. ELZAB  S.A.   www.elzab.com.pl  ";
char TekstReklamowy5[]=" Z.U.K. ELZAB  S.A.  tel.+48(32)2722021 ";
char TekstReklamowy6[]=" ELZAB - PRODUCENT   SPRZĘTU FISKALNEGO ";

char TekstStaly1[]="PRZYŁÓŻ KOD KRESKOWY";
char TekstStaly2[]=" TOWARU POD CZYTNIK ";
char TekstStaly3[]="Przyłóż kod kreskowy";
char TekstStaly4[]=" towaru pod czytnik ";

char OdpowiedzNaBarkod1[]="MĄKA POZNAŃSKA 1kg   CENA        2.00 zł";
char OdpowiedzNaBarkod2[]="KIWI 1szt.           CENA        1.25 zł";
char OdpowiedzNaBarkod3[]="DŁUGOPIS 1szt.       CENA        0.99 zł";
char OdpowiedzNaBarkod4[]="ZESZYT 16-kartkowy   CENA        1.48 zł";
char OdpowiedzNaBarkod5[]="HERBATA DILMAH 1OP.  CENA       11.19 zł";
char OdpowiedzNaBarkod6[]="SŁODZIK DIET.500SZT. CENA        5.52 zł";
char OdpowiedzNaBarkod7[]="NIE ZNALEZIONO KODU ";

char Barkod1[]="ABC1234D567EF890GH";
char Barkod2[]="1A2B3C";
char Barkod3[]="9876543210128";
char Barkod4[]="12345670";
char Barkod5[]="7017702963024";
char Barkod6[]="90125089";


 TForm1 *Form1;
 WpiszTekstReklamowy1 TekstReklamowy;
 WpiszTekstStaly1     TekstStaly;
 UruchomionoObslugeSprawdzarek1 ObslugaSprawdzarekStart;
 ZatrzymanieObslugiSprawdzarek1 ObslugaSprawdzarekStop;
 OdczytajStatus1 GetStatus;
 HINSTANCE hDll;
 unsigned long NrBledu;
 char OpisBledu[255];

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
unsigned char NaLatin2(unsigned char Znak)
{
   switch (Znak)
//male polskie litery
   {
    case 185 : return 165;
    case 230 : return 134;
    case 234 : return 169;
    case 179 : return 136;
    case 241 : return 228;
    case 243 : return 162;
    case 156 : return 152;
    case 159 : return 171;
    case 191 : return 190;
//duze polskie litery
    case 165 : return 164;
    case 198 : return 143;
    case 202 : return 168;
    case 163 : return 157;
    case 209 : return 227;
    case 211 : return 224;
    case 140 : return 151;
    case 143 : return 141;
    case 175 : return 189;
  default:
    return Znak;
   }
}
TZdarzenieStatus Status (PChar AdresIP, unsigned long TypWyswietlacza, unsigned long TypDrukarki,
                         unsigned long Status, PChar Wersja )
{
//funkcja obslugi pytan o status
  char x[255],y[255];
  int licznik;

  Form1->memo->Clear();
  Form1->bStatus->Enabled=True;
  Form1->bStatus->SetFocus();
  for (licznik=0;licznik<255;licznik++)
  {
   x[licznik]=0;
   y[licznik]=0;
  }
  StrCopy(x,"Numer IP: ");
  StrCat(x,AdresIP);
  Form1->memo->Lines->Add(x);
  StrCopy(x,"");
  StrCopy(x,"Typ wyswietlacza.: ");
  StrCopy(y,"");
  StrCat(x,StrPCopy(y,IntToStr(TypWyswietlacza)));
  Form1->memo->Lines->Add(x);
  StrCopy(x,"");
  StrCopy(x,"Typ drukarki: ");
  StrCat(x, StrPCopy(y,IntToStr(TypDrukarki)));
  Form1->memo->Lines->Add(x);
  StrCopy(x,"");
  StrCopy(x,"Status:");
  StrCopy(y,"");
  Form1->memo->Lines->Add(StrCat(x,StrPCopy(y,IntToStr(Status))));
  StrCopy(x,"");
  StrCopy(x,"Wersja:");
  StrCat(x,Wersja);
  Form1->memo->Lines->Add(x);

  return 0;
}

TZdarzenieBarkod Barkod(PChar AdresIP, PChar Barkod, PChar TekstNaWyswietlacz,
                        unsigned long *RodzajDzwieku, unsigned long *CzasWyswietlania, PChar TekstDoDrukarki)
{
//funkcja obslugi pytan o barkod
  char Tmp[41];
  int t;

  Form1->memo->Clear();
  for (t=0;t<41;t++)
   Tmp[t]=0x00;

  if (Form1->Edit1->Text!=inet_addr(AdresIP))
   Form1->Edit1->Text = StrPas(AdresIP);

  StrPCopy(Tmp,"Pytanie ze sprawdzarki:");
  Form1->memo->Lines->Add(Tmp);
  Form1->memo->Lines->Add(AdresIP);
  Form1->memo->Lines->Add(Barkod);

  Form1->memo->Lines->Add("Wysłano na wyświetlacz sprawdzarki:");

  if (StrComp(Barkod1,Barkod)==0)
     StrCopy(TekstNaWyswietlacz,OdpowiedzNaBarkod1);
  else if (StrComp(Barkod2,Barkod)==0)
     StrCopy(TekstNaWyswietlacz,OdpowiedzNaBarkod2);
  else if (StrComp(Barkod3,Barkod)==0)
     StrCopy(TekstNaWyswietlacz,OdpowiedzNaBarkod3);
  else if (StrComp(Barkod4,Barkod)==0)
     StrCopy(TekstNaWyswietlacz,OdpowiedzNaBarkod4);
  else if (StrComp(Barkod5,Barkod)==0)
     StrCopy(TekstNaWyswietlacz,OdpowiedzNaBarkod5);
  else if (StrComp(Barkod6,Barkod)==0)
     StrCopy(TekstNaWyswietlacz,OdpowiedzNaBarkod6);
  else
    {
     StrCopy(TekstNaWyswietlacz,OdpowiedzNaBarkod7);
     StrCat(TekstNaWyswietlacz, Barkod);
     if (strlen(TekstNaWyswietlacz)<40)
     {
       TekstNaWyswietlacz[strlen(TekstNaWyswietlacz)]=0x0A;
       TekstNaWyswietlacz[strlen(TekstNaWyswietlacz)+1]=0x00;
     }
    }
  Form1->memo->Lines->Add(TekstNaWyswietlacz);
  for (t=0;t<41;t++)
   TekstNaWyswietlacz[t]=NaLatin2(TekstNaWyswietlacz[t]);

  StrCopy(TekstDoDrukarki,"01234567890012345678900123456789001234567890");
  *RodzajDzwieku=0;
  *CzasWyswietlania=3;

  return 0;
}

TZdarzenieBlad Blad (PChar AdresIP, unsigned long TypTransmisji,
                    unsigned long  NrBledu, PChar OpisBledu)
{
//funkcja obslugi bledow transmisji do/z sprawdzarek
 PChar x,y;
 int licznik;

 x=(PChar)malloc(255);
 y=(PChar)malloc(255);
 Form1->bStatus->Enabled=True;
 Form1->bStatus->SetFocus();

  StrCopy(x,"Numer IP: ");
  StrCat(x,AdresIP);
  Form1->memo->Lines->Add(x);

  StrCopy(x,"Numer błędu: ");
  StrCopy(y,"");
  StrCat(x, StrPCopy(y,IntToStr(NrBledu)));
  Form1->memo->Lines->Add(x);
  Form1->memo->Lines->Add(OpisBledu);
  free(x);
  free(y);
  return 0;
}

void __fastcall TForm1::bStatusClick(TObject *Sender)
{
//pytanie o status
  PChar x;
  int l;

  x=(PChar)malloc(255);

  Form1->bStatus->Enabled=False;

  StrPCopy(x,Form1->Edit1->Text);
  GetStatus(x);
  free(x);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Rekl1Click(TObject *Sender)
{
//zapis tekstow reklamowych
 char x[255];
 char Tmp[255];
 unsigned int licznik;

 Form1->memo->Clear();
 Form1->memo->Lines->Add("Wpis tekstów reklamowych...");

 for (licznik=0;licznik<StrLen(TekstReklamowy1);licznik++)
  Tmp[licznik]=NaLatin2(TekstReklamowy1[licznik]);
 Tmp[strlen(TekstReklamowy1)+1]=0x00;
 Form1->memo->Lines->Add(TekstReklamowy1);
 TekstReklamowy(StrPCopy(x,Form1->Edit1->Text),0,Tmp,3,0);

 for (licznik=0;licznik<StrLen(TekstReklamowy2);licznik++)
  Tmp[licznik]=NaLatin2(TekstReklamowy2[licznik]);
 Tmp[strlen(TekstReklamowy2)+1]=0x00;
 Form1->memo->Lines->Add(TekstReklamowy2);
 TekstReklamowy(StrPCopy(x,Form1->Edit1->Text),1,Tmp,3,0);

 for (licznik=0;licznik<StrLen(TekstReklamowy3);licznik++)
  Tmp[licznik]=NaLatin2(TekstReklamowy3[licznik]);
 Tmp[strlen(TekstReklamowy3)+1]=0x00;
 Form1->memo->Lines->Add(TekstReklamowy3);
 TekstReklamowy(StrPCopy(x,Form1->Edit1->Text),2,Tmp,3,0);

}
//---------------------------------------------------------------------------


void __fastcall TForm1::Stale1Click(TObject *Sender)
{
//zapis tekstow stalych
 char Tmp[255], x[255];
 unsigned int licznik;

 Form1->memo->Clear();
 for (licznik=0;licznik<StrLen(TekstStaly1);licznik++)
  Tmp[licznik]=NaLatin2(TekstStaly1[licznik]);
 Tmp[strlen(TekstStaly1)+1]=0x00;

 Form1->memo->Lines->Add("Wpis tekstów stałych...");
 Form1->memo->Lines->Add(TekstStaly1);
 TekstStaly(StrPCopy(x,Form1->Edit1->Text),3,Tmp,3);
 for (licznik=0;licznik<StrLen(TekstStaly2);licznik++)
  Tmp[licznik]=NaLatin2(TekstStaly2[licznik]);
 Tmp[strlen(TekstStaly2)+1]=0x00;
 Form1->memo->Lines->Add(TekstStaly2);
 TekstStaly(StrPCopy(x,Form1->Edit1->Text),4,Tmp,3);
 }
//---------------------------------------------------------------------------


void __fastcall TForm1::Stale2Click(TObject *Sender)
{
//zapis tekstow stalych
 char Tmp[255], x[255];
 unsigned int licznik;

 Form1->memo->Clear();

 for (licznik=0;licznik<StrLen(TekstStaly3);licznik++)
  Tmp[licznik]=NaLatin2(TekstStaly3[licznik]);
 Tmp[StrLen(TekstStaly3)+1]=0x00;
 Form1->memo->Lines->Add("Wpis tekstów stałych...");
 Form1->memo->Lines->Add(TekstStaly3);
 TekstStaly(StrPCopy(x,Form1->Edit1->Text),3,Tmp,3);
 for (licznik=0;licznik<StrLen(TekstStaly4);licznik++)
  Tmp[licznik]=NaLatin2(TekstStaly4[licznik]);
 Tmp[StrLen(TekstStaly4)+1]=0x00;
 Form1->memo->Lines->Add(TekstStaly4);
 TekstStaly(StrPCopy(x,Form1->Edit1->Text),4,Tmp,3);
}
//---------------------------------------------------------------------------



void __fastcall TForm1::FormCreate(TObject *Sender)
{
//uzyskanie adresow funkcji z biblioteki spr_lan.dll
        hDll = ::LoadLibrary("spr_lan.dll");
        if (hDll!=NULL)
        {
         ObslugaSprawdzarekStart=(UruchomionoObslugeSprawdzarek1)GetProcAddress(hDll,"UruchomionoObslugeSprawdzarek");
         TekstReklamowy=(WpiszTekstReklamowy1)GetProcAddress(hDll,"WpiszTekstReklamowy");
         TekstStaly=(WpiszTekstStaly1)GetProcAddress(hDll,"WpiszTekstStaly");
         GetStatus=(OdczytajStatus1)GetProcAddress(hDll, "OdczytajStatus");
         ObslugaSprawdzarekStop=(ZatrzymanieObslugiSprawdzarek1)GetProcAddress(hDll, "ZatrzymanieObslugiSprawdzarek");
//uruchomienie obslugi sprawdzarek
         ObslugaSprawdzarekStart(&NrBledu,OpisBledu,(TZdarzenieBarkod) Barkod,
          (TZdarzenieStatus) Status, (TZdarzenieBlad) Blad);
         if (NrBledu!=0)
          {
           Form1->memo->Lines->Add("Błąd inicjalizacji obslugi sprawdzarek:");
           Form1->memo->Lines->Add(OpisBledu);
          }
         else
           Form1->memo->Lines->Add("Przyłóż kod kreskowy pod czytnik...");
        }
        else
        {
          ShowMessage("Brak biblioteki spr_lan.dll");
          Application->Terminate();
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
//zatrzymanie obslugi sprawdzarek i zatrzymanie biblioteki
   ObslugaSprawdzarekStop();
   FreeLibrary(hDll);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Rekl2Click(TObject *Sender)
{
 char x[255];
 char Tmp[255];
 unsigned int licznik;

 Form1->memo->Clear();
 Form1->memo->Lines->Add("Wpis tekstów reklamowych...");

 for (licznik=0;licznik<StrLen(TekstReklamowy4);licznik++)
  Tmp[licznik]=NaLatin2(TekstReklamowy4[licznik]);
 Tmp[StrLen(TekstReklamowy4)+1]=0x00;
 Form1->memo->Lines->Add(TekstReklamowy4);
 TekstReklamowy(StrPCopy(x,Form1->Edit1->Text),0,Tmp,3,0);

 for (licznik=0;licznik<StrLen(TekstReklamowy5);licznik++)
  Tmp[licznik]=NaLatin2(TekstReklamowy5[licznik]);
 Tmp[StrLen(TekstReklamowy5)+1]=0x00;
 Form1->memo->Lines->Add(TekstReklamowy5);
 TekstReklamowy(StrPCopy(x,Form1->Edit1->Text),1,Tmp,3,0);

 for (licznik=0;licznik<StrLen(TekstReklamowy6);licznik++)
  Tmp[licznik]=NaLatin2(TekstReklamowy6[licznik]);
 Tmp[StrLen(TekstReklamowy6)+1]=0x00;
 Form1->memo->Lines->Add(TekstReklamowy6);
 TekstReklamowy(StrPCopy(x,Form1->Edit1->Text),2,Tmp,3,0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::KasujReklClick(TObject *Sender)
{
 char x[255];
 char Tmp[3];
 unsigned int licznik;

 Tmp[0]=0x0A;
 Tmp[1]=0x0A;
 Tmp[2]=0x00;
 Form1->memo->Clear();
 for (licznik=0;licznik<9;licznik++)
  TekstReklamowy(StrPCopy(x,Form1->Edit1->Text),licznik,Tmp,3,0);
 Form1->memo->Lines->Add("Kasowanie tekstów reklamowych");
}
//---------------------------------------------------------------------------

