#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
void help(void)
{
puts("Конвертер кириллицы в DOS(CP866),Windows(CP1251) и КОИ-8");
puts("Формат запуска: CONVERT файл-источник файл-приемник РЕЖИМ");
puts("Режим может быть следующим:");
puts("dw - из DOSa в Windows");
puts("dk - из DOSa в КОИ-8");
puts("wd - из Windows в DOS");
puts("wk - из Windows в КОИ-8");
puts("kd - из КОИ-8 в DOS");
puts("kw - из КОИ-8 в Windows");
puts("в этих режим файл-приемник не обязателен");
puts("Также можно изменять код новой строки, свойственный UNIX и DOS(Windows)");
puts("ud - из UNIXa в DOS");
puts("du - из DOSa в UNIX");
puts("А в этих режимах файл-приемник необходим");
getch();
exit(255);
}
void main(int argc,char *argv[])
{
FILE *in,*out;
long i,t=0,m=0,j;
char dw[]={"L+T+-+¦¦Lг¦T¦=+¦¦TTLL-г++----¦¦-рстуфхцчшщъыьэюя###жжжжЦ=жж==Ц=ЦЦЦЦжЦжжж====ж=ж=Ц=ЦЦ==ЦжжЦЦ#####ЁёЄєЇїЎў°•·v№¤¦ и¬к¦п¬бв-Х¬?¦дИа"};
char dk[]={"стўчфхЎ·щъыьэюяЁЄєЇїцшу¦v¤ •°№рё+T+¦-+г-г¦T¦=+¦¦РСТБЗ-+зж¦бионмГДЙИЖАКп-л嬬-а-¦¦¦¬кйвд--ЕВНМОПЛTLL-¦L+¦-¦--+-LT¦гЩШУЫЯЧЬХЮЦ¬ЭФЪ"};
char wd[]={"??'?\".++¦%????? Ўў?¤?|§ЁcЄ\"¬-RЇ°?Ii?u¶·ё№є\"???їАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"};
char wk[]={"??'?\".К-Ф%?????ЪЯЧ?Э?|§¦cЩ\"Г-RУЬ?Ii?u¶Юг¬Ш\"???ЫстўчфхЎ·щъыьэюяЁЄєЇїцшу¦v¤ •°№рё+T+¦-+г-г¦T¦=+¦¦TLL-¦L+¦-¦--+-LT"};
char kd[]={"-¦-¬L-++T++---¦¦---Ї¦•vўєЄ ї°¤·Ў=¦-ёг㬬¬LLL---¦¦¦¦Ё¦¦TTT¦¦¦+++№юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"};
char kw[]={"ЦжЦЦЦЦжжЦЦж########пИХ?в¦ка¬-д¬б=ж=¬Ц==Ц==Ц==Ц=жжжжижж=Ц==Ц=жж榦рсЎфхЇуїшщъыьэюя ЁёЄєцт№vч°¤•ў·¦L+г-+L+-Lг¦T¦=+¦-¦TTL¦T--¦+¦-+-"};
char *pointer,mode[80];
if(argc==3)strcpy(mode,argv[2]);
else
{
if(argc==4)strcpy(mode,argv[3]);
else
{
printf("Invalid number of parameters %d\n",argc);
help();
}
}
pointer=NULL;
if(strcmp(mode,"du")==0)m=1;
if(strcmp(mode,"ud")==0)m=2;
if(strcmp(mode,"dw")==0)pointer=dw;
if(strcmp(mode,"dk")==0)pointer=dk;
if(strcmp(mode,"wd")==0)pointer=wd;
if(strcmp(mode,"wk")==0)pointer=wk;
if(strcmp(mode,"kd")==0)pointer=kd;
if(strcmp(mode,"kw")==0)pointer=kw;
if(pointer==NULL&&m==0)
{
printf("Error convertion mode:%s\n",argv[3]);
help();
}
if(m!=0&&argc!=4)
{
printf("Invalid number of parameters %d\n",argc);
help();
}
if((in=fopen(argv[1],"r+b"))==NULL)
{
printf("Can't open file %s\n",argv[1]);
help();
}
if(argc==4)
{
if((out=fopen(argv[2],"wb"))==NULL)
{
printf("Can't open file %s\n",argv[2]);
help();
}
}
else out=in;
i=0;
j=0;
while(feof(in)==0)
{
fseek(in,i,SEEK_SET);
fread(&t,1,1,in);
if(feof(in)==0)
{
fseek(out,j,SEEK_SET);
if(m==0)
{
if(t<128)fprintf(out,"%c",t);
else fprintf(out,"%c",*(pointer+t-128));
}
if(m==1)
{
if(t!=13)fprintf(out,"%c",t);
else j--;
}
if(m==2)
{
if(t!=10)fprintf(out,"%c",t);
else
{
fprintf(out,"%c%c",13,10);
j++;
}
}
}
i++;
j++;
}
}