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

📄 main.c

📁 按C51格式生成汉字字模的.c及.h的windows C源码
💻 C
📖 第 1 页 / 共 3 页
字号:
      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 + -