📄 main.c
字号:
char outbuf[15] ;
unsigned int temp ;
size_t inbytesleft ;
size_t outbytesleft ;
const char *inbuf_p;
char *outbuf_p;
temp = gbkCode & 0xFF00 ;
temp >>= 8 ;
temp &= 0xFF ;
inbuf[0] = temp ;
inbuf[1] = gbkCode & 0xFF ;
inbuf[2] = 0 ;
inbuf_p = inbuf ;
outbuf_p = outbuf ;
inbytesleft = 2 ;
outbytesleft = 2*2 ;
iconv(_hzIconv,(const char **)&inbuf_p,&inbytesleft,&outbuf_p,&outbytesleft) ;
Utf8ToUSC2(outbuf,inbuf) ;
temp = inbuf[0] & 0xFF ;
temp <<= 8 ;
temp |= inbuf[1] & 0xFF ;
return temp ;
}
void ProcessHZCodes() // using freetype2 to get bitmap
{ // HZ as unicode code
int psize;
FT_Library library;
FT_Face face;
unsigned int ucode;
FILE *_c_hz_code_file ;
FILE *_h_hz_code_file ;
iconv_t _hzIconv ;
char _buffer[128] ;
int _hzCode ;
int _hzHigh,_hzLow, _hzNdx, _hzTemp ;
int i,j ;
char *p ;
int _hzCodeIndex ;
int c ;
if( FT_Init_FreeType(&library) ) {
printf("freetype2 lib can not init!...") ;
return ;
}
if( FT_New_Face(library,HZK_FILE,0,&face) ) {
printf("freetype2 font file can not found!..%s.",HZK_FILE) ;
return ;
}
// printf("Face \n") ;
// printf(" face_flags = %x\n",face->face_flags) ;
// printf(" num_fixed_sizes = %d\n",face->num_fixed_sizes) ;
// printf(" height = %d\n",face->height) ;
// printf(" max advance width = %d\n",face->max_advance_width) ;
// printf(" max advance height = %d\n",face->max_advance_height) ;
// printf(" available_sizes height = %d\n",face->available_sizes->height) ;
// printf(" available_sizes widtht = %d\n",face->available_sizes->width) ;
if( face->face_flags & FT_FACE_FLAG_SCALABLE ) {
psize = HZK_DOT_SIZE ;
} else {
if( face->available_sizes->height > face->available_sizes->width )
psize = face->available_sizes->height ;
else
psize = face->available_sizes->width ;
}
if( FT_Set_Pixel_Sizes(face,psize,0) ) {
printf("freetype2 font can not set pixel size!..%d.",psize) ;
return ;
}
_hzIconv = iconv_open("UTF-8","GBK") ;
if( _hzIconv == -1 ) {
printf("iconv can not open! ") ;
return ;
}
_c_hz_code_file = fopen(C_HZ_CODE_FILE,"w") ;
_h_hz_code_file = fopen(H_HZ_CODE_FILE,"w") ;
sprintf(_buffer,"#include <reg51.h>\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"config.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"pindef.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"types.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"gdefs.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"%s\"\n",H_HZ_CODE_FILE) ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#if !defined(__HZK_DEF_H__)\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer," #define __HZK_DEF_H__ \n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include <reg51.h>\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include \"config.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include \"pindef.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include \"types.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include \"gdefs.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"\n\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#define HZK_DOT_SIZE %d\n",HZK_DOT_SIZE) ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"typedef unsigned char __HZ_CharCode[%d] ;\n",HZK_DOT_WIDTH) ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"extern const __HZ_CharCode code _HZ_CodeMaps[] ;\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"\n\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"const __HZ_CharCode code _HZ_CodeMaps[] = { \n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
/* dump 0x00 */
sprintf(_buffer,"{") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
_hzNdx=0 ;
while(_hzNdx<HZK_DOT_WIDTH) {
_hzNdx++ ;
_hzTemp = 0x0000 ;
sprintf(_buffer,"0x%2X,",_hzTemp) ;
if( _buffer[2] == ' ' ) _buffer[2] = '0' ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
if( _hzNdx % 8 == 0 ) {
sprintf(_buffer,"\n ") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
}
}
_hzHigh = 0x00 ;
_hzLow = 0x00 ;
sprintf(_buffer,"}, /* HZCODE_NULL 0x0000 0 */ \n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#define HZCODE_NULL 0 \n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
/* end of dump 0x00 */
_hzCodeIndex = 1 ;
for(i=0;i<defineTokLast;i++) {
if( strncmp(_defineToks[i].Name,"HZCODE_",6) == 0 ) {
p = &_defineToks[i].Name[7] ;
_hzCode = 0 ;
for(j=0;j<4;j++) {
_hzCode <<= 4 ;
c = _Char2Hex(*p++) ;
_hzCode |= c ;
}
sprintf(_buffer,"#define HZCODE_%4X %d \n",_hzCode,_hzCodeIndex++) ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
ucode = convertUnicode(_hzIconv,_hzCode) ;
OutOneHZ(&face,ucode,_c_hz_code_file,_h_hz_code_file) ;
_hzHigh = _hzCode&0xFF00 ;
_hzHigh >>= 8 ;
_hzLow = _hzCode&0xFF ;
sprintf(_buffer,"}, /* HZCODE_%4X %c%c (USC2:%4X) %d */ \n",_hzCode,_hzHigh,_hzLow,ucode,_hzCodeIndex-1) ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
}
}
sprintf(_buffer,"} ; \n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"\n\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#endif /* !defined(__HZK_DEF_H__) */\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
fclose(_h_hz_code_file) ;
fclose(_c_hz_code_file) ;
FT_Done_Face(face) ;
iconv_close(_hzIconv) ;
}
#else // defined(FREETYPE2_DOT_SIZE_9)
void ProcessHZCodes() // HZ as GBK code
{
int i,j ;
int _hzSrcCode = 0 ;
int _hzCode = 0 ;
int _hzHigh,_hzLow,_hzTemp ;
int _hzCodeIndex = 0 ;
int _hzSize,_hzNdx ;
char *p ;
int c ;
FILE *_hzk_file ;
FILE *_c_hz_code_file ;
FILE *_h_hz_code_file ;
char _hzk_code[HZK_DOT_WIDTH+1] ;
fpos_t fpos ;
long int offset ;
char _buffer[128] ;
_hzk_file = fopen(HZK_FILE,"rb") ;
if( !_hzk_file ) {
printf("Can not open HZK : %s\n",HZK_FILE) ;
return ;
}
_c_hz_code_file = fopen(C_HZ_CODE_FILE,"w") ;
_h_hz_code_file = fopen(H_HZ_CODE_FILE,"w") ;
sprintf(_buffer,"#include <reg51.h>\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"config.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"pindef.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"types.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"gdefs.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#include \"%s\"\n",H_HZ_CODE_FILE) ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"#if !defined(__HZK_DEF_H__)\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer," #define __HZK_DEF_H__ \n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include <reg51.h>\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include \"config.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include \"pindef.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include \"types.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#include \"gdefs.h\"\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"\n\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#define HZK_DOT_SIZE %d\n",HZK_DOT_SIZE) ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"typedef unsigned char __HZ_CharCode[%d] ;\n",HZK_DOT_WIDTH) ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"extern const __HZ_CharCode code _HZ_CodeMaps[] ;\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"\n\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"const __HZ_CharCode code _HZ_CodeMaps[] = { \n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
for(i=0;i<defineTokLast;i++) {
if( strncmp(_defineToks[i].Name,"HZCODE_",6) == 0 ) {
p = &_defineToks[i].Name[7] ;
_hzCode = 0 ;
for(j=0;j<4;j++) {
_hzCode <<= 4 ;
c = _Char2Hex(*p++) ;
_hzCode |= c ;
}
sprintf(_buffer,"#define HZCODE_%4X %d \n",_hzCode,_hzCodeIndex++) ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
_hzSrcCode = _hzCode ;
offset = HZK_offset(_hzCode) ;
fpos = 0 ;
fsetpos(_hzk_file,&fpos);
fgetpos(_hzk_file,&fpos);
fseek(_hzk_file,offset,SEEK_SET);
if( fread(_hzk_code,1,HZK_DOT_WIDTH,_hzk_file) == 0 ) {
printf("HZ Code can not found %4X\n",_hzCode) ;
fclose(_hzk_file) ;
fclose(_c_hz_code_file) ;
fclose(_h_hz_code_file) ;
return ;
}
sprintf(_buffer,"{") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
_hzNdx=0 ;
while(_hzNdx<HZK_DOT_WIDTH) {
_hzTemp = _hzk_code[_hzNdx++] & 0xFF ;
sprintf(_buffer,"0x%2X,",_hzTemp) ;
if( _buffer[2] == ' ' ) _buffer[2] = '0' ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
if( _hzNdx % 8 == 0 ) {
sprintf(_buffer,"\n ") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
}
}
_hzHigh = _hzSrcCode&0xFF00 ;
_hzHigh >>= 8 ;
_hzLow = _hzSrcCode&0xFF ;
sprintf(_buffer,"}, /* HZCODE_%4X %c%c %d */ \n",_hzSrcCode,_hzHigh,_hzLow,_hzCodeIndex-1) ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
}
}
sprintf(_buffer,"} ; \n") ;
fwrite(_buffer, 1, strlen(_buffer), _c_hz_code_file);
sprintf(_buffer,"\n\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
sprintf(_buffer,"#endif /* !defined(__HZK_DEF_H__) */\n") ;
fwrite(_buffer, 1, strlen(_buffer), _h_hz_code_file);
fclose(_h_hz_code_file) ;
fclose(_hzk_file) ;
fclose(_c_hz_code_file) ;
}
#endif // defined(FREETYPE2_DOT_SIZE_9)
int main()
{
_iFileCounter = 0 ;
_head_configfile[_iFileCounter].sizeOfconfigBuffer = 0 ;
_head_configfile[_iFileCounter]._iConfigFile_Line_Counter = 1 ;
defineTokIndex = 0 ;
defineTokLast = 0 ;
_head_configfile[_iFileCounter].configFile = fopen(HZCODE_DEFIND_FILE,"r");
if( _head_configfile[_iFileCounter].configFile ) {
ProcessConfigFile() ;
fclose(_head_configfile[_iFileCounter].configFile) ;
ProcessHZCodes() ;
}
else {
printf("HZ Code define header file can not found %s\n",HZCODE_DEFIND_FILE) ;
}
return 0 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -