#include #include "algoreco.h" #define from_encoding koi #define to_encoding koi #define message_encoding koi #define max_buffer_size 512 unsigned char buffer[max_buffer_size],debugchar[2]; unsigned int lastchar, newchar, j, n, code_num; int i, statist[5]; #define from_to_char(argf,argt,argd) \ ( argd < 128 )? argd :\ (( argf ==iso)&&( argt ==iso))? argd :\ ( argf ==iso)? to_the [ argt ][ argd & 127 ] :\ ( argt ==iso)? from_the [ argf ][ argd & 127 ] :\ to_the [ argt ][(from_the [ argf ][ argd & 127]) & 127 ] #define from_char(argf,argd) ((argd<128)||(argf==iso))? argd :\ from_the [argf][argd & 127] int biletter_index (int encoding, int last_char, int new_char) { int new; new=key_new[from_char(encoding,new_char)]; new=(table[key_last[from_char(encoding,last_char)]][new>>2]>>((new & 3)<<1))&3; if (new==3) new=-10; return(new); } int main() { while (((newchar=getchar())!=EOF)&&( newchar<128)) { putchar(newchar); lastchar=newchar; } n=0; j=0; /* Пропустив возможное латинское начало */ while ((n[%d,%d]->[%d,%d]->%d>>%d(%d)}\n", debugchar, i,debugchar+1, lastchar,newchar, from_char(from_encoding,lastchar), from_char(from_encoding,newchar), key_last[from_char(from_encoding,lastchar)], key_new[from_char(from_encoding,newchar)], table[key_last[from_char(from_encoding,lastchar)]] [key_new[from_char(from_encoding,newchar)]>>2], (key_new[from_char(from_encoding,newchar)]&3)<<1, from_encoding); #endif if (newchar>128) { j=(i==0)? j+2: (i==1)? j++: (i==2)? 0:5; if (j>3) { #if defined debug printf("Подозрительно похоже на бессмыслицу!\n"); #endif break; } } lastchar=newchar; newchar=getchar(); } /* Если нет особых оснований сомневаться в кои - заканчиваем; * */ if ((n==max_buffer_size)||(newchar==EOF)) { for(i=0;i statist[code_num]) code_num=i; } #if defined debug printf("Кодировка файла= %d.\n",code_num); #endif /* и завершить работу */ for(i=0;i