#include int strcomp(char s1[], char s2[], int i); int strcomp2(char s1[], char s2[]); void iso8859_2(void); void iso8859_5(void); void shema(char c); main(int argc, char *argv[]) { if (*argv[1]!='C' && *argv[1]!='L') { fprintf(stderr, "NEODGOVARAJUCI ARGUMENT U KOMANDNOJ LINIJI!"); return (0); } else { shema(*argv[1]); if (*argv[1]=='C') iso8859_5(); else iso8859_2(); } } /* funkcija strcomp proverava da li se u stringu s1 */ /* na poziciji i nalazi string s2 i ako je tako */ /* vraca 1 u suprotnom 0. Funkcija razlikuje velika */ /* i mala slova sto je u ovom slucaju potrebno */ int strcomp(char s1[], char s2[], int i) { int j; for (j=0 ; s2[j] && s1[i]==s2[j] ; i++, j++); if (s2[j]=='\0') return (1); else return (0); } /* f-ja proverava da li se u stringu s1 nalazi string s2, */ /* tako da ne razlikuje velika i mala slova. Ako se string s2 */ /* ne pojavljuje u s1 f-ja vraca 0 u suprotnom vraca poziciju */ /* na kojoj se nalazi s2 (1,2,....) */ int strcomp2(char s1[], char s2[]) { int i,j,p; char a,b; for(i=0; s1[i] ; i++) { for (j=0, p=1 ; s2[j] && p ; j++) { if (s1[i+j]>='a' && s1[i+j]<='z') a=s1[i+j]-('a'-'A'); else a=s1[i+j]; if (s2[j]>='a' && s2[j]<='z') b=s2[j]-('a'-'A'); else b=s2[j]; p=(a==b); } if (p) return (i+1); } return (0); } void iso8859_2() { char line[100], out[100]; int i,j,p=1; while (gets(line)!=NULL) { for(i=0,j=0 ; line[i] ; i++) { if (line[i]=='<' || line[i]=='[') p=0; if (line[i]=='>' || line[i]==']') p=1; if (p && line[i]=='&') { if (strcomp(line,"&Cx;", i)) { i+=3; out[j++]=200; } else if (strcomp(line,"&cx;", i)) { i+=3; out[j++]=232; } else if (strcomp(line,"&Cy;", i)) { i+=3; out[j++]=198; } else if (strcomp(line,"&cy;", i)) { i+=3; out[j++]=230; } else if (strcomp(line,"&Dx;", i)) { i+=3; out[j++]=208; } else if (strcomp(line,"&dx;", i)) { i+=3; out[j++]=240; } else if (strcomp(line,"&Dy;", i)) { i+=3; out[j++]='D'; out[j++]=190; } else if (strcomp(line,"&dy;", i)) { i+=3; out[j++]='d'; out[j++]=190; } else if (strcomp(line,"&Zx;", i)) { i+=3; out[j++]=174; } else if (strcomp(line,"&zx;", i)) { i+=3; out[j++]=190; } else if (strcomp(line,"&Sx;", i)) { i+=3; out[j++]=169; } else if (strcomp(line,"&sx;", i)) { i+=3; out[j++]=185; } else if (strcomp(line,"&Lx;", i)) { i+=3; out[j++]='L'; out[j++]='j'; } else if (strcomp(line,"&lx;", i)) { i+=3; out[j++]='l'; out[j++]='j'; } else if (strcomp(line,"&Nx;", i)) { i+=3; out[j++]='N'; out[j++]='j'; } else if (strcomp(line,"&nx;", i)) { i+=3; out[j++]='n'; out[j++]='j'; } else out[j++]=line[i]; } else out[j++]=line[i]; } out[j++]='\0'; puts(out); } } void iso8859_5() { char line[100], out[100]; int i,j,p=1; while (gets(line)!=NULL) { for(i=0,j=0 ; line[i] ; i++) { if (line[i]=='<' || line[i]=='[') p=0; if (line[i]=='>' || line[i]==']') p=1; if (p) { switch(line[i]){ case 'A': case 'a': if (line[i]>='A' && line[i]<='Z') out[j++]=176; else out[j++]=208; break; case 'B': case 'b': if (line[i]>='A' && line[i]<='Z') out[j++]=177; else out[j++]=209; break; case 'V': case 'v': if (line[i]>='A' && line[i]<='Z') out[j++]=178; else out[j++]=210; break; case 'G': case 'g': if (line[i]>='A' && line[i]<='Z') out[j++]=179; else out[j++]=211; break; case 'D': case 'd': if (line[i]>='A' && line[i]<='Z') out[j++]=180; else out[j++]=212; break; case 'E': case 'e': if (line[i]>='A' && line[i]<='Z') out[j++]=181; else out[j++]=213; break; case 'Z': case 'z': if (line[i]>='A' && line[i]<='Z') out[j++]=183; else out[j++]=215; break; case 'I': case 'i': if (line[i]>='A' && line[i]<='Z') out[j++]=184; else out[j++]=216; break; case 'J': case 'j': if (line[i]>='A' && line[i]<='Z') out[j++]=168; else out[j++]=248; break; case 'K': case 'k': if (line[i]>='A' && line[i]<='Z') out[j++]=186; else out[j++]=218; break; case 'L': case 'l': if (line[i]>='A' && line[i]<='Z') out[j++]=187; else out[j++]=219; break; case 'M': case 'm': if (line[i]>='A' && line[i]<='Z') out[j++]=188; else out[j++]=220; break; case 'N': case 'n': if (line[i]>='A' && line[i]<='Z') out[j++]=189; else out[j++]=221; break; case 'O': case 'o': if (line[i]>='A' && line[i]<='Z') out[j++]=190; else out[j++]=222; break; case 'P': case 'p': if (line[i]>='A' && line[i]<='Z') out[j++]=191; else out[j++]=223; break; case 'R': case 'r': if (line[i]>='A' && line[i]<='Z') out[j++]=192; else out[j++]=224; break; case 'S': case 's': if (line[i]>='A' && line[i]<='Z') out[j++]=193; else out[j++]=225; break; case 'T': case 't': if (line[i]>='A' && line[i]<='Z') out[j++]=194; else out[j++]=226; break; case 'U': case 'u': if (line[i]>='A' && line[i]<='Z') out[j++]=195; else out[j++]=227; break; case 'F': case 'f': if (line[i]>='A' && line[i]<='Z') out[j++]=196; else out[j++]=228; break; case 'H': case 'h': if (line[i]>='A' && line[i]<='Z') out[j++]=197; else out[j++]=229; break; case 'C': case 'c': if (line[i]>='A' && line[i]<='Z') out[j++]=198; else out[j++]=230; break; case '&': if (strcomp(line, "&Dx;", i)) { i+=3; out[j++]=162; } else if (strcomp(line, "&dx;", i)) { i+=3; out[j++]=242; } else if (strcomp(line, "&Zx;", i)) { i+=3; out[j++]=182; } else if (strcomp(line, "&zx;", i)) { i+=3; out[j++]=214; } else if (strcomp(line, "&Lx;", i)) { i+=3; out[j++]=169; } else if (strcomp(line, "&lx;", i)) { i+=3; out[j++]=249; } else if (strcomp(line, "&Nx;", i)) { i+=3; out[j++]=170; } else if (strcomp(line, "&nx;", i)) { i+=3; out[j++]=250; } else if (strcomp(line, "&Cx;", i)) { i+=3; out[j++]=199; } else if (strcomp(line, "&cx;", i)) { i+=3; out[j++]=231; } else if (strcomp(line, "&Dy;", i)) { i+=3; out[j++]=175; } else if (strcomp(line, "&dy;", i)) { i+=3; out[j++]=255; } else if (strcomp(line, "&Sx;", i)) { i+=3; out[j++]=200; } else if (strcomp(line, "&sx;", i)) { i+=3; out[j++]=232; } else if (strcomp(line, "&Cy;", i)) { i+=3; out[j++]=171; } else if (strcomp(line, "&cy;", i)) { i+=3; out[j++]=251; } else out[j++]=line[i]; break; default: out[j++]=line[i]; break;} } else out[j++]=line[i]; } out[j++]='\0'; puts(out); } } void shema(char c) { char line[100], out[100], charset1[20]="iso-8859-2", charset2[20]="iso-8859-5"; int i,j,poz; do { gets(line); if (poz=strcomp2(line,"charset")) { for(i=0,j=0 ; i\n"); puts(line); } else puts(line); } while (strcomp2(line,"