📄 objrecord_c.cpp
字号:
//---------------------------------------------------------------------------
//-------- OBJrecord_C.cpp --------------------------------------------------
//---------------------------------------------------------------------------
#include "TokenOper_H.h"
#include "OBJrecord_H.h"
#include "JLabelNode_H.h"
//---------------------------------------------------------------------------
#define TryNew(var,typ) var = new typ;
#define TryNewChar(var,len) TryNew(var,char[len])
//---------------------------------------------------------------------------
#define StrechMem(x) if(REC_LEN+(x) > size) \
{ if(size < 0x8000) { size *=2; } \
else { if(size!=0xfff0) { size=0xfff0; } \
else { return false; } \
} \
register int8u* ppt; \
TryNewChar(ppt,size) \
memcpy(ppt, dapt, REC_LEN); \
delete[] dapt; dapt = ppt; \
}
//---------------------------------------------------------------------------
//#pragma warn -8060
//---------------------------------------------------------------------------
bool OBJrecord::AddByte(int8u byte)
{ StrechMem( 1 ) // 宏调用
dapt[REC_LEN++] = byte;
CHK_SUM += byte;
return true;
} // end AddByte
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
bool OBJrecord::AddWord(int16u word)
{ StrechMem( 2 ) // 宏调用
pool_16 t;
t.pot16 = word;
dapt[REC_LEN++] = t.lowbyte;
dapt[REC_LEN++] = t.highbyte;
CHK_SUM += t.lowbyte + t.highbyte;
return true;
} // end AddWord
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
bool OBJrecord::AddLong(int32u lword)
{ StrechMem( 4 ) // 宏调用
pool_32 t;
t.pot32 = lword;
for(register int8u i = 0; i < 4; ++i )
{ dapt[REC_LEN++] = t.pot8[i];
CHK_SUM += t.pot8[i];
} // end for
return true;
} // end AddWord
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
bool OBJrecord::AddJstr(const Jstring& Jstr)
{ register int16u slen = Jstr.getLen();
if(slen >= 254) { puts("String too long in OBJrecord!"); } // endif
StrechMem( slen + 1 ) // 宏调用
dapt[REC_LEN++] = (int8u)slen;
CHK_SUM += (int8u)slen;
register const int8u* p = (const char*)Jstr;
memcpy( dapt + REC_LEN, p, (int8u)slen );
REC_LEN += (int8u)slen;
for( ; *p; ++p ) { CHK_SUM += *p; } // end for
return true;
} // end AddJstr
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
bool OBJrecord::AddJdat(const JdatBlock& Jdat)
{ register int16u dlen = Jdat.GetLen();
StrechMem( dlen ) // 宏调用
register const int8u* p = (const char*)Jdat;
memcpy( dapt + REC_LEN, p, dlen );
REC_LEN += dlen;
for( ; dlen > 0; --dlen, ++p )
{ CHK_SUM += *p; } // end for
return true;
} // end AddJdat
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void OBJrecord::show()const
{ printf("\nREC_TYP=%2.2XH, REC_LEN=%4.4X, CHK_SUM=%2.2X",
GetTYP(), GetLEN(), GetCHK() );
printf("\n Data=[");
register int16u i;
for( i = 0; i < REC_LEN; i++ )
{ printf(" %2.2x",dapt[i]); } // endfor
printf(" ]");
} // end show
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#undef TryNew(var,typ)
#undef TryNewChar(var,len)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// end OBJrecord_C.cpp
//---------------------------------------------------------------------------
// Written by JamesyFront. ZLGmcu Dev.Co.Ltd. 2002.
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -