• Авторизация


Может кому пригодится 26-05-2008 15:54 к комментариям - к полной версии - понравилось!


#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++;
	}
}
вверх^ к полной версии понравилось! в evernote
Комментарии (2):
Liru при передаче исказило содержание массивов dw[],dk[],wd[], wk[], kw[], kd[] Постараюсь разобраться как лучше их передать, и опубликую.


Комментарии (2): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Может кому пригодится | _Программирование_ - Дневник _Программирование_ | Лента друзей _Программирование_ / Полная версия Добавить в друзья Страницы: раньше»