summaryrefslogtreecommitdiff
path: root/support/konwerter/operacje.cc
diff options
context:
space:
mode:
Diffstat (limited to 'support/konwerter/operacje.cc')
-rw-r--r--support/konwerter/operacje.cc1315
1 files changed, 1315 insertions, 0 deletions
diff --git a/support/konwerter/operacje.cc b/support/konwerter/operacje.cc
new file mode 100644
index 0000000000..229d59c967
--- /dev/null
+++ b/support/konwerter/operacje.cc
@@ -0,0 +1,1315 @@
+
+ /***************************************************************************
+ * *
+ * Copyright (C) 2005 Piotr Wawrzyniak (piti@piti.vsv.pl *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+
+#include"operacje.h"
+#include"czyt_zapis.h"
+#include"dl_wiersza.h"
+#include<stdlib.h>
+#include<ctype.h>
+#include<stdio.h>
+#include<unistd.h>
+#include"num_na_etyk.h"
+#include"prz_string.h"
+#include"system_zapisu.h"
+
+int przeszukaj_linie(char*,char*,ifstream&); //przeszukuje linie eps
+int przetworz_eps(char*,kol_etykiet**);
+int przeszukaj_linie_eps(char*,char*,int&);
+int podaj_etykiete_liczbe(char *, char *, int *);
+int zwroc_numer_etykiety(kol_etykiet*,char*,kol_etykiet**);
+int przed_etykieta_po(char,char*,char*,char*,char);
+int check_counter_to_set(char*);
+
+struct kolejka_w_eps
+{
+ int numer;
+ char etykieta[DL_WIERSZA];
+ kolejka_w_eps*nast;
+
+};
+
+int wloz_na_liste(kolejka_w_eps*,kol_etykiet**);
+
+//ifstream czyt;
+//ofstream pisz;
+
+
+extern char numer_czy_etykieta;//przyjmuje dwie wartości n-numeruje e-nadaje etykiety;
+extern int zacznij_numery_od;//od jakiej liczby zacząć numerację
+extern r_numerow klasa_obslugi_etykiet;
+extern int debug_level;
+extern int ignore_set_counter_to;
+extern int language;
+extern int test;
+
+
+//Funkcja przetwarzaj plik zajmuje się szukaniem etykiet i plików eps w pliku texowym
+//jeśli znajdzie podejmuje akcje w zależności co znalazła
+int przetwarzaj_plik(char *argv1, /*char *argv2,*/kol_etykiet **wierzcholek)
+{
+ ifstream czyt;
+ czyt.open(argv1);
+ if(!czyt)
+ {
+ if(language==0)
+ {
+ cout<<"Nie moge otworzyć pliku "<<argv1<<endl;
+ }
+ else
+ {
+ cout<<"Couldn't open file "<<argv1<<endl;
+ }
+ return 1;
+ }
+ char c[DL_WIERSZA];//zmienna zawierająca linie
+ c[DL_WIERSZA-1]='\0';//tak na wszelki wypadek aby zapobiec przepełnieniu bufora
+ int dl_lini;
+ char nazwa_pliku[DL_WIERSZA];
+ nazwa_pliku[DL_WIERSZA-1]='\0';
+ while(!wczytaj_linie(c,&dl_lini,DL_WIERSZA,czyt)) //wczytaj_linie belongs to czyt_zapis.cc
+ {
+ if(numer_czy_etykieta!='e'&&!ignore_set_counter_to)
+ check_counter_to_set(c);
+ switch(przeszukaj_linie(c,nazwa_pliku,czyt))
+ {
+ case 0://Znalazłem plik eps więc muszą go przetworzyć.
+ {
+ //odtwarzam etykiety w plikach eps
+ if(numer_czy_etykieta=='e')
+ num_na_etyk(nazwa_pliku);//change numbers to lables
+ //przetwarzam eps, tzn zamieniam etykiety na numery
+ else
+ przetworz_eps(nazwa_pliku,wierzcholek); //change labels to numbers
+ break;
+ }
+ case 6://if input command was found in tex file
+ {
+ if(przetwarzaj_plik(nazwa_pliku,/*argv2,*/wierzcholek))
+ return 1;
+ break;
+ }
+ }
+ }
+ if(!czyt.eof()) //if we did not finish reading file
+ {
+ if(language==0)
+ {
+ cout<<"Błąd czytania"<<endl;
+ }
+ else
+ {
+ cout<<"Reading error"<<endl;
+ }
+ return 1;
+ }
+ czyt.close();
+ return 0;
+}
+
+
+//function that search for tex files and input command in tex file
+int przeszukaj_linie(char *linia,char *nazwa_pliku,ifstream &czyt)
+{//1
+ char pom_nazwa_pliku[DL_WIERSZA];
+ pom_nazwa_pliku[DL_WIERSZA-1]='\0';
+ char polecenie[]="?plik";//definiuje nazwę polecenia do znalezienia
+ char polecenie2[]="input{";//definiuje nzawę do znalezienia
+ int a;// zero jeśli udało się skopiować string
+ while(isblank(*linia))
+ linia++;
+
+ if (*linia=='%')
+ { //2
+ linia++;
+ a=strncmp(linia,polecenie,5);
+ if(!a)
+ {//3
+ linia=linia+5;
+ if (*linia!='{')
+ return 1; //jeśli nie ma nawiasu zwróć błąd
+ else
+ {//4
+ linia++;
+ int licznik=0;
+ if (*linia=='}')return 2;//jeśli nie ma nazwy pliku zwróć błąd przypadek %?{}
+ int czykoniec=0;
+ do
+ {//5
+ if(*(linia+licznik)=='}')
+ {//skopiuj nazwę pliku
+ strncpy(pom_nazwa_pliku,linia,licznik);
+ pom_nazwa_pliku[licznik]='\0';
+ czykoniec=1;}
+ else
+ if(*(linia+licznik)=='\n')
+ {
+ return 3;
+ }
+ //jeśli nie ma
+ else
+ licznik++;
+ }//5
+ while(!czykoniec);
+ strcpy(nazwa_pliku,pom_nazwa_pliku);
+ nazwa_pliku[licznik]='\0';
+ return 0;//jeśli sukces to zwróć to
+ }//4
+ }//3
+ else return 4; //to nie jest polecenia
+ }//2
+ else
+ if(*linia=='\\')
+ {//6
+ linia++;
+ if(!strncmp(linia,polecenie2,6))
+ {//7
+ linia+=6;
+ int licznik=0;
+ if (*linia=='}')return 2;//jeśli nie ma nazwy pliku zwróć błąd przypadek %?{}
+ int czykoniec=0;
+ do
+ {//5
+ if(*(linia+licznik)=='}')
+ {strncpy(pom_nazwa_pliku,linia,licznik); czykoniec=1;}//skopiuj nazwę pliku
+ else
+ if(*(linia+licznik)=='\n')
+ {
+ return 3;
+ }//jeśli nie ma }
+ else
+ licznik++;
+ }//5
+ while(!czykoniec);
+ strcpy(nazwa_pliku,pom_nazwa_pliku);
+ nazwa_pliku[licznik]='\0';
+ return 6;//zwraca nazwę pliku LaTeXa
+ }//7
+ else
+ return 4;//nie rób nic
+ }//6
+ return 4;//linia nie zaczyna się od % ani backlsasha
+}//1
+
+//change labels to numbers in eps file
+int przetworz_eps(char *nazwa_pliku,kol_etykiet**wierzcholek)
+{
+ kolejka_w_eps*pierwszy_element=NULL;
+ char nazwa_eps_tymcz[]="konwXXXXXX";//temporary file name
+ mkstemp(nazwa_eps_tymcz);//creation of temporary file
+
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Plik eps jest kopiowany do pliku "<<nazwa_eps_tymcz<<endl;
+ cout<<"Otwieranie pliku tymczasowego do zapisu"<<endl;
+ }
+ else
+ {
+ cout<<"The eps file copied to "<<nazwa_eps_tymcz<<" file"<<endl;
+ cout<<"Opening the temporary file for writing"<<endl;
+ }
+
+ }
+
+ ofstream plik_tymcz(nazwa_eps_tymcz);//temporary file opening
+ if(!plik_tymcz)
+ {
+ if(language==0)
+ {
+ cout<<"Nie udało mi się otworzyć pliku tymczasowego"<<endl;
+ }
+ else
+ {
+ cout<<"Couldn't open temporary file"<<endl;
+ }
+ return 1;
+ }
+
+ ifstream plik_eps(nazwa_pliku); //eps file opening
+ if(!plik_eps)
+ {
+ if(language==0)
+ {
+ cout<<"Brakuje pliku "<<nazwa_pliku<<", lub brak praw."<< endl;
+ }
+ else
+ {
+ cout<<"Missing file "<<nazwa_pliku<<", or access forbidden"<<endl;
+ }
+ return 1;
+ }
+ if(language==0)
+ {
+ cout<<"Znalazłem plik "<<nazwa_pliku<<"."<<endl;
+ }
+ else
+ {
+ cout<<"File "<<nazwa_pliku<<" found."<<endl;
+ }
+ int dl_lini;
+ int kolejnosc;
+ char c[DL_WIERSZA];
+ char etykieta[DL_WIERSZA];
+
+
+ //local label queue building
+ while(!wczytaj_linie(c,&dl_lini,DL_WIERSZA,plik_eps))//reads line from eps file
+ {
+ //searching eps line for labels. Returning 1 means label
+ if(przeszukaj_linie_eps(c,etykieta,kolejnosc))//jeśli zwróci 1 oznacza że znalazł etykietę
+ {//początek if
+ if(*c!='%')plik_tymcz<<'%'<<c;
+ plik_tymcz<<c;
+ if(!pierwszy_element)//if 2
+ {//1
+ pierwszy_element=new kolejka_w_eps;
+ pierwszy_element->nast=NULL;
+ strcpy(pierwszy_element->etykieta,etykieta);
+ pierwszy_element->numer=kolejnosc;
+ }//1
+ //W przeciwnym wypadku jeśli lista ma już przynajmniej pierwszy element zrób to co poniżej tzn
+ else//if 2
+ {
+ kolejka_w_eps*nowy_element=new kolejka_w_eps;//tworze nowy element
+ nowy_element->numer=kolejnosc;//nadaje mu wartości początkowe - kolejność
+ nowy_element->nast=NULL;//nadaje mu wartości początkowe - następny
+ strcpy(nowy_element->etykieta,etykieta);//nadaje mu wartości początkowe - etykieta
+ //jeśli nowy element jest mniejszy lub równy pierwszemu z listy to wstaw go przed niego
+ if((nowy_element->numer)<=(pierwszy_element->numer))
+ {
+ nowy_element->nast=pierwszy_element;
+ pierwszy_element=nowy_element;
+ }
+
+ //no dobrze nie jest mniejszy ani równy wobec tego wstaw go w odpowiedie miejsce w liście
+ else//2
+ {
+ //tworze wskaźnik do zmiennej który wskazuje na pierwszy element
+ kolejka_w_eps*bierzacy_element=pierwszy_element;//pomocnicza zmnienna
+ //tworze wskaźnik to zmiennej który wskazuje na bierzacy_element
+ kolejka_w_eps*pomocnicza=bierzacy_element;//pomocnicza zmnienna
+ //do czasu aż kolejność z nowego będzie większa od kolejności z bierzącego i jednocześnie
+ //bierzący element nie będzie ostatnim wykonuj tę pętlę
+ while(((nowy_element->numer)>(bierzacy_element->numer))&&(bierzacy_element->nast))
+ {
+ pomocnicza=bierzacy_element;//pomocnicza wskazuje na 1 element bliżej niż bierz_element
+ //bierzacy_element przeskakuje o jedno pole dalej
+ bierzacy_element=bierzacy_element->nast;
+ }
+ {
+ //jeśli bierzący element jest ostatnim elementem na liście i jednocześnie jest mniejszy
+ //lub równy od nowego to nowy dostaw na końcu listy
+ if(!bierzacy_element->nast&&((bierzacy_element->numer)<=(nowy_element->numer)))
+ {
+ bierzacy_element->nast=nowy_element;
+ }
+
+ //w przeciwnym wypadku wstaw go w znalezione miejsce
+ else
+ {
+ pomocnicza->nast=nowy_element;
+ nowy_element->nast=bierzacy_element;
+ }
+ }
+ }//koniec else 2
+ }//koniec else 1
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Czytanie linii z pliku eps: "<<c<<endl;
+ cout<<"Etykietka: "<<etykieta<<endl;
+ cout<<"Numer: "<<kolejnosc<<endl;
+ }
+ else
+ {
+ cout<<"Readed line from eps file: "<<c<<endl;
+ cout<<"The label: "<<etykieta<<endl;
+ cout<<"The number: "<<kolejnosc<<endl;
+ }
+ }
+ }
+ else
+ plik_tymcz<<c;
+
+ //zerujemy wczytaną linie (zmienna c) oraz etykietę inaczej są szopki
+
+ }//koniec while;
+
+ //zakończyło się budowanie kolejki etykiet z pliku eps teraz należy je wprowadzić na listę etykiet
+ //globalnych
+ //global queue building
+ //wkładanie na globalną kolejkę etykiet
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Budowanie globalnej kolejki etykiet"<<endl;
+ }
+ else
+ {
+ cout<<"Global label queue building"<<endl;
+ }
+ }
+ {
+ kolejka_w_eps*pomocnicza=pierwszy_element;
+ while(pomocnicza)
+ {
+ wloz_na_liste(pomocnicza,wierzcholek);
+ pierwszy_element=pomocnicza;
+ pomocnicza=pomocnicza->nast;
+ delete pierwszy_element;
+ }
+ }
+
+ if(debug_level)
+ {
+ if (language==0)
+ {
+ cout<<endl<<"Budowanie globalnej kolejki etykiet: "<<endl;
+ }
+ else
+ {
+ cout<<endl<<"The global label queue printing: "<<endl;
+ }
+ kol_etykiet*pomocnicza_2=*wierzcholek;
+ while(pomocnicza_2)
+ {
+ if(language==0)
+ {
+ cout<<"Etykieta "<<pomocnicza_2->etykieta<<endl;
+ cout<<"Numer "<<pomocnicza_2->kolejny_numer<<endl;
+ cout<<"String numer "<<pomocnicza_2->kolejny_numer_string<<endl;
+ pomocnicza_2=pomocnicza_2->nast;
+
+ }
+ else
+ {
+ cout<<"Label "<<pomocnicza_2->etykieta<<endl;
+ cout<<"Number "<<pomocnicza_2->kolejny_numer<<endl;
+ cout<<"String number "<<pomocnicza_2->kolejny_numer_string<<endl;
+ pomocnicza_2=pomocnicza_2->nast;
+ }
+ }
+ if(language==0)
+ {
+ cout<<"Zakończyłem pracę z plikiem "<<nazwa_pliku<<endl;
+ }
+ else
+ {
+ cout<<"I have finished "<<nazwa_pliku<<" file"<<endl;
+ }
+ }
+ plik_eps.close();
+ plik_tymcz.close();
+
+ //Kopiowanie pliku tymczasowego na eps
+ //Copying temporary file to eps file.
+
+ if(!test)
+ {
+
+ //plik_eps.open(nazwa_eps_tymcz);
+ ifstream plik_eps(nazwa_eps_tymcz);//otwieram plik tymczasowy do odczytu aby go skopiować na pierwotny eps. Nie sugerować się nazwą zmiennej.
+ if (!plik_eps)
+ {
+ if(language==0)
+ {
+ cout<<"Nie mogę otworzyć pliku tymczasowego "<<nazwa_eps_tymcz<<" do czytania"<<endl;
+ }
+ else
+ {
+ cout<<"Couldn't open temporary file: "<<nazwa_eps_tymcz<<" for reading"<<endl;
+ }
+ return 1;
+ }
+ //plik_tymcz.open(nazwa_pliku);
+ ofstream plik_tymcz(nazwa_pliku);//otwieram plik główny eps do zapisu aby skopiować do niego zawartość pliku tymczasowego. Nie sugerować się nazwą zmiennej.
+ //Brak logiki wynika z lenistwa. Nie chciało mi się poprawiać parę linii więc jest jak jest.
+ if (!plik_tymcz)
+ {
+ if(language==0)
+ {
+ cout<<"Nie mogę otworzyć pliku "<<nazwa_pliku<<" do zapisu"<<endl;
+ }
+ else
+ {
+ cout<<"Couldn't open file: "<<nazwa_pliku<<" for writing"<<endl;
+ }
+ return 1;
+ }
+
+ int numer_etykiety;
+ char przed[DL_WIERSZA];
+ char po[DL_WIERSZA];
+ przed[DL_WIERSZA-1]=po[DL_WIERSZA-1]='\0';
+ while(!wczytaj_linie(c,&dl_lini,DL_WIERSZA,plik_eps))
+ {
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Kopiowanie pliku tymczasowego na główny eps. Przeczytana linia: "<<c<<endl;
+ }
+ else
+ {
+ cout<<"Copying the temporary file to main eps. The read line is: "<<c<<endl;
+ }
+ }
+ if(przeszukaj_linie_eps(c,etykieta,kolejnosc))//jeśli zwróci 1 oznacza że znalazł etykietę
+ {
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Odnaleziono linijkę z etykietką. Analizuję."<<endl;
+ cout<<"Zmienna etykieka wynosi: "<<etykieta<<endl;
+ cout<<"Zmienna c - linia wynosi: "<<c<<endl;
+ }
+ else
+ {
+ cout<<"I found the line with label. Analyzing."<<endl;
+ cout<<"The etykieta variable is equal: "<<etykieta<<endl;
+ cout<<"The c variable - the line is equal: "<<c<<endl;
+ }
+ }
+ kol_etykiet *zmienna_tymczasowa1;
+ kol_etykiet**zmienna_tymczasowa=&zmienna_tymczasowa1;
+ plik_tymcz<<c;//zapisz linie etykiety z %
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Sprawdzanie który numerek na etykieta. ";
+ cout<<"Dane dla wywołanie funkcji:"<<endl;
+ cout<<"*wierzcholek->etykieta: "<<(*wierzcholek)->etykieta<<endl;
+ cout<<"zmienna_tymczasowa: "<<zmienna_tymczasowa<<endl;
+ }
+ else
+ {
+ cout<<"Checking which number has the label. ";
+ cout<<"The data for function calling:"<<endl;
+ cout<<"*wierzcholek->etykieta: "<<(*wierzcholek)->etykieta<<endl;
+ cout<<"zmienna_tymczasowa: "<<zmienna_tymczasowa<<endl;
+ }
+ }
+ numer_etykiety=zwroc_numer_etykiety(*wierzcholek,etykieta,zmienna_tymczasowa);
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Numer został sprawdzony i wynosi: "<<numer_etykiety<<endl<<endl;
+ }
+ else
+ {
+ cout<<"The number was checked and is equal: "<<numer_etykiety<<endl<<endl;
+ }
+ }
+ if(przed_etykieta_po('{',c,przed,po,'}')) numer_etykiety=0;//jeśli funkcja zwróci 1 to oznacza błąd
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Funkcj przed_etykieta_po sprawdziła etykietkę.Zmienna kolejny_numer_string wynosi: "
+ <<(*zmienna_tymczasowa)->kolejny_numer_string<<endl;
+ }
+ else
+ {
+ cout<<"Function przed_etykieta_po has checked the label. Variable kolejny_numer_string is equal: "
+ <<(*zmienna_tymczasowa)->kolejny_numer_string<<endl;
+ }
+ }
+
+ if(numer_etykiety)//jeśli numer_etykiety=0 oznacza to że nie znalazł etykiety na liście
+ {//początek if
+ char przed1[DL_WIERSZA];
+ int taka_sobie=strlen(przed);
+ strncpy(przed1,przed,taka_sobie-4);
+ przed1[taka_sobie-4]='\0';
+ //char *po1=&po[1];
+ char *po1=&po[1];
+ if(debug_level)
+ {
+
+ if(language==0)
+ {
+ cout<<"Następująca linia jest zapisywana do pliku eps:"<<endl
+ <<"przed1: "<<przed<<endl
+ <<"(*zmienna_tymczasowa)->kolejny_numer_string: "
+ <<(*zmienna_tymczasowa)->kolejny_numer_string<<endl
+ <<"po1: "<<po1<<endl;
+ }
+ else
+ {
+ cout<<"The following line is saved in eps file:"<<endl
+ <<"przed1: "<<przed<<endl
+ <<"(*zmienna_tymczasowa)->kolejny_numer_string: "
+ <<(*zmienna_tymczasowa)->kolejny_numer_string<<endl
+ <<"po1: "<<po1<<endl;
+ }
+ }
+
+ plik_tymcz<<przed1<<(*zmienna_tymczasowa)->kolejny_numer_string<<po1;//zapisz numer etykiety
+ wczytaj_linie(c,&dl_lini,DL_WIERSZA,plik_eps);//w pliku pom za etykietą z % jest zwykła
+ //więc ją wont
+ /**************************************************************************/
+
+ }//koniec if
+ else //jeśli nie zalazłeś etykiety na liście zapisz jej nazwę do pliku. Nazwa ukryta pod zmienną c
+ {
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Etykietka nie została znalezionalist. Writing all in eps file."<<endl
+ <<"Writing the following line "<<c<<endl;
+ }
+ else
+ {
+ cout<<"The label was not found on the list. Writing all in eps file."<<endl
+ <<"Writing the following line "<<c<<endl;
+ }
+ }
+ char*ggg=c;
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Zmienna ggg wynosi: "<<ggg<<endl;
+ }
+ else
+ {
+ cout<<"The ggg variable: "<<ggg<<endl;
+ }
+ }
+ ggg++;
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Zmienna ggg++ wynosi: "<<ggg<<endl;
+ }
+ else
+ {
+ cout<<"The ggg++ variable: "<<ggg<<endl;
+ }
+ }
+ plik_tymcz<<ggg;
+ }
+ }
+ else
+ {
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Etykietka nie została znaleziona. Zapisywanie do pliku eps linii:"<<endl
+ <<"linia c: "<<c<<endl;
+ }
+ else
+ {
+ cout<<"The label was not found. Writing to eps file line:"<<endl
+ <<"linia c: "<<c<<endl;
+ }
+ }
+ plik_tymcz<<c;//jeśli nie ma etykiety to zapisz linie
+ }
+ }
+ plik_tymcz.close();
+ plik_eps.close();
+ }
+ unlink(nazwa_eps_tymcz);
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Zakończone kopiowanie pliku tymczasowego eps na główny eps."<<endl;
+ }
+ else
+ {
+ cout<<"The copying of temporary file to main eps is finished."<<endl;
+ }
+ }
+ return 0;
+}
+
+int przeszukaj_linie_eps(char *linia, char *etykieta, int &kolejnosc)
+{
+ /*funkcja zwróci wartość 0, jeśli nie znajdzie etykiety w linii
+ funkcja zwróci wartość 1, jeśli znajdzie etykietę w linii. Etykieta nie była komentarzem
+ funkcja zwróci wartość 2, jeśli znajdzie etykietę w linii. Etykieta była komentarzem.*/
+ int czy_znalazlem;
+
+ /*funkcja bm() jest funkcją obecną w pliku prz_string.cc. Jej zadaniem jest szukanie wzorca w stringu.
+ jeśli znajdzie zwraca pozycję w której się znajduje, jeśli nie to zwraca -1*/
+ czy_znalazlem=bm("?et{",linia);//zwraca numer na którym znalazł wzorzec zaczyna od 0
+ if(czy_znalazlem>-1)
+ {
+ int *taka_sobie_zmienna=&kolejnosc;
+ if(podaj_etykiete_liczbe(linia,etykieta,taka_sobie_zmienna))
+ {
+ if(language==0)
+ {
+ cout<<"****************************************************************"<<endl
+ <<"Znalazłem niepoprawne etykiety w tym pliku. Proszę je sprawdzić."<<endl
+ <<"Typowe błędy to różne fonty w etykiecie, brak } na końcu,"<<endl
+ <<"albo litery po średniku zamiast cyfr"<<endl
+ <<"***************************************************************"<<endl<<endl;
+ }
+ else
+ {
+ cout<<"**************************************************************"<<endl
+ <<"I have found incorrect labels in this file. Please check them."<<endl
+ <<"Typical mistakes can be different fonts in label, } missing"<<endl
+ <<"or the letters after semicolon instead of numbers"<<endl
+ <<"***************************************************************"<<endl<<endl;
+
+ }
+
+ return 0;
+ }
+ else
+ return 1;
+ }
+ else
+ return 0;
+}
+
+int podaj_etykiete_liczbe(char *linia, char *etykieta, int *kolejnosc)
+{
+ //funkcja zwraca 0 w przypadku gdy znalazła poprawną etykietę i 1 gdy była niepoprawna
+ char pomocnicza[DL_WIERSZA];
+ pomocnicza[DL_WIERSZA-1]='\0';
+ int pozycja=0;
+ int if_bracket_found=0;
+
+ strcpy(pomocnicza,linia);
+ int n=0;
+ while(pomocnicza[n]!='{')
+ n++;
+ n++;
+ while((pomocnicza[n]!=';')&&(pomocnicza[n]!='}')&&(pomocnicza[n]!=')')&&(pomocnicza[n]!='\0'))
+ {
+ etykieta[pozycja]=pomocnicza[n];
+ n++;
+ pozycja++;
+ //if found ) bracket, that means that there was something wront with label
+ if(pomocnicza[n]==')')
+ if_bracket_found=1;
+ }
+ etykieta[pozycja]='\0';
+ //check if the label has any length or if maybe ) was found instead of ; or }
+ if (pozycja==0||if_bracket_found==1)
+ return 1;
+ //check if this bracket } was found if so, than label does not have any nuber after ; so return 0
+ if (pomocnicza[n]=='}')
+ return 0;
+
+ n++;
+ *kolejnosc=0;
+ while(pomocnicza[n]!='}'&&isdigit(pomocnicza[n]))
+ {
+ *kolejnosc=*kolejnosc*10+pomocnicza[n]-'0';
+ n++;
+ //the label must end with correct right }
+ if(pomocnicza[n]=='}')
+ if_bracket_found=1;
+ }
+ if(if_bracket_found==1)
+ return 0;
+ else
+ return 1;
+}
+
+
+//function that puts label to label queue
+int wloz_na_liste(kolejka_w_eps*rekord,kol_etykiet**wierzcholek)
+{
+ //Putting label into global label queue
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Wkładanie etykity na globalną kolejkę etykiet."<<endl;
+ cout<<"Etykietka: "<<rekord->etykieta<<endl;
+ }
+ else
+ {
+ cout<<"Putting the label to the global label queue."<<endl;
+ cout<<"The label: "<<rekord->etykieta<<endl;
+ }
+ }
+
+ if(!*wierzcholek)//There is no global label queue
+ {
+ //pobieramy numerek etykietki
+ //we are taking label number
+ //after function klasa_obslugi_etykiet.zwroc_numer_etykiety() will be ready
+ //one can find label in klasa_obslugi_etykiet.numer_etykietki variable
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Nie znaleziono jeszcze żadnej etykiety na liście. Wkładam pierwszą tetykietkę."<<endl;
+ cout<<"Etykietka: "<<rekord->etykieta<<" została włożona."<<endl;
+ }
+ else
+ {
+ cout<<"No label in the list. The first label will be placed."<<endl;
+ cout<<"The label: "<<rekord->etykieta<<" is placed."<<endl;
+ }
+ }
+ klasa_obslugi_etykiet.ustaw_zmienna_numer_etykietki(rekord->etykieta);
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Ustawianie zmiennej klasaa_obslugi_etykiet.numer_etykietki: "
+ <<klasa_obslugi_etykiet.numer_etykietki<<endl;
+ }
+ else
+ {
+ cout<<"Setting the klasa_obslugi_etykiet.numer_etykietki variable: "
+ <<klasa_obslugi_etykiet.numer_etykietki<<endl;
+ }
+ }
+
+ kol_etykiet*wierzcholek1=new kol_etykiet;
+ //check, if labels looks like :mbla.a.The label must be longer that 5 leters: :ba.d
+ int dlugosc=strlen(rekord->etykieta);
+ if(rekord->etykieta[dlugosc-2]=='.'&&dlugosc>=5)
+ {
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Etykietka wygląda następująco: mblah.a."<<endl;
+ cout<<"Wkładanie rdzenia etykietki do kolejki."<<endl;
+ }
+ else
+ {
+ cout<<"The label looks like: :mblah.a."<<endl;
+ cout<<"Putting the core to the queue"<<endl;
+ }
+ }
+ wierzcholek1->kolejny_numer=zacznij_numery_od;//historical meaning, to delete soon
+ //copy label to global label queue
+ strncpy(wierzcholek1->etykieta,rekord->etykieta,dlugosc-2);
+ //copy number as a string to global label queue
+ strcpy(wierzcholek1->kolejny_numer_string,klasa_obslugi_etykiet.numer_etykietki);
+ wierzcholek1->nast=NULL;
+ *wierzcholek=wierzcholek1;
+
+ //Włożony do kolejki rdzeń etykiety, tzn :ba, teraz czas włożyć całą etykietę:
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Rdzeń etykietki już istnieje na globalnej liście."<<endl;
+ cout<<"Czas włożyć tam całą atykietkę."<<endl;
+ }
+ else
+ {
+ cout<<"The core of the label is already there."<<endl;
+ cout<<"Time to put there all label"<<endl;
+ }
+ }
+ kol_etykiet*dada=wierzcholek1;
+ //kol_etykiet*wierzcholek1=new kol_etykiet;
+ wierzcholek1=new kol_etykiet;
+ dada->nast=wierzcholek1;
+ wierzcholek1->nast=NULL;
+
+ wierzcholek1->kolejny_numer=zacznij_numery_od;
+ strcpy(wierzcholek1->etykieta,rekord->etykieta);
+ strcpy(wierzcholek1->kolejny_numer_string,klasa_obslugi_etykiet.numer_etykietki);
+
+ //Jak na razie numer numer jest bez literki, czas ją dodać
+ char pom[3];
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Dokładanie literki do etykietki."<<endl;
+ }
+ else
+ {
+ cout<<"Adding the letter to the label"<<endl;
+ }
+ }
+ pom[0]=rekord->etykieta[dlugosc-1];pom[1]='\0';
+ strcat(wierzcholek1->kolejny_numer_string,pom);
+ }
+ else
+ {
+ wierzcholek1->kolejny_numer=zacznij_numery_od;
+ strcpy(wierzcholek1->etykieta,rekord->etykieta);
+ strcpy(wierzcholek1->kolejny_numer_string,klasa_obslugi_etykiet.numer_etykietki);
+ *wierzcholek=wierzcholek1;
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"************************************************************"<<endl;
+ cout<<"Etykietka ma więcej niż 3 literki i nie istnieje na globalnej kolejce etykiet."<<endl;
+ cout<<"Oto co jest wkładane:"<<endl;
+ cout<<"Numer: "<<wierzcholek1->kolejny_numer<<endl;
+ cout<<"Etukieta: "<<wierzcholek1->etykieta<<endl;
+ cout<<"Kolejny numer string: "<<wierzcholek1->kolejny_numer_string<<endl;
+ cout<<"============================================================"<<endl;
+ }
+ else
+ {
+ cout<<"************************************************************"<<endl;
+ cout<<"Label has more than 3 letters and doesn't exist on the list."<<endl;
+ cout<<"That what is putted:"<<endl;
+ cout<<"Number: "<<wierzcholek1->kolejny_numer<<endl;
+ cout<<"Label: "<<wierzcholek1->etykieta<<endl;
+ cout<<"Next string number: "<<wierzcholek1->kolejny_numer_string<<endl;
+ cout<<"============================================================"<<endl;
+ }
+ }
+ }
+ }
+
+ else
+ {//początek else
+
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"W kolejce istneją już etykiety. Wkładam następną"<<endl;
+ }
+ else
+ {
+ cout<<"There are already labels in the list. Building forward."<<endl;
+ }
+ }
+ //Lets look if the label exists in global label queue
+ kol_etykiet*nowy_element=*wierzcholek;
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Szukanie etykiety: "<<rekord->etykieta<<" na globalnej kolejce etykiet."<<endl;
+ }
+ else
+ {
+ cout<<"Looking if the label: "<<rekord->etykieta<<" exists ini the lobal label queue."<<endl;
+ }
+ }
+ while(strcmp(nowy_element->etykieta,rekord->etykieta)&&nowy_element->nast)
+ nowy_element=nowy_element->nast;
+ if(!strcmp(nowy_element->etykieta,rekord->etykieta))
+ {
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Etykieta: "<<rekord->etykieta<<" została znaleziona na globalnej liście. Opuszczam funkcję."<<endl;
+ }
+ else
+ {
+ cout<<"Label: "<<rekord->etykieta<<" found in the global label queue. Leaving function."<<endl;
+ }
+ }
+ return 0;
+ }
+ //find the last queue element
+ kol_etykiet*ostatni_element=*wierzcholek;
+ while(ostatni_element->nast)
+ ostatni_element=ostatni_element->nast;
+
+ //So we didn't find a label in global label queue, so lets put it there
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Etykieta: "<<rekord->etykieta<<" nie została znaleziona na liście. Wkładam ją tam"<<endl;
+ }
+ else
+ {
+ cout<<"The label: "<<rekord->etykieta<<" not found in the queue. Inserting."<<endl;
+ }
+ }
+ if(!nowy_element->nast)
+ {
+ int dlugosc=strlen(rekord->etykieta);
+ //Lets look how does label look like
+ //the label can be as: blach.a
+ if(dlugosc>=3&&rekord->etykieta[dlugosc-2]=='.')
+ {
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"****************************"<<endl;
+ cout<<"Etykietak ma postać: blach.a"<<endl;
+ }
+ else
+ {
+ cout<<"****************************"<<endl;
+ cout<<"The label looks like blach.a"<<endl;
+ }
+ }
+ char root_label[dlugosc];
+ strncpy(root_label,rekord->etykieta,dlugosc-2);
+ root_label[dlugosc-2]='\0';
+
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"root_label wygląda: "<<root_label<<endl;
+ cout<<"==========================="<<endl;
+ }
+ else
+ {
+ cout<<"root_label looks like: "<<root_label<<endl;
+ cout<<"==========================="<<endl;
+ }
+ }
+ //wyszukaj root_label na globalnej kolejce etykiet
+ kol_etykiet*iteruj=*wierzcholek;
+ while(strcmp(iteruj->etykieta,root_label)&&iteruj->nast)
+ iteruj=iteruj->nast;
+ //znalazłeś, czy skończyła się kolejka
+ //załóżmy że znalazłeś, więc pobierz jej numer, a nową dodaj do końca kolejki
+ if(!strcmp(iteruj->etykieta,root_label))
+ {
+ kol_etykiet*dodaj=new kol_etykiet;
+ dodaj->nast=NULL;
+ strcpy(dodaj->etykieta,rekord->etykieta);
+ strcpy(dodaj->kolejny_numer_string,iteruj->kolejny_numer_string);
+ dodaj->kolejny_numer_string[strlen(dodaj->kolejny_numer_string)]=rekord->etykieta[dlugosc-1];
+ ostatni_element->nast=dodaj;
+ if(debug_level)
+ cout<<"The label: "<<rekord->etykieta<<" found in the global label quere. Its number was copied."<<endl;
+ }
+
+ else //nie znaleźliśmy, więc trzeba dodać dwie: root_label i tę nową rozszerzoną
+ {
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"****************************************************************"<<endl;
+ cout<<"Etykietka nie istnieje na globalnej liście. Musi zostać dodana."<<endl;
+ }
+ else
+ {
+ cout<<"****************************************************************"<<endl;
+ cout<<"The label doesn't exist in the global list. Must be added."<<endl;
+ }
+ }
+ klasa_obslugi_etykiet.ustaw_zmienna_numer_etykietki(rekord->etykieta);
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Etykietka została pobrana używając funkcji ustaw_zmienną_numer_etykietki"<<endl;
+ cout<<"Oto rezultat klasa_obslugi_etykiet.numer_etykietki: "
+ <<klasa_obslugi_etykiet.numer_etykietki<<endl;
+ cout<<"================================================================"<<endl;
+ }
+ else
+ {
+ cout<<"The label number was taken using function ustaw_zmienną_numer_etykietki"<<endl;
+ cout<<"That is the result klasa_obslugi_etykiet.numer_etykietki: "
+ <<klasa_obslugi_etykiet.numer_etykietki<<endl;
+ cout<<"================================================================"<<endl;
+ }
+ }
+
+ kol_etykiet*dodaj=new kol_etykiet;
+ dodaj->nast=NULL;
+ strcpy(dodaj->etykieta,root_label);
+ strcpy(dodaj->kolejny_numer_string, klasa_obslugi_etykiet.numer_etykietki);
+ ostatni_element->nast=dodaj;
+ ostatni_element=dodaj;
+ dodaj=new kol_etykiet;
+ strcpy(dodaj->etykieta,rekord->etykieta);
+ strcpy(dodaj->kolejny_numer_string,ostatni_element->kolejny_numer_string);
+ dodaj->kolejny_numer_string[strlen(dodaj->kolejny_numer_string)]=rekord->etykieta[dlugosc-1];
+ ostatni_element->nast=dodaj;
+ }
+ }
+ //the label doesn't have dot there at proper place
+ else
+ {
+ kol_etykiet*dodaj=new kol_etykiet;
+ klasa_obslugi_etykiet.ustaw_zmienna_numer_etykietki(rekord->etykieta);
+ strcpy(dodaj->etykieta,rekord->etykieta);
+ strcpy(dodaj->kolejny_numer_string,klasa_obslugi_etykiet.numer_etykietki);
+ nowy_element->nast=dodaj;
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"****************************************************************"<<endl;
+ cout<<"Etykietka ma postać blach"<<endl;
+ cout<<"Etykietka nie istnieje na globalnej liście.Musi zostać dodana."<<endl;
+ cout<<"Numer etykietki został ustalony używając funkcji ustaw_zmienna_numer_etykietki"<<endl;
+ cout<<"Here is what klasa_obslugi_etykiet.numer_etykietki looks like: "
+ <<klasa_obslugi_etykiet.numer_etykietki<<endl;
+ cout<<"================================================================"<<endl;
+ }
+ else
+ {
+ cout<<"****************************************************************"<<endl;
+ cout<<"The label looks like blach"<<endl;
+ cout<<"The label doesn't exist in the global queue. Must be added."<<endl;
+ cout<<"The number of the label was taken using ustaw_zmienna_numer_etykietki function"<<endl;
+ cout<<"Here is what klasa_obslugi_etykiet.numer_etykietki looks like: "
+ <<klasa_obslugi_etykiet.numer_etykietki<<endl;
+ cout<<"================================================================"<<endl;
+ }
+ }
+ }
+ }
+ }//koniec else
+ return 0;
+}
+
+//function that returns label number
+int zwroc_numer_etykiety(kol_etykiet*wierzcholek,char*etykieta,kol_etykiet**zmienna_tymczasowa)
+{
+ kol_etykiet*bierzacy=wierzcholek;
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<endl<<endl<<endl;
+ cout<<"***********************************************"<<endl;
+ cout<<"Tu funkcja zwroc_numer_etykiety. Poniżej argumenty z którymi mnie wywołano:"<<endl;
+ cout<<"bierzacy->etykieta: "<<bierzacy->etykieta<<endl;
+ cout<<"etykieta: "<<etykieta<<endl;
+ }
+ else
+ {
+ cout<<endl<<endl<<endl;
+ cout<<"***********************************************"<<endl;
+ cout<<"The function zwroc_numer_etykiety is speaking. Below the arguments I got:"<<endl;
+ cout<<"bierzacy->etykieta: "<<bierzacy->etykieta<<endl;
+ cout<<"etykieta: "<<etykieta<<endl;
+ }
+ }
+ while(strcmp(bierzacy->etykieta,etykieta)&&bierzacy->nast)
+ bierzacy=bierzacy->nast;
+
+ if(strcmp(bierzacy->etykieta,etykieta))
+ {
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Wychodzę z funkcji zwroc_numer_etykiety z błędem 0."<<endl;
+ cout<<"=========================================="<<endl;
+ }
+ else
+ {
+ cout<<"Leaving function zwroc_numer_etykiety with 0 error."<<endl;
+ cout<<"=========================================="<<endl;
+ }
+ }
+ return 0;
+ }
+ else
+ {
+ //return bierzacy->kolejny_numer;
+ (*zmienna_tymczasowa)=bierzacy;
+ if(debug_level)
+ {
+ if(language==0)
+ {
+ cout<<"Wychodzę z funkcji zwroc_numer_etykiety z błędem 1."<<endl;
+ cout<<"=========================================="<<endl;
+ }
+ else
+ {
+ cout<<"Leaving function zwroc_numer_etykiety with 1 error."<<endl;
+ cout<<"=========================================="<<endl;
+ }
+ }
+ return 1;
+ }
+
+}
+
+
+//funkcja zwracająca string który był przed etykietą
+int przed_etykieta_po(char zn_przed,char*linia,char*przed,char*po,char zn_po)
+{
+ char pomocnicza[DL_WIERSZA];
+ char pprzed[DL_WIERSZA];
+ char ppo[DL_WIERSZA];
+ int q=DL_WIERSZA-1;
+ pomocnicza[q]=pprzed[q]=ppo[q]='\0';
+ strcpy(pomocnicza,linia);
+ int i=1;
+ int dl_linii=strlen(linia);
+ while(pomocnicza[i]!=zn_przed)
+ {
+ pprzed[i-1]=pomocnicza[i];
+ i++;
+ if(i>dl_linii) return 1;
+ }
+ pprzed[i-1]=zn_przed;//dopisz nawias do pomocniczej
+ pprzed[i]='\0';//dopisz koniec linii do pomocniczej
+ i++;
+ while(pomocnicza[i]!=zn_po)
+ {
+ i++;
+ if (i>dl_linii)return 1;
+ }
+ int i_dwa=0;
+ while(pomocnicza[i]!='\0')
+ {
+ ppo[i_dwa]=pomocnicza[i];
+ i++; i_dwa++;
+ }
+ ppo[i_dwa]='\0';
+ strcpy(przed,pprzed);
+ strcpy(po,ppo);
+ return 0;
+}
+
+//checking if we shuld change label counters
+int check_counter_to_set(char*linia)
+{
+ int counter;
+ // counter=0 %--set-r-to
+ // counter=1 %--set-R-to
+ // counter=2 %--set-a-to
+ // counter=3 %--set-l-to
+ // counter=4 %--set-L-to
+ // counter=5 %--set-d-to
+ char switches[6][12]={"%--set-r-to", "%--set-R-to", "%--set-a-to", "%--set-l-to", "%--set-L-to", "%--set-d-to"};
+ char *tymcz;
+ char *checking;
+ int dlugosc=strlen(linia);
+ //tymcz=new char[dlugosc];
+ if(dlugosc>=13&&linia[11]==' ')
+ {
+ tymcz=new char[dlugosc];
+ for(counter=0;counter<6;counter++)
+ {
+ if(!strncmp(linia,switches[counter],11))
+ break;
+ }
+ if(counter==6)
+ return 1;
+ for(int a=12;a<dlugosc;a++)
+ {
+ if (linia[a]=='\n')
+ tymcz[a-12]='\0';
+ else
+ tymcz[a-12]=linia[a];
+ }
+ //we don't nead dlugosc variable anymore, so we can use it for other purpose
+ if(counter==5)
+ {
+ switch (tymcz[0])
+ {
+ case 'r':
+ klasa_obslugi_etykiet.set_up_all(5,0);
+ break;
+ case 'R':
+ klasa_obslugi_etykiet.set_up_all(5,1);
+ break;
+ case 'a':
+ klasa_obslugi_etykiet.set_up_all(5,2);
+ break;
+ case 'l':
+ klasa_obslugi_etykiet.set_up_all(5,3);
+ break;
+ case 'L':
+ klasa_obslugi_etykiet.set_up_all(5,4);
+ break;
+ default:
+ {
+ if(language==0)
+ {
+ cout<<"****************Error**********"<<endl;
+ cout<<"Podałeś opcję "<<switches[counter]<<" ale ze złym argumentem: "<<tymcz<<endl;
+ cout<<"*******************************"<<endl;
+ }
+ else
+ {
+ cout<<endl<<"***************Error******************"<<endl;
+ cout<<"You have given "<<switches[counter]<<" option, but wrong argument: "<<tymcz<<endl;
+ cout<<"**************************************"<<endl;
+ }
+ return 1;
+ }
+ }
+ }
+ else
+ {
+ dlugosc=strtol(tymcz,&checking,10);
+ if(*checking!='\0'||dlugosc<=0)
+ {
+ if(language==0)
+ {
+ cout<<"****************Error**********"<<endl;
+ cout<<"Podałeś opcję"<<switches[counter]<<" ale ze złym argumentem: "<<tymcz<<endl;
+ cout<<"*******************************"<<endl;
+ }
+ else
+ {
+ cout<<endl<<"***************Error******************"<<endl;
+ cout<<"You have given "<<switches[counter]<<" option, but wrong argument: "<<tymcz<<endl;
+ cout<<"**************************************"<<endl;
+ }
+ return 1;
+ }
+ klasa_obslugi_etykiet.set_up_all(counter,dlugosc);
+ }
+ delete tymcz;
+ return 0;
+ }
+
+/*
+ switch(counter)
+ {
+ case 0:
+ {
+
+ break;
+ }
+ case 1:
+ {
+
+
+ break;
+ }
+ case 2:
+ {
+
+
+ break;
+ }
+ case 4:
+ {
+
+
+ break;
+ }
+ default:
+ return 0;
+ }
+ */
+
+ return 0;
+}