Poniżej prosty program do odzyskania tekstu ASCII z polskimi znakami z formatu ChiWritera.
/*
mój prywatny konwerter plików z Chiwritera na tekst
(wzory diabli biorą...)
*/
#include<stdio.h>
int main(int argc, char *argv[])
{
FILE *f1,*f2;
int i,first,last,norm;
char line[1100], line2[1100];
if(argc<3){
puts("\n\nPodaj starą i nową nazwą zbioru jako argumenty\n");
return 1;
}
f1=fopen( argv[1],"r");
if(f1==NULL){
printf("\n\nNie mogę otworzyć zbioru %s\n",argv[1]);
return 1;
}
f2=fopen( argv[2],"w");
if(f2==NULL){
printf("\n\nNie mogę otworzyć zbioru %s\n",argv[2]);
fclose(f1);
return 1;
}
//Czytamy wierszami
while(fgets(line,1000,f1)!=NULL)
{
// wiersze zaczynajace się spacjami analizujemy od pierwszego "czarnego"
if(line[0]==' ')
{
for(i=0;i<1000;i++) if(line[i]!=' ') break;
first=i;
}
else first=0;
//linia zaczyna sie od backslasha....
if((line[first]==0x5c) && (line[first+1]!='1' &&
line[first+1]!='2' &&
line[first+1]!='!' &&
line[first+1]!='3') ) continue; // to wiersze sterujące....
//czytamy linię znak po znaku
norm=1; //zwykłe znaki, nie "polskie"
for(i=first;i<1000;i++)
{
if(line[i]==0 || line[i]==10 || line[i]==13) break;
if(line[i]=='-' && (line[i+1]==' ' || line[i+1]==13))
{ i++; continue;}
if(line[i]==0x5c && line[i+1]=='!') {putc(line[i+1],f2);putc('\n',f2);putc('\n',f2);i=i+2;}
else if(line[i]==0x5c && line[i+1]==',') {putc('\n',f2);putc('\n',f2);i=i+2;}
if(norm && line[i]!=0x5c) putc(line[i],f2);
else {
if(norm) i++;
if(line[i]=='1' ||
line[i]=='3' ||
line[i]=='#') { norm=1;continue; }
else if(line[i]=='2' || line[i]=='4') {norm=0;i++;}
switch(line[i])
{
case 'z': putc('ź',f2); break;
case 'x': putc('ż',f2); break;
case 'a': putc('ą',f2); break;
case 'c': putc('ć',f2); break;
case 's': putc('ś',f2); break;
case 'l': putc('ł',f2); break;
case 'n': putc('ń',f2); break;
case 'o': putc('ó',f2); break;
case 'e': putc('ę',f2); break;
case 'Z': putc('Ź',f2); break;
case 'X': putc('Ż',f2); break;
case 'A': putc('Ą',f2); break;
case 'C': putc('Ć',f2); break;
case 'S': putc('Ś',f2); break;
case 'L': putc('Ł',f2); break;
case 'N': putc('Ń',f2); break;
case 'O': putc('Ó',f2); break;
case 'E': putc('Ę',f2); break;
case '92': break;
default : putc(line[i],f2); break;
}
}
}
putc('\n',f2);
}
fclose(f1);
fclose(f2);
return 0;
}