⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zkbj.c

📁 字库转换:竖向转横向
💻 C
字号:

/********************************************/
/*                                                                          */
/*                     字库编辑程序                    */
/*                                                                          */
/*              HJ.Jang 2007-02-05PM 15:00s                */
/*                                                                          */
/********************************************/

#include<stdio.h>

char point_read[32];	/*读取字库*/
char point_write[32];	/*写字库*/
char tcCommand[50];
char modeDealFile;	/*文件处理模式*/
char or8[8] ={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
char and8[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

int  width;

/********************************************/
/*                                                                          */
/*     a、上下对调                                        */
/*                                                                          */
/********************************************/
void DealFileA(void)
{
	int i;

	for(i=0; i<width; i++)
		point_write[i+width] = point_read[i];
	for(i=width; i<width*2; i++)
		point_write[i-width] = point_read[i];
}

/********************************************/
/*                                                                          */
/*     b、左右对调                                        */
/*                                                                          */
/********************************************/
void DealFileB(void)
{
	int i;

	for(i=0; i<width/2; i++)					/*0-7*/
		point_write[i+width/2] = point_read[i];				/*8-17	0-7*/
	for(i=width/2; i<width; i++)				/*8-17*/
		point_write[i-width/2] = point_read[i];				/*0-7	8-17*/

	for(i=width; i<(width*3/2); i++)			/*16-24*/
		point_write[i+width/2] = point_read[i];				/*24-32	16-24*/
	for(i=(width*3/2); i<width*2; i++)			/*24-32*/
		point_write[i-width/2] = point_read[i];				/*16-24	24-32*/
}

/********************************************/
/*                                                                          */
/*     c、单元翻转(上下)  (=旋转180)   */
/*                                                                          */
/********************************************/
void DealFileC(void)
{
	int i, j;
	char temp1, temp2;

	for(i=0; i<width*2; i++)
	{
		temp1 = point_read[i];

		/*bit-01234567 to bit-76543210*/
		temp2 = 0x00;
		for(j=0; j<8; j++)
		{
			if(temp1 & or8[j])
				temp2 |= or8[7-j];
		}
		point_write[i] = temp2;
	}
}

/********************************************/
/*                                                                          */
/*     d、单元翻转(左右)  (=旋转180)   */
/*                                                                          */
/********************************************/
void DealFileD(void)
{
	int i, j;
	char temp;

	for(i=0; i<width/4; i++)
	{
		for(j=0; j<8; j++)
		{
			point_write[i*8+7-j] = point_read[i*8+j];
		}
	}
}

/********************************************/
/*                                                                          */
/*     e、单元旋转+(顺时针旋转90)    */
/*                                                                          */
/********************************************/
void DealFileE(void)
{
	int i, j, k;
	char temp1, temp2;

	for(i=0; i<width/4; i++)	/*单元数*/
	{
		for(k=0; k<8; k++)		/*循环8次*/
		{
			temp2 = 0x00;
			for(j=0; j<8; j++)			/*旋转1行*/
			{
				temp1 = point_read[j+i*8];	/*0-7, 8-15, ... */

				if(temp1 & or8[k])
					temp2 |= or8[j];
			}
			point_write[k+i*8] = temp2;
		}
	}
}

/********************************************/
/*                                                                          */
/*     f、单元旋转-(逆时针旋转90)     */
/*                                                                          */
/********************************************/
void DealFileF(void)
{
	int i, j, k;
	char temp1, temp2;

	for(i=0; i<width/4; i++)	/*单元数*/
	{
		for(k=0; k<8; k++)		/*循环8次*/
		{
			temp2 = 0x00;
			for(j=0; j<8; j++)			/*旋转1行*/
			{
				temp1 = point_read[j+i*8];	/*0-7, 8-15, ... */

				if(temp1 & or8[k])
					temp2 |= or8[7-j];
			}
			point_write[k+i*8] = temp2;
		}
	}
}

/********************************************/
/*                                                                          */
/*     g、奇偶穿插-(01234567 ->04 15 26 37) */
/*                                                                          */
/********************************************/
void DealFileG(void)
{
	int i;

	for(i=0; i<width; i++)
	{
		point_write[i*2+1] = point_read[i];
		point_write[i*2] = point_read[i+width];
	}
}

/********************************************/
/*                                                                          */
/*     h、逆奇偶穿插-(04152637->01234567) */
/*                                                                          */
/********************************************/
void DealFileH(void)
{
	int i;

	for(i=0; i<width; i++)
	{
		point_write[i] = point_read[i*2+1];
		point_write[i+width] = point_read[i*2];
	}
}

/********************************************/
/*                                                                          */
/*     j、阵列对调- (0 1 2 3 -> 0 2 1 3)         */
/*                                                                          */
/********************************************/
void DealFileJ(void)
{
	int i;

	for(i=0; i<8; i++)
	{
		point_write[i+0] = point_read[i+0];
		point_write[i+8] = point_read[i+16];
		point_write[i+16] = point_read[i+8];
		point_write[i+24] = point_read[i+24];
	}
}

void DealFile(void)
{
	switch(modeDealFile)
	{
	case 'a':
		DealFileA();
		break;

	case 'b':
		DealFileB();
		break;

	case 'c':
		DealFileC();
		break;

	case 'd':
		DealFileD();
		break;

	case 'e':
		DealFileE();
		break;

	case 'f':
		DealFileF();
		break;

	case 'g':
		DealFileG();
		break;

	case 'h':
		DealFileH();
		break;

	case 'j':
		DealFileJ();
		break;
	}
}

/********************************************/
/*                                                                          */
/*     a、上下对调                                        */
/*     b、左右对调                                        */
/*     c、单元翻转  (相当于旋转180)   */
/*     d、单元旋转+(顺时针旋转90)    */
/*     e、单元旋转-(逆时针旋转90)     */
/*                                                                          */
/*     0、退出Exit                                             */
/*                                                                          */
/********************************************/
char DealFileMode(void)
{
	char whileFlagTmp = 1;
	char getC;

	while(whileFlagTmp)
	{
		system("cls");
		printf("a,  Shang xia dui diao                                        \n");
		printf("b,  Zuo you dui diao                                            \n");
		printf("c,  Dan yuan fan zhuan(sx) ( = Xuan zhuan 180)    \n");
		printf("d,  Dan yuan fan zhuan(zy) ( = Xuan zhuan 180)    \n");
		printf("e,  Dan yuan xuan zhuan + ( Shun shi zhen 90)     \n");
		printf("f,  Dan yuan xuan zhuan - ( Ni shi zhen 90)         \n");
		printf("g,  Ji ou chuan cha (01234567 ->04 15 26 37)     \n");
		printf("h,  Ni ji ou chuan cha (04 15 26 37 ->01234567)   \n");
		printf("j,  Zhen lie dui diao - (0 1 2 3 -> 0 2 1 3)            \n");
		printf("0,  Exit                                                              \n");

		whileFlagTmp = 0;
		modeDealFile = 0;
		getC= getchar();
		switch(getC)
		{
		case 'a':
		case 'A':
			modeDealFile = 'a';
			break;

		case 'b':
		case 'B':
			modeDealFile = 'b';
			break;

		case 'c':
		case 'C':
			modeDealFile = 'c';
			break;

		case 'd':
		case 'D':
			modeDealFile = 'd';
			break;

		case 'e':
		case 'E':
			modeDealFile = 'e';
			break;

		case 'f':
		case 'F':
			modeDealFile = 'f';
			break;

		case 'g':
		case 'G':
			modeDealFile = 'g';
			break;

		case 'h':
		case 'H':
			modeDealFile = 'h';
			break;

		case 'j':
		case 'J':
			modeDealFile = 'j';
			break;

		case '0':
			modeDealFile = 0;
			break;

		default:
			whileFlagTmp = 1;
			break;
		}
	}
	
	return modeDealFile;
}

void main(int argc,char *argv[])
{
	FILE *fpTmp1,*fpTmp2;
	int handle;
	int i, j;
	int length32, error;
	char temp1, temp2;
	char flagWhile = 1;

	/*参数选择字库类型 4, 8, -*/
	if(strcmp(argv[3],"4")==0)	/*6x8*/
	{
		width = 4;
	}
	else if(strcmp(argv[3],"8")==0)	/*8x16*/
	{
		width = 8;
	}
	else
	{
		width = 16;
	}

	/*原始文件1  拷贝至临时文件Tmp1 */
	printf("del   Tmp1.Bin\n");
	system("del Tmp1.Bin");
	printf("copy   argv[1]   Tmp1.Bin\n");
	strcpy(tcCommand, "copy ");
	strcat(tcCommand, argv[1]);
	strcat(tcCommand, " Tmp1.Bin");
	system(tcCommand);

	while(flagWhile)
	{
		/*临时文件Tmp1  拷贝至临时文件Tmp2 */
		printf("del   Tmp2.Bin\n");
		system("del Tmp2.Bin");
		printf("copy   Tmp1.Bin   Tmp2.Bin\n");
		strcpy(tcCommand, "copy Tmp1.Bin Tmp2.Bin");
		system(tcCommand);

		/*选择文件操作方式*/
		modeDealFile = DealFileMode();
		if(modeDealFile == 0)
		{
			flagWhile = 0;
			continue;
		}

		/*统一打开临时文件*/
		if((fpTmp1=fopen("Tmp1.Bin","rb"))==NULL)
		{
			printf("Cannot open Tmp1.Bin\n");
			getch();
			exit(1);
		}

		if((fpTmp2=fopen("Tmp2.Bin","wb"))==NULL)
		{
			printf("Cannot open Tmp2.Bin\n");
			getch();
			exit(1);
		}

		/*文件操作*/
		error = 0;
		if(width == 16)
		{
			length32 = 0x4000;
		}
		else
		{
			length32 = 0x200;
		}
		while(length32--)
		{
			for(i=0; i<width*2; i++)
			{
				point_read[i]= fgetc(fpTmp1);
				if(point_read[i]== EOF)
				{
					printf("read error %4X <-> %d\n", length32, error);
				}
			}

			DealFile();

			for(i=0; i<width*2; i++)
			{
				fputc(point_write[i], fpTmp2);
			}
		}

		/*统一关闭临时文件*/
		fclose(fpTmp1);
		fclose(fpTmp2);

		/*临时文件Tmp2  拷贝至临时文件Tmp1 */
		printf("del   Tmp1.Bin\n");
		system("del Tmp1.Bin");
		printf("copy   Tmp2.Bin   Tmp1.Bin\n");
		strcpy(tcCommand, "copy Tmp2.Bin Tmp1.Bin");
		system(tcCommand);
	}

	/*临时文件Tmp2 拷贝至目标文件2 */
	printf("del   argv[2]\n");
	strcpy(tcCommand, "del ");
	strcat(tcCommand, argv[2]);
	system(tcCommand);

	printf("copy   Tmp2.Bin   argv[2]\n");
	strcpy(tcCommand, "copy ");
	strcat(tcCommand, "Tmp2.Bin ");
	strcat(tcCommand, argv[2]);
	system(tcCommand);

	/*删除过程文件 */
	printf("del   Tmp1.Bin\n");
	strcpy(tcCommand, "del Tmp1.Bin");
	system(tcCommand);
	printf("del   Tmp2.Bin\n");
	strcpy(tcCommand, "del Tmp2.Bin");
	system(tcCommand);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -