/* (c) Copyright 1994 Laishev Ruslan R. All right reserved !!! */ #include #include #include FILE *finp, *fout; char fname [ 256 ]; int LatRus_Mode0= 0, LatRus_Mode1= 0, LatRus_Mode = 0; char *cp, *TransRus = {""}, *TransLat = {"ABVGDEEJZI)KLMNOPRSTUFH+(,?YXWQC"}; char buff [4096]; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- int Coding0 (void) { int Coding1 (char *); int Coding2 (char *); while (fgets (buff,sizeof(buff) - 5,finp) ) { if ( Coding1(buff) ) Coding2(buff); if ( EOF == fputs (buff,fout) ) {perror("Writting"); return -1;} } return 0; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- int Coding1 (char *buff) { char *TransOn0 = "*** :20 /"; char *TransOn1 = " :'"; char *TransOff = "***------"; char *TransField[] = { {"*** :50 /"},{"*** :57D/"},{"*** :59 /"}, {"*** :70 /"},{"*** :72 /"},{NULL} }; int TransFieldN = 5, i; /* Searching signature of russian payment: transliteration signature at begin of 20 field (:') */ if ( strstr (buff,TransOn0) && strstr(buff,TransOn1) ) {LatRus_Mode = 1; return 0;}; if ( LatRus_Mode ) { if ( NULL != strstr (buff,TransOff) ) {LatRus_Mode = 0; return 0;} } else return 0; /* Checking for begin of new field */ if ( (buff[4]==':') && (buff[8]=='/') ) { for (i = 0 ; i < TransFieldN ;i++) { if ( strstr(buff,TransField[i]) ) return (LatRus_Mode0 = 1); } LatRus_Mode0 = 0; } return LatRus_Mode0; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- int Coding2 (char *buff) { if ( (buff[4]==':') && (buff[8]=='/') ) { if ( 41 >= strlen(buff) ) return 0; buff +=40; } for (;*buff != 0;buff++) { if ( (*buff == 'Y') && (*(buff+1) == 'X') ) { *(buff) = ' '; *(buff+1) = ' '; LatRus_Mode1 ^= 1; } if ( (!LatRus_Mode1) && LatRus_Mode0 ) { if (NULL != (cp = strchr(TransLat,*buff))) *buff=*(TransRus+(cp-TransLat)); } } return 0; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- int main (void) { //------ if ( NULL == gets (fname) ) {puts(fname); perror("Get filename"); return -1;} //------ if( NULL == (finp=fopen(fname,"r")) ) {perror("Open for input"); return -1;} if( NULL == (fout=fopen(fname,"w")) ) {perror("Open for output"); return -1;} Coding0(); if ( fclose(finp) ) {perror("Close input"); return -1;} if ( fclose(fout) ) {perror("Close output"); return -1;} //------ return 0; }