/* Srpski Recnik za Linux 0.2 Kompajlirajte ga sa: # gcc sr.c -o sr i startujte ga sa: # ./sr Naravno, podrazumeva se da ste sva fajlove sr.c i reci.dat odpakovali u jedan direktorijum, da se nalazite u njemu i da ne kucate # :-) Svaki komentari i predlozi oko optimizacije i uopste oko celog programa su dobrodosli! Paznja : Program Srpski Recnik za Linux 0.2 je pod GNU licencom! ########################## license & copyright header ########################## # # # Copyright (c) 2000 by Predrag Damnjanovic (predrag@zastita.co.yu) # # # # 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. # # # # You should have received a copy of the GNU General Public License # # along with this program in the file 'COPYING'; if not, write to # # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # # Boston, MA 02111-1307, USA, or contact the author: # # # # Predrag Damnjanovic (predrag@zastita.co.yu) # # # # # ######################## end license & copyright header ######################## */ #include #include // #include // mozda neki kompajler trazi da se ovo uncomment-uje // #include // i ovo char dest[250]; // Sluzi nam kao pomocni string nad kojim izvrsavamo neke operacije int main(int argc, char *argv[]) { char buffer[256], b[256], bb[256], a[30], dir[100]; FILE *fp; int i=0,n=0,p=0,pp=0,bezb=0,parg=0,t=0; char *trepce="", *trepceb="", *normalna="", *plava="", *tirkiz="", *crvena="", *zelena="", *braon="", *ljubicasta="", *bela="", *scrvena="", *szelena="", *sljubicasta="", *roze="", *splava="", *scrna="", *stirkiz=""; // Provera da li da ispisuje text bez boje if (argc>1) if (argv[1][0]=='-' && argv[1][1]=='b') bezb=1; if (argc>2) if (argv[2][0]=='-' && argv[2][1]=='b') bezb=1; if (bezb==0) { // Boje su uradjene zahvaljujuci mom prijatelju predatoru - preedator@sendmail.ru (nije Rus, Srbin je :)) // trepce = "\x1B[0;5m"; // trepceb = "\x1B[1;5m"; normalna = "\x1B[0;m"; // plava = "\x1B[0;34m"; tirkiz = "\x1B[0;36m"; // crvena = "\x1B[0;31m"; zelena = "\x1B[0;32m"; braon = "\x1B[0;33m"; ljubicasta = "\x1B[0;35m"; // bela = "\x1B[0;38m"; scrvena = "\x1B[1;31m"; // szelena = "\x1B[1;32m"; // sljubicasta = "\x1B[1;35m"; // roze = "\x1B[1;35m"; splava = "\x1B[1;34m"; // scrna = "\x1B[1;30m"; // stirkiz = "\x1B[1;36m"; } // Lociranje baze reci dir[0]=0x00; strcat(dir, argv[0]); i=(int)(strrchr(dir, '/')-dir); dir[i+1]=0x00; strcat(dir, "reci.dat"); // dir[0]=0x00; strcat(dir, "/bin/reci.dat"); // Ovo aktivirajte samo ako vam se baza reci ne nalazi u istom direktorijumu sa sr.c. U tom slucaju unesite i putanju do baze umesto /bin/reci.dat koji ovde stoji samo kao primer. // Ako ima argumenata onda odmah prevodi rec datu kao argumenat. if (argc>1) if (argv[1][0]!='-') parg=1; if (argc>2) if (argv[2][0]!='-') parg=2; if (parg>0) {a[0]=0x00; strcat (a, argv[parg]);} // Sada ispisujemo naslov programa printf("%s%s%s%s%s%s%s%s", scrvena, " ---", normalna, splava, "Srpski Recnik za Linux 0.2", scrvena, "---\n", normalna); if (parg==0) printf("%s%s", braon, "\nKucaj q za izlazak!\n\n"); while (1) { // Glavna rutina za pretrazivanje if (parg==0) { // Ako nije uneta rec za prevod kao argumenat, pita koju rec da prevede a[0]=0x00; n=0; // Setuju se pocetne vrednosti printf("%s%s%s", zelena, "Unesi rec: ", normalna); scanf("%s", a); // Upit za rec printf("%s","\n"); } a[0]=toupper(a[0]); // Pretvaranje prvog slova u veliko for (i=1;i<(int)(strlen(a));i++) a[i]=tolower(a[i]); // a ostalih u malo i=0; // Promenljivu 'i' smo koristili jer nemamo potrebe da koristimo specijalnu promenljivu samo zbog malih i velikih slova, dakle stedimo resurse :). Promenljivu 'i' vracamo na pocentu vrednost jer cemo kasnije da je koristimo if (a[0]=='Q' && a[1]==0x00) return 0; // Ako korisnik ukuca q izlazimo iz programa fp = fopen(dir, "r"); // Otvaramo bazu reci fgets(buffer, 256, fp); // Preskacemo prvu liniju u bazi jer je nebitna while(fgets(buffer, 256, fp) != NULL) // ovo znaci da se blok koji sledi ponavlja sve dok ne dodjemo do kraja fajla, tj. dok se cela baza pretrazi { // Sada odbacujemo prva tri slova iz stringa koji treba da se pretrazi jer je to string 'En#' ili 'Sr#'. To nemamo potrebe da pretrazujemo strcpy(b, buffer+3); b[(int)(strstr(b, "|")-b)]=0x00; // Odsecamo prevode, znaci string koji se pretrazuje nosi samo rec, a ne i njen prevod // Blok koji sledi pretrazuje string i ispisuje na ekranu rec koju je nasao i njen prevod t=(int)(strstr(b, a)-buffer); // printf ("%s%d%s", "***", t, "***"); if (t<1000 && t>-1000) { n++; // Belezimo da je jos jedno znacenje reci nadjeno. Ovaj broj kasnije koristimo da bismo kasnije korisniku napisali koliko je prevoda nadjeno // Blok koji sledi formatira text koji ce da se prikaze, tj. sredjuje ga for (p=3, pp=0; p<(int)(strlen(buffer))+1; p++, pp++) { if (buffer[p]=='|') {bb[pp]=' '; bb[pp+1]='='; bb[pp+2]=' '; pp=pp+2; continue;}; if (buffer[p]=='-') {bb[pp]=','; bb[pp+1]=' '; pp++; continue;}; bb[pp]=buffer[p]; } if (i==0) {printf("%s%c%c%s%s", zelena, buffer[0], buffer[1], " = ", bb); i=1;} else {printf("%s%c%c%s%s", tirkiz, buffer[0], buffer[1], " = ", bb); i=0;} // Ispisujemo prevod } } // Kraj pretrazivanja fclose(fp); // Zatvaramo bazu reci if (n==0) printf("%s%s%s%s%s%s", normalna, "\nPrevod reci ", ljubicasta, a, normalna, " nije nadjen!\n\n"); else printf("%s%s%s%d%s%s%s%s%s%s", normalna, "\nUkupno nadjeno ", ljubicasta, n, normalna, " prevoda reci ", ljubicasta, a, normalna, "\n\n"); // Ispisujemo koliko je prevoda nadjeno if (parg>0) break; // Ako je bilo argumenata onda izlazimo iz progama } // Kraj glavne rutine return 0; // Kraj programa !!! }