/* 4. zadatak - 1. grupa; autor: Dragana Simic - br. indeksa: 193/2000*/ #include int isEOF=0; char meta[]="=5)break; i=0; }; if(i!=0){while(red[k]<'A'&&k=7) break; i=0; }; } if(i!=0){i=0; /* umesto charseta iz fajla upisemo iso-8859-1 */ while(red[k]<'A'&&k=128){ /* proveravamo karakter po karakter i ako je jedan od nasih znakova koji nema latinicni ekvivalent umesto njega stavimo zamenu */ switch(red[a]){ case SHI: printf("%s",SH); break; case shI: printf("%s",sh); break; case CHI: printf("%s",CH); break; case chI: printf("%s",ch); break; case TCHI: printf("%s",TCH); break; case tchI: printf("%s",tch); break; case DJI: printf("%s",DJ); break; case djI: printf("%s",dj); break; case ZI: printf("%s",Z); break; case zI: printf("%s",z); break; default: putc(red[a],stdout); /* ako nije nas karakter onda ga prepisemo */ break; }; } else putc(red[a],stdout); a++; }; }; return 0; } int iso_8859_5(){ /* konverzija iz cirilice u latinicu nase karaktere koji imaju latinicni ekvivalent prepisemo kao latinicne a koji nemaju, njih kodiramo, ostale samo prepisemo */ int a=0; int *red; postavicharset(); for(;!isEOF;){ a=0; red=DajRed(); while(red[a]){ if(red[a]>=128){ switch(red[a]){ case 0xb0: putc('A',stdout); break; case 0xb1: putc('B',stdout); break; case 0xb2: putc('V',stdout); break; case 0xb3: putc('G',stdout); break; case 0xb4: putc('D',stdout); break; case 0xb5: putc('E',stdout); break; case 0xb6: printf("%s",Z); break; case 0xb7: putc('Z',stdout); break; case 0xb8: putc('I',stdout); break; case 0xa8: putc('J',stdout); break; case 0xba: putc('K',stdout); break; case 0xbb: putc('L',stdout); break; case 0xbc: putc('M',stdout); break; case 0xbd: putc('N',stdout); break; case 0xbe: putc('O',stdout); break; case 0xbf: putc('P',stdout); break; case 0xc0: putc('R',stdout); break; case 0xc1: putc('S',stdout); break; case 0xc2: putc('T',stdout); break; case 0xc3: putc('U',stdout); break; case 0xc4: putc('F',stdout); break; case 0xc5: putc('H',stdout); break; case 0xc6: putc('C',stdout); break; case 0xc7: printf("%s",TCH); break; case 0xc8: printf("%s",SH); break; case 0xa9: printf("%s",LJ); break; case 0xaa: printf("%s",NJ); break; case 0xab: printf("%s",CH); break; case 0xaf: printf("%s",DZ); break; case 0xa2: printf("%s",DJ); break; case 0xd0: putc('a',stdout); break; case 0xd1: putc('b',stdout); break; case 0xd2: putc('v',stdout); break; case 0xd3: putc('g',stdout); break; case 0xd4: putc('d',stdout); break; case 0xd5: putc('e',stdout); break; case 0xd6: printf("%s",z); break; case 0xd7: putc('z',stdout); break; case 0xd8: putc('i',stdout); break; case 0xf8: putc('j',stdout); break; case 0xda: putc('k',stdout); break; case 0xdb: putc('l',stdout); break; case 0xdc: putc('m',stdout); break; case 0xdd: putc('n',stdout); break; case 0xde: putc('o',stdout); break; case 0xdf: putc('p',stdout); break; case 0xe0: putc('r',stdout); break; case 0xe1: putc('s',stdout); break; case 0xe2: putc('t',stdout); break; case 0xe3: putc('u',stdout); break; case 0xe4: putc('f',stdout); break; case 0xe5: putc('h',stdout); break; case 0xe6: putc('c',stdout); break; case 0xe7: printf("%s",tch); break; case 0xe8: printf("%s",sh); break; case 0xf9: printf("%s",lj); break; case 0xfa: printf("%s",nj); break; case 0xfb: printf("%s",ch); break; case 0xff: printf("%s",dz); break; case 0xf2: printf("%s",dj); break; default: putc(red[a],stdout); break; }; } else putc(red[a],stdout); a++; }; }; return 0; } int cp_1250(){ int *red; return 0; } int cp_1251(){ int *red; return 0; } int main(int argc, char* argv[]){ int* red; korisceniset[0]=0; for(;!isEOF;){ red=DajRed(); k=0; i=0; while(k=5)break; i=0; }; if(i!=0){while(red[k]<'A'&&k=7) break; i=0; }; } if(i!=0){i=0; /* prepisemo charset */ while(red[k]<'A'&&k=3){ i=3; while(korisceniset[i]==latin[i])i++; if (i<10) {i=3;while(korisceniset[i]==celat[i])i++; if(i<10){i=3;while(korisceniset[i]==ciril[i])i++; if(!(i<10))sema=eciril; } else sema=ecelat; } else sema=elatin; } } else if(korisceniset[0]=='c'||korisceniset[0]=='C') { i=0; while(korisceniset[i]==latincp[i]||(korisceniset[i]==latincp[i]+('a'-'A')))i++; if(i>=2){ i=2; while(korisceniset[i]==latincp[i])i++; if (i<7) {i=2;while(korisceniset[i]==cirilcp[i])i++; if(!(i<10))sema=ecirilcp; } else sema=elatincp; } } /* ako nije ispisemo poruku o gresci */ if(sema==-1){fprintf(stderr,"\n Ovu semu ne mogu da dekodujem-nepoznata sema:%s\n",korisceniset);return 1;} /* ako jeste za nas interesantan izvrsimo konverziju pozivajuci odgovarajucu funkciju */ isEOF=0; fseek(stdin,0,SEEK_SET); /* pozicioniremo se prvo na pocetak fajla */ switch(sema){ case elatin: if(iso_8859_1())return 1; break; case ecelat: if(iso_8859_2())return 1; break; case eciril: if(iso_8859_5())return 1; break; case elatincp: if(cp_1250())return 1; break; case ecirilcp: if(cp_1251())return 1; break; default: fprintf(stderr,"Greska u dekodovanju, neodredjena sema konverzije"); /* za svaki slucaj */ break; }; return 0; }#include int isEOF=0; char meta[]="=5)break; i=0; }; if(i!=0){while(red[k]<'A'&&k=7) break; i=0; }; } if(i!=0){i=0; /* umesto charseta iz fajla upisemo iso-8859-1 */ while(red[k]<'A'&&k=128){ /* proveravamo karakter po karakter i ako je jedan od nasih znakova koji nema latinicni ekvivalent umesto njega stavimo zamenu */ switch(red[a]){ case SHI: printf("%s",SH); break; case shI: printf("%s",sh); break; case CHI: printf("%s",CH); break; case chI: printf("%s",ch); break; case TCHI: printf("%s",TCH); break; case tchI: printf("%s",tch); break; case DJI: printf("%s",DJ); break; case djI: printf("%s",dj); break; case ZI: printf("%s",Z); break; case zI: printf("%s",z); break; default: putc(red[a],stdout); /* ako nije nas karakter onda ga prepisemo */ break; }; } else putc(red[a],stdout); a++; }; }; return 0; } int iso_8859_5(){ /* konverzija iz cirilice u latinicu nase karaktere koji imaju latinicni ekvivalent prepisemo kao latinicne a koji nemaju, njih kodiramo, ostale samo prepisemo */ int a=0; int *red; postavicharset(); for(;!isEOF;){ a=0; red=DajRed(); while(red[a]){ if(red[a]>=128){ switch(red[a]){ case 0xb0: putc('A',stdout); break; case 0xb1: putc('B',stdout); break; case 0xb2: putc('V',stdout); break; case 0xb3: putc('G',stdout); break; case 0xb4: putc('D',stdout); break; case 0xb5: putc('E',stdout); break; case 0xb6: printf("%s",Z); break; case 0xb7: putc('Z',stdout); break; case 0xb8: putc('I',stdout); break; case 0xa8: putc('J',stdout); break; case 0xba: putc('K',stdout); break; case 0xbb: putc('L',stdout); break; case 0xbc: putc('M',stdout); break; case 0xbd: putc('N',stdout); break; case 0xbe: putc('O',stdout); break; case 0xbf: putc('P',stdout); break; case 0xc0: putc('R',stdout); break; case 0xc1: putc('S',stdout); break; case 0xc2: putc('T',stdout); break; case 0xc3: putc('U',stdout); break; case 0xc4: putc('F',stdout); break; case 0xc5: putc('H',stdout); break; case 0xc6: putc('C',stdout); break; case 0xc7: printf("%s",TCH); break; case 0xc8: printf("%s",SH); break; case 0xa9: printf("%s",LJ); break; case 0xaa: printf("%s",NJ); break; case 0xab: printf("%s",CH); break; case 0xaf: printf("%s",DZ); break; case 0xa2: printf("%s",DJ); break; case 0xd0: putc('a',stdout); break; case 0xd1: putc('b',stdout); break; case 0xd2: putc('v',stdout); break; case 0xd3: putc('g',stdout); break; case 0xd4: putc('d',stdout); break; case 0xd5: putc('e',stdout); break; case 0xd6: printf("%s",z); break; case 0xd7: putc('z',stdout); break; case 0xd8: putc('i',stdout); break; case 0xf8: putc('j',stdout); break; case 0xda: putc('k',stdout); break; case 0xdb: putc('l',stdout); break; case 0xdc: putc('m',stdout); break; case 0xdd: putc('n',stdout); break; case 0xde: putc('o',stdout); break; case 0xdf: putc('p',stdout); break; case 0xe0: putc('r',stdout); break; case 0xe1: putc('s',stdout); break; case 0xe2: putc('t',stdout); break; case 0xe3: putc('u',stdout); break; case 0xe4: putc('f',stdout); break; case 0xe5: putc('h',stdout); break; case 0xe6: putc('c',stdout); break; case 0xe7: printf("%s",tch); break; case 0xe8: printf("%s",sh); break; case 0xf9: printf("%s",lj); break; case 0xfa: printf("%s",nj); break; case 0xfb: printf("%s",ch); break; case 0xff: printf("%s",dz); break; case 0xf2: printf("%s",dj); break; default: putc(red[a],stdout); break; }; } else putc(red[a],stdout); a++; }; }; return 0; } int cp_1250(){ int a=0; int *red; /* red sa glavnog ulaza */ postavicharset(); /* promenimo charset u zaglavlju */ for(;!isEOF;){ a=0; red=DajRed(); while(red[a]){ if(red[a]>=128){ /* proveravamo karakter po karakter i ako je jedan od nasih znakova koji nema latinicni ekvivalent umesto njega stavimo zamenu */ switch(red[a]){ case SHI2: printf("%s",SH); break; case shI2: printf("%s",sh); break; case CHI: printf("%s",CH); break; case chI: printf("%s",ch); break; case TCHI: printf("%s",TCH); break; case tchI: printf("%s",tch); break; case DJI: printf("%s",DJ); break; case djI: printf("%s",dj); break; case ZI2: printf("%s",Z); break; case zI2: printf("%s",z); break; default: putc(red[a],stdout); /* ako nije nas karakter onda ga prepisemo */ break; }; } else putc(red[a],stdout); a++; }; }; return 0; } int cp_1251(){ /*nase karaktere koji imaju latinicni ekvivalent prepisemo kao latinicne a koji nemaju, njih kodiramo, ostale samo prepisemo */ int a=0; int *red; postavicharset(); for(;!isEOF;){ a=0; red=DajRed(); while(red[a]){ if(red[a]>=128){ switch(red[a]){ case 0xc0: putc('A',stdout); break; case 0xc1: putc('B',stdout); break; case 0xc2: putc('V',stdout); break; case 0xc3: putc('G',stdout); break; case 0xc4: putc('D',stdout); break; case 0xc5: putc('E',stdout); break; case 0xc6: printf("%s",Z); break; case 0xc7: putc('Z',stdout); break; case 0xc8: putc('I',stdout); break; case 0xa3: putc('J',stdout); break; case 0xca: putc('K',stdout); break; case 0xcb: putc('L',stdout); break; case 0xcc: putc('M',stdout); break; case 0xcd: putc('N',stdout); break; case 0xce: putc('O',stdout); break; case 0xcf: putc('P',stdout); break; case 0xd0: putc('R',stdout); break; case 0xd1: putc('S',stdout); break; case 0xd2: putc('T',stdout); break; case 0xd3: putc('U',stdout); break; case 0xd4: putc('F',stdout); break; case 0xd5: putc('H',stdout); break; case 0xd6: putc('C',stdout); break; case 0xd7: printf("%s",TCH); break; case 0xd8: printf("%s",SH); break; case 0x8a: printf("%s",LJ); break; case 0x8c: printf("%s",NJ); break; case 0x8e: printf("%s",CH); break; case 0x8f: printf("%s",DZ); break; case 0x80: printf("%s",DJ); break; case 0xe0: putc('a',stdout); break; case 0xe1: putc('b',stdout); break; case 0xe2: putc('v',stdout); break; case 0xe3: putc('g',stdout); break; case 0xe4: putc('d',stdout); break; case 0xe5: putc('e',stdout); break; case 0xe6: printf("%s",z); break; case 0xe7: putc('z',stdout); break; case 0xe8: putc('i',stdout); break; case 0xbc: putc('j',stdout); break; case 0xea: putc('k',stdout); break; case 0xeb: putc('l',stdout); break; case 0xec: putc('m',stdout); break; case 0xed: putc('n',stdout); break; case 0xee: putc('o',stdout); break; case 0xef: putc('p',stdout); break; case 0xf0: putc('r',stdout); break; case 0xf1: putc('s',stdout); break; case 0xf2: putc('t',stdout); break; case 0xf3: putc('u',stdout); break; case 0xf4: putc('f',stdout); break; case 0xf5: putc('h',stdout); break; case 0xf6: putc('c',stdout); break; case 0xf7: printf("%s",tch); break; case 0xf8: printf("%s",sh); break; case 0x9a: printf("%s",lj); break; case 0x9c: printf("%s",nj); break; case 0x9e: printf("%s",ch); break; case 0x9f: printf("%s",dz); break; case 0x90: printf("%s",dj); break; default: putc(red[a],stdout); break; }; } else putc(red[a],stdout); a++; }; }; return 0; } int main(int argc, char* argv[]){ int* red; korisceniset[0]=0; for(;!isEOF;){ red=DajRed(); k=0; i=0; while(k=5)break; i=0; }; if(i!=0){while(red[k]<'A'&&k=7) break; i=0; }; } if(i!=0){i=0; /* prepisemo charset */ while(red[k]<'A'&&k=3){ i=3; while(korisceniset[i]==latin[i])i++; if (i<10) {i=3;while(korisceniset[i]==celat[i])i++; if(i<10){i=3;while(korisceniset[i]==ciril[i])i++; if(!(i<10))sema=eciril; } else sema=ecelat; } else sema=elatin; } } else if(korisceniset[0]=='w'||korisceniset[0]=='W') { i=0; while(korisceniset[i]==latincp[i]||(korisceniset[i]==latincp[i]+('a'-'A')))i++; if(i>=7){ i=7; while(korisceniset[i]==latincp[i])i++; if (i<12) {i=7;while(korisceniset[i]==cirilcp[i])i++; if(!(i<12))sema=ecirilcp; } else sema=elatincp; } } /* ako nije ispisemo poruku o gresci */ if(sema==-1){fprintf(stderr,"\n Ovu semu ne mogu da dekodujem-nepoznata sema:%s\n",korisceniset);return 1;} /* ako jeste za nas interesantan izvrsimo konverziju pozivajuci odgovarajucu funkciju */ isEOF=0; fseek(stdin,0,SEEK_SET); /* pozicioniremo se prvo na pocetak fajla */ switch(sema){ case elatin: if(iso_8859_1())return 1; break; case ecelat: if(iso_8859_2())return 1; break; case eciril: if(iso_8859_5())return 1; break; case elatincp: if(cp_1250())return 1; break; case ecirilcp: if(cp_1251())return 1; break; default: fprintf(stderr,"Greska u dekodovanju, neodredjena sema konverzije"); /* za svaki slucaj */ break; }; return 0; }