Procedura hardcopy.c

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;
}

 



Edytuj