📄 zkbj.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 + -