/* Program PL Conv Written /\ in 1993 / \/\ Jaroslaw Strzalkowski by: / / \ Krakow, Poland / / \ Zrodlo przenosne - kompiluje sie bez problemow pod wszelkimi systemami. Kompilacja pod Unixem komenda: cc -o plconv plconv.c Instrukcja uzycia: plconv h Troche nazmienial: Norbert Jankowski, Torun, norbert@phys.uni.torun.pl */ #include #include /* -- tabele kodow jednoznakowych -- UWAGA: Mazovia musi byc, i musi byc pierwsza. */ struct pl_onec_struct { char *name; unsigned char code[18]; } pl_onec[] = { { "Mazovia", { 143, 149, 144, 156, 165, 163, 152, 160, 161, 134, 141, 145, 146, 164, 162, 158, 166, 167 } }, { "ISO-Latin-2", { 161, 198, 202, 163, 209, 211, 166, 172, 175, 177, 230, 234, 179, 241, 243, 182, 188, 191 } }, { "CSK", { 128, 129, 130, 131, 132, 133, 134, 136, 135, 160, 161, 162, 163, 164, 165, 166, 168, 167 } }, { "Cyfromat", { 128, 129, 130, 131, 132, 133, 134, 136, 135, 137, 138, 139, 140, 141, 142, 143, 145, 144 } }, { "DHN", { 128, 129, 130, 131, 132, 133, 134, 136, 135, 137, 138, 139, 140, 141, 142, 143, 145, 144 } }, { "IINTE-ISIS", { 128, 129, 130, 131, 132, 133, 134, 135, 136, 144, 145, 146, 147, 148, 149, 150, 151, 152 } }, { "IBM-Latin-2", { 164, 143, 168, 157, 227, 224, 151, 141, 189, 165, 134, 169, 136, 228, 162, 152, 171, 190 } }, { "IEA-Swierk", { 143, 128, 144, 156, 165, 153, 235, 157, 146, 160, 155, 130, 159, 164, 162, 135, 168, 145 } }, { "Logic", { 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145 } }, { "Microvex", { 143, 128, 144, 156, 165, 147, 152, 157, 146, 160, 155, 130, 159, 164, 162, 135, 168, 145 } }, { "Windows-EE", { 161, 198, 202, 163, 209, 211, 140, 143, 175, 185, 230, 234, 179, 241, 243, 156, 159, 191 } }, { "Ventura", { 151, 153, 165, 166, 146, 143, 142, 144, 128, 150, 148, 164, 167, 145, 162, 132, 130, 135 } }, { "ELWRO-Junior",{ 193, 195, 197, 204, 206, 207, 211, 218, 217, 225, 227, 229, 236, 238, 239, 243, 250, 249 } }, { "AmigaPL", { 194, 202, 203, 206, 207, 211, 212, 218, 219, 226, 234, 235, 238, 239, 243, 244, 250, 251 } }, { "brak", { 65, 67, 69, 76, 78, 79, 83, 90, 90, 97, 99, 101, 108, 110, 111, 115, 122, 122 } } }; /* -- tabele kodow wieloznakowych */ struct pl_multic_struct { char *name; char *code[18]; } pl_multic[] = { { "TeX.W-wa.1", { "@A", "@C", "@E", "@L", "@N", "@O", "@S", "@Z", "@R", "@a", "@c", "@e", "@l", "@n", "@o", "@s", "@z", "@r" } }, { "TeX.W-wa.2", { "\"A", "\"C", "\"E", "\"L", "\"N", "\"O", "\"S", "\"Z", "\"R", "\"a", "\"c", "\"e", "\"l", "\"n", "\"o", "\"s", "\"z", "\"r" } }, { "TeX-ohida", { "\\c{A}", "\\'C", "\\c{E}", "\\L{}", "\\'N", "\\'O", "\\'S", "\\'Z", "\\.Z", "\\c{a}", "\\'c", "\\c{e}", "\\l{}", "\\'n", "\\'o", "\\'s", "\\'z", "\\.z" } }, { "tyldy", { "~A", "~C", "~E", "~L", "~N", "~O", "~S", "~Z", "~X", "~a", "~c", "~e", "~l", "~n", "~o", "~s", "~z", "~x" } }, { "slasze", { "/A", "/C", "/E", "/L", "/N", "/O", "/S", "/Z", "/X", "/a", "/c", "/e", "/l", "/n", "/o", "/s", "/x", "/z" } } }; int main( argc, argv ) int argc; char *argv[]; { int i, j, old_j, k, l; /* -- licznikowe */ int n_onec = sizeof( pl_onec ) / sizeof( struct pl_onec_struct ); int n_multic = sizeof( pl_multic ) / sizeof( struct pl_multic_struct ); /* -- rozmiary tabel kodow standardow */ char dir; /* -- kierunek konwersji (+ lub -) */ int kind; /* -- rodzaj standardu - 0: jednoznakowy, */ /* 1 - wielo */ int std; /* -- numer standardu w obrebie tabeli */ int scan; /* -- w ktorym standarcie wyszukiwac */ int c; /* -- do czytania kolejnych znakow */ /* -- ------------------------------------------------------------- -- lista nazw standardow -- */ if( argc==2 && strcmp( argv[1], "l" ) == 0 ) { puts( "\n A C E L N O S Z' Z. a c e l n o s z' z." ); puts( "---------------------------------------------------------------------------\n" ); puts( "Standardy jednoznakowe:" ); puts( "~~~~~~~~~~~~~~~~~~~~~~" ); for( i=0; i output z konwersja */ while( (c=getchar()) != EOF ) { /* -- sprawdz czy dany znak jest polska litera */ if(dir == '-' && scan && kind) { if(c == **pl_multic[ scan ].code) { if((c=getchar()) == EOF){ putchar(**pl_multic[ scan ].code); exit(0); } for( j=0; j<18; j++ ) if( c == pl_multic[ scan ].code[j][1]) break; /* if TeX-ohida (or another no fixed length coding) */ if(scan == 2 && j != 18) for(k=2; pl_multic[ scan ].code[j][k]; k++) { if((c=getchar()) == EOF){ putchar(**pl_multic[ scan ].code); exit(0); } if( c != pl_multic[ scan ].code[j][k]) { old_j = j; for(; j<18; j++ ) if( c == pl_multic[ scan ].code[j][k]) { for(l=k; --l;) if(pl_multic[ scan ].code[old_j][l] != pl_multic[ scan ].code[j][l]) break; if(!l) break; } if(j == 18) { for(j=0; joutp */ exit(0); }/* konwersja */ /* -- -------------------------------------------------------- -- bledne parametry -- */ fprintf( stderr, "\ PL Conv - konwersja polskich liter pomiedzy wszelakimi \"standardami\".\n\ (c) Jaroslaw Strzalkowski, Krakow, Marzec 1993\n\ Zmiany: Norbert Jankowski, Torun, Luty 1996\n\ Public domain - kopiowanie na prawo i lewo mile widziane.\n\ Zrodla calkowicie przenosne dostepne pod adresem:\n\tftp://ftp.phys.uni.torun.pl/pub/plconv.{exe|c}\n\ \n\ Uzycie:\n\ plconv -standard - konwersja z danego standardu na Mazovie\n\ plconv +standard - konwersja z Mazovii na dany standbardu\n\ plconv l - wypisuje liste \"standardow\"\n\ plconv -std1 | plconv +std2 - konwersja z standardu std1 na std2\n\ \n\n" ); exit(2); return 0; /* dummy */ } .