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

📄 main.cc

📁 按C51格式生成汉字字模的.c及.h的windows C源码
💻 CC
字号:
#include <stdio.h>
#include <string.h>

#define HZK_FILE      "hzk12.bin"
#define HZK_DOT_FIZE  12

#define HZCODE_DEFIND_FILE  "CONFIGHZ.H"

struct DefinedTok {
    char  Name[250]   ;
    int   Value       ;
} ;

struct DefinedTok  _defineToks[200] ;
int defineTokIndex;
int defineTokLast ;

FILE  *configFile ;
char  configBuffer[200] ;
int   configIndex ;
int   configSize  ;
int   Push_If_Endif_Match_Counter ;

char *CompressLeadSpaces(const char *pSrc)
{
     char   *pDest ;

     pDest = (char *)pSrc ;
     while( *pDest == ' ' && pDest ) pDest++ ;
     return pDest ;
}

int ReadConfigLine()
{
     char c ;
     size_t  st ;

     configSize = 0 ;
     configBuffer[configSize] = 0 ;
     st = fread(&c,1,1,configFile);
     while(st && (c != '\n' && c != '\r') ) {
	  configBuffer[configSize++] = c ;
	  configBuffer[configSize] = 0 ;
	  st = fread(&c,1,1,configFile);
     }
     if( st & (c == '\n' || c == '\r') ) {
	  st = fread(&c,1,1,configFile);
     }
     return  configSize ;
}

int findDefineTok(char *pDef)
{
     int i ;

     for(i = 0 ; i < defineTokLast ; i++) {
	   if( strcmp(_defineToks[i].Name,pDef) == 0 ) {
	       return  1 ;
	   }
     }
     return 0 ;
}

void ConfigDefine()
{
    size_t i ;
    char *p ;
    char   *pConf ;
    size_t  max_len,size ;

    pConf = CompressLeadSpaces(configBuffer) ;
    p = strtok(pConf,"#define") ;
    pConf = CompressLeadSpaces(p) ;
    max_len = strlen(pConf) ;
    p = pConf ;
    while( *p != ' ' && p ) {
       p++ ;
    }
    *p = 0x0 ;
    if( !findDefineTok(pConf) ) {
	 _defineToks[defineTokLast].Value = -1 ;
	 strcpy(_defineToks[defineTokLast].Name,pConf) ;
	 if( strlen(pConf) < max_len ) {
	     p = &pConf[strlen(pConf)+1] ;
	     pConf = CompressLeadSpaces(p) ;
	     if( pConf ) {
		 _defineToks[defineTokLast].Value = atoi(pConf) ;
	     }
	 }
	 defineTokLast++ ;
    }
}

void Skip_LinesUntil_Endif()
{
     char *pConf ;
     int   Skip_If_Endif_Match_Counter ;

     Skip_If_Endif_Match_Counter = 1 ;
     while(ReadConfigLine()) {
	   pConf = CompressLeadSpaces(configBuffer) ;
	   if( strncmp(pConf,"#if",3) == 0 ) {
		 Skip_If_Endif_Match_Counter++ ;
	   }
	   if( strncmp(pConf,"#endif",5) == 0 ) {
		 Skip_If_Endif_Match_Counter-- ;
	   }
	   if( Skip_If_Endif_Match_Counter == 0 ) {
		return ;
	   }
     }
}

void ConfigIf_Defined(char *pConf)
{
     char *p ;

     p = pConf ;
     while( *p != ')' && p ) p++ ;
     *p = 0x00 ;
     if( findDefineTok(pConf) ) {
     }
}

void ConfigIf_Not_Defined(char *pConf)
{
     char *p ;

     p = pConf ;
     while( *p != ')' && p ) p++ ;
     *p = 0x00 ;
     if( findDefineTok(pConf) ) {
	 Skip_LinesUntil_Endif() ;
     }
}

void ConfigIf()
{
    char *p ;
    char *pConf ;

    pConf = CompressLeadSpaces(configBuffer) ;

    if( strncmp(pConf,"#if",3) == 0 ) {
	 pConf += 3 ;
    }
    pConf = CompressLeadSpaces(pConf) ;
    if( strncmp(pConf,"defined(",8) == 0 ) {
	   pConf += 8 ;
	   ConfigIf_Defined(pConf) ;
    }
    if( strncmp(pConf,"!defined(",9) == 0 ) {
	   pConf += 9 ;
	   ConfigIf_Not_Defined(pConf) ;
    }
}

void ConfigInclude()
{
}

void ProcessConfigLine()
{
     char   *pConf ;

     pConf = configBuffer ;
     while( *pConf == ' ' && pConf ) pConf++ ;
     if( strncmp(pConf,"#if",3) == 0 ) {
		  ConfigIf() ;
     }
     else if( strncmp(pConf,"#define",7) == 0 ) {
		  ConfigDefine() ;
     }
     else if( strncmp(pConf,"#include",8) == 0 ) {
		  ConfigInclude() ;
     } ;
}

int Matcher_If_Endif()
{
     char *pConf ;

     configFile = fopen(HZCODE_DEFIND_FILE,"r");
     while(ReadConfigLine()) {
	   pConf = CompressLeadSpaces(configBuffer) ;
	   if( strncmp(pConf,"#if",3) == 0 ) {
		 Push_If_Endif_Match_Counter++ ;
	   }
	   if( strncmp(pConf,"#endif",5) == 0 ) {
		 Push_If_Endif_Match_Counter-- ;
	   }
     }
     fclose(configFile) ;
     return Push_If_Endif_Match_Counter == 0 ;
}

int main()
{
     defineTokIndex = 0 ;
     defineTokLast  = 0 ;
     Push_If_Endif_Match_Counter = 0 ;

     if( ! Matcher_If_Endif() )  return 1 ;

     configFile = fopen(HZCODE_DEFIND_FILE,"r");
     while(ReadConfigLine()) {
	 printf("%s\n",configBuffer) ;
	 ProcessConfigLine() ;
     }
     fclose(configFile) ;
     return 0 ;
}

⌨️ 快捷键说明

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