📄 main.c
字号:
_if_ParseStatus = PARSE_MACRO_IFDEF_WAIT_ENDIF_MASK ;
}
else if( strncmp(wordBuffer,"define",6)==0) {
_if_ParseStatus = PARSE_MACRO_DEFINE_MASK ;
}
else if( strncmp(wordBuffer,"endif",5)==0) {
_iNest_if_macro-- ;
if( _iNest_if_macro == 0 ) {
return 1 ;
}
_if_ParseStatus = PARSE_MACRO_IFDEF_WAIT_ENDIF_MASK ;
}
else if( strncmp(wordBuffer,"include",7)==0) {
_if_ParseStatus = PARSE_MACRO_INCLUDE_FILE_MASK;
}
break ;
} ;
}
}
int ProcessConfigFile()
{
struct _IF_MARCO_PARAM _if_macro_param ;
while(1) {
if( _head_configfile[_iFileCounter].leadOfconfigBuffer >= _head_configfile[_iFileCounter].sizeOfconfigBuffer ) {
if( !GetConfigFile() ) return 0 ;
}
if( !GetWordFromConfigFile() ) {
return 0 ;
}
switch( _iParseStatus ) {
case PARSE_NULL :
if( strncmp(wordBuffer,"#",1)==0) {
_iParseStatus = PARSE_MACRO_MASK ;
}
break ;
case PARSE_MACRO_MASK :
if( strncmp(wordBuffer,"if",2)==0) {
Process_IfMacro() ;
_iParseStatus = PARSE_NULL ;
}
else if( strncmp(wordBuffer,"define",6)==0) {
_iParseStatus = PARSE_MACRO_DEFINE_MASK ;
}
else if( strncmp(wordBuffer,"include",7)==0) {
_iParseStatus = PARSE_MACRO_INCLUDE_FILE_MASK;
}
break ;
case PARSE_MACRO_INCLUDE_FILE_MASK:
_iFileCounter++ ;
ProcessFileName(wordBuffer) ;
_head_configfile[_iFileCounter].configFile = fopen(wordBuffer,"r");
_iParseStatus = PARSE_NULL ;
break ;
case PARSE_MACRO_DEFINE_MASK :
if( !findDefineTok(wordBuffer) ) {
_defineToks[defineTokLast].Value = -1 ;
strcpy(_defineToks[defineTokLast].Name,wordBuffer) ;
pLastDefineTok = &_defineToks[defineTokLast] ;
defineTokLast++ ;
}
_iParseStatus = PARSE_MACRO_DEFINE_VALUE_MASK ;
break ;
case PARSE_MACRO_DEFINE_VALUE_MASK :
if( strncmp(wordBuffer,"#",1)==0) {
_iParseStatus = PARSE_MACRO_MASK ;
break ;
}
else if( wordBuffer[0] != 0 ) {
pLastDefineTok->Value = atoi(wordBuffer) ;
_iParseStatus = PARSE_NULL ;
}
break ;
}
}
}
unsigned char _Char2Hex(char p)
{
if( p >= '0' && p <= '9' ) {
return p - '0' ;
}
if( p >= 'A' && p <= 'F' ) {
return p - 'A' + 0x0A ;
}
if( p >= 'a' && p <= 'f' ) {
return p - 'a' + 0x0A ;
}
return -1 ;
}
#if defined(GBK_DOT_SIZE_16) || defined(GBK_DOT_SIZE_12)
long int HZK_offset(int _hzCode)
{
int _hzHigh ;
int _hzLow ;
int X,Y,Z,M ;
long int offset ;
int _hzM ;
_hzHigh = _hzCode & 0xFF00 ;
_hzHigh >>= 8 ;
_hzHigh &= 0xFF ;
_hzLow = _hzCode & 0x00FF ;
if( _hzLow > 0xA0 ) {
M = 0x5E ;
Y = _hzLow - 0xA1 ;
if( _hzHigh > 0xA0 ) {
X = _hzHigh - 0xA1 ;
Z = 0 ;
}
else {
X = _hzHigh - 0x81 ;
Z = 0x2284 ;
}
} else {
M = 0x60 ;
if( _hzLow > 0x7F )
Y = _hzLow - 0x41 ;
else
Y = _hzLow - 0x40 ;
if( _hzHigh > 0xA0 ) {
X = _hzHigh - 0xA1 ;
Z = 0x3a44 ;
}
else {
X = _hzHigh - 0x81 ;
Z = 0x2e44 ;
}
}
offset = X*M + Y + Z ;
offset *= HZK_DOT_WIDTH ;
return offset ;
}
#endif // defined(GBK_DOT_SIZE_16)
#if defined(HZK_DOT_SIZE_16)
long int HZK_offset(int _hzCode)
{
int _hzHigh ;
long int offset ;
_hzCode -= 0xA1A1 ;
_hzHigh = _hzCode & 0xFF00 ;
_hzHigh >>= 8 ;
_hzHigh *= 94 ;
_hzCode &= 0xFF ;
_hzCode += _hzHigh ;
offset = _hzCode ;
offset *= HZK_DOT_WIDTH ;
return offset ;
}
#endif // defined(HZK_DOT_SIZE_16)
#if defined(HZK_DOT_SIZE_12)
long int HZK_offset(int _hzCode)
{
int _hzHigh ;
long int offset ;
_hzCode -= 0xA1A1 ;
_hzHigh = _hzCode & 0xFF00 ;
_hzHigh >>= 8 ;
_hzHigh *= 94 ;
_hzCode &= 0xFF ;
_hzCode += _hzHigh ;
offset = _hzCode ;
offset *= HZK_DOT_WIDTH ;
return offset ;
}
#endif // defined(HZK_DOT_SIZE_12)
void ProcessHZCodes()
{
int i,j ;
int _hzSrcCode = 0 ;
int _hzCode = 0 ;
int _hzHigh,_hzLow,_hzTemp ;
int _hzCodeIndex = 1 ;
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);
/* 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 */
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) ;
}
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 + -