📄 refer.cpp
字号:
int nNum = 0;
// Get database header information
try
{
nNum += THandleStream::Read( &m_rdReferDatabase.nMagic, 4 );
nNum += THandleStream::Read( &m_rdReferDatabase.nCount, 4 );
nNum += THandleStream::Read( &m_rdReferDatabase.nId, 4 );
nNum += THandleStream::Read( &m_rdReferDatabase.nIndex, 4 );
nNum += THandleStream::Read( &m_rdReferDatabase.nOffset, 4 );
for( int i=0; i<4; i++ )
nNum += THandleStream::Read( &m_rdReferDatabase.nReserved[i], 4 );
}
catch( ... )
{
Application->MessageBox(
const_cast< char * >( MI_READHEADFAILED ),
const_cast< char * >( MT_FATALERROR ),
MB_OK + MB_ICONERROR );
Application->Terminate();
}
// Construct References' link.
unsigned __int32 nReadCount = m_rdReferDatabase.nCount;
try
{
// Allocate memory for m_rdReferDatabase.pReferLink dynamically.
// m_rdReferDatabase.pReferLink = new TReferLink;
// m_rdReferDatabase.pReferLink->pReferRecord = NULL;
// m_rdReferDatabase.pReferLink->pNext = NULL;
// Set working pointer q1 and p1.
TReferLink *q1 = new TReferLink;
TReferRecord *p1 = new TReferRecord;
// Get the first reference record.
nNum += ReadReferRecord( p1 );
q1->pReferRecord = p1;
// Construct the link.
q1->pPrevious = NULL;
q1->pNext = NULL;
// Set the initial reference link field of the reference database.
m_rdReferDatabase.pReferLink = q1;
// Set the first reference pointer.
m_prlFirstReferLink = q1;
// Set the current reference pointer.
m_prlCurrReferLink = q1;
// Get next references.
while( --nReadCount > 0 )
{
// Allocate memory for a new one.
TReferLink *q2 = new TReferLink;
TReferRecord *p2 = new TReferRecord;
// Get the next reference record.
nNum += ReadReferRecord( p2 );
q2->pReferRecord = p2;
// Construct the link.
q2->pPrevious = q1;
q2->pNext = NULL;
q1->pNext = q2;
// Get next reference.
q1 = q1->pNext;
}
// Set the last reference pointer.
m_prlLastReferLink = q1;
}
catch( ... )
{
Application->MessageBox(
const_cast< char * >( MI_NOMEMORY ),
const_cast< char * >( MT_FATALERROR ),
MB_OK + MB_ICONERROR );
Application->Terminate();
}
return nNum;
}
*/
//---------------------------------------------------------------------------
int __fastcall TReferenceStream::Write( const void *Buffer, int Count )
{
return THandleStream::Write( Buffer, Count );
}
//---------------------------------------------------------------------------
int __fastcall TReferenceStream::WriteReferDatabaseHeader( TReferDatabaseHeader *prdHeader )
{
int nNum = 0;
// Write database header information
try
{
nNum += THandleStream::Write( &prdHeader->nMagic, 4 );
nNum += THandleStream::Write( &prdHeader->nCount, 4 );
nNum += THandleStream::Write( &prdHeader->nId, 4 );
nNum += THandleStream::Write( &prdHeader->nIndex, 4 );
nNum += THandleStream::Write( &prdHeader->nOffset, 4 );
for( int i=0; i<4; i++ )
nNum += THandleStream::Write( &prdHeader->nReserved[i], 4 );
}
catch( ... )
{
Application->MessageBox(
const_cast< char * >( MI_WRITEHEADFAILED ),
const_cast< char * >( MT_FATALERROR ),
MB_OK + MB_ICONERROR );
Application->Terminate();
}
return nNum;
}
//---------------------------------------------------------------------------
int __fastcall TReferenceStream::WriteReferRecord( TReferRecord *pRef )
{
// virtual int __fastcall Seek(int Offset, Word Origin) = 0;
// Word Type: soFromBeginning, soFromCurrent, soFromEnd.
// Position indicates the current position of the stream pointer.
THandleStream::Seek( 0, soFromCurrent ); // From the very beginning of the stream.
int nLen = 0;
try
{
nLen += THandleStream::Write( &pRef->nMagic, 4 );
nLen += THandleStream::Write( &pRef->nId, 4 );
nLen += THandleStream::Write( &pRef->eReferType, 1 );
nLen += THandleStream::Write( &pRef->sReserved, 3 );
nLen += THandleStream::Write( &pRef->nLength, 4 );
nLen += THandleStream::Write( &pRef->nOffset, 4 );
nLen += THandleStream::Write( &pRef->nCrossReferIndex, 1 );
nLen += THandleStream::Write( &pRef->nAuthors, 1 );
nLen += THandleStream::Write( &pRef->nTitle, 2 );
nLen += THandleStream::Write( &pRef->nJournal, 2 );
nLen += THandleStream::Write( &pRef->vnVolumeAndNumber, 2 );
nLen += THandleStream::Write( &pRef->nProceedings, 2 );
nLen += THandleStream::Write( &pRef->nConferencePlace, 2 );
nLen += THandleStream::Write( &pRef->nConferenceDate, 2 );
nLen += THandleStream::Write( &pRef->nBook, 2 );
nLen += THandleStream::Write( &pRef->nEditors, 1 );
nLen += THandleStream::Write( &pRef->nTechnicalReport, 2 );
nLen += THandleStream::Write( &pRef->nNote, 2 );
nLen += THandleStream::Write( &pRef->ymPublicationDate, 4 );
nLen += THandleStream::Write( &pRef->sePages, 4 );
nLen += THandleStream::Write( &pRef->nKeywordsNumber, 1 );
nLen += THandleStream::Write( &pRef->nKeywords, 2 );
nLen += THandleStream::Write( &pRef->nAbstract, 4 );
nLen += THandleStream::Write( &pRef->nReserved, 16 );
if( pRef->nCrossReferIndex > 0 )
nLen += THandleStream::Write( pRef->asCrossReferIndex.c_str(), ( int )( pRef->nCrossReferIndex ) );
if( pRef->nAuthors > 0 )
nLen += THandleStream::Write( pRef->asAuthors.c_str(), ( int )( pRef->nAuthors ) );
if( pRef->nTitle > 0 )
nLen += THandleStream::Write( pRef->asTitle.c_str(), ( int )( pRef->nTitle ) );
if( pRef->nJournal > 0 )
nLen += THandleStream::Write( pRef->asJournal.c_str(), ( int )( pRef->nJournal ) );
if( pRef->nProceedings > 0 )
nLen += THandleStream::Write( pRef->asProceedings.c_str(), ( int )( pRef->nProceedings ) );
if( pRef->nConferencePlace > 0 )
nLen += THandleStream::Write( pRef->asConferencePlace.c_str(), ( int )( pRef->nConferencePlace ) );
if( pRef->nConferenceDate > 0 )
nLen += THandleStream::Write( pRef->asConferenceDate.c_str(), ( int )( pRef->nConferenceDate ) );
if( pRef->nKeywords > 0 )
nLen += THandleStream::Write( pRef->asKeywords.c_str(), ( int )( pRef->nKeywords ) );
if( pRef->nAbstract > 0 )
nLen += THandleStream::Write( pRef->asAbstract.c_str(), ( int )( pRef->nAbstract ) );
// nLen += THandleStream::Write( &m_refRecord.nTail, 4 );
}
catch( ... )
{
Application->MessageBox(
const_cast< char * >( MI_WRITEFAILED ),
const_cast< char * >( MT_FATALERROR ),
MB_OK + MB_ICONERROR );
Application->Terminate();
}
return nLen;
}
//---------------------------------------------------------------------------
/*
int __fastcall TReferenceStream::WriteAll()
{
int nNum = 0;
// Write database header information
try
{
nNum += THandleStream::Write( &m_rdReferDatabase.nMagic, 4 );
nNum += THandleStream::Write( &m_rdReferDatabase.nCount, 4 );
nNum += THandleStream::Write( &m_rdReferDatabase.nId, 4 );
nNum += THandleStream::Write( &m_rdReferDatabase.nIndex, 4 );
nNum += THandleStream::Write( &m_rdReferDatabase.nOffset, 4 );
for( int i=0; i<4; i++ )
nNum += THandleStream::Write( &m_rdReferDatabase.nReserved[i], 4 );
}
catch( ... )
{
Application->MessageBox(
const_cast< char * >( MI_WRITEHEADFAILED ),
const_cast< char * >( MT_FATALERROR ),
MB_OK + MB_ICONERROR );
Application->Terminate();
}
unsigned __int32 nWriteCount = m_rdReferDatabase.nCount;
try
{
// Allocate memory for m_rdReferDatabase.pReferLink dynamically.
// Set working pointer q1 and p1.
TReferLink *q1 = m_rdReferDatabase.pReferLink;
TReferRecord *p1 = m_rdReferDatabase.pReferLink->pReferRecord;
// Write the first reference record.
if( p1 != NULL )
nNum += WriteReferRecord( p1 );
// Write next references.
while( --nWriteCount > 0 ) // || ( q1->pNext != NULL )
{
q1 = q1->pNext;
p1 = q1->pReferRecord;
if( p1 != NULL )
nNum += WriteReferRecord( p1 );
}
}
catch( ... )
{
Application->MessageBox(
const_cast< char * >( MI_NOMEMORY ),
const_cast< char * >( MT_FATALERROR ),
MB_OK + MB_ICONERROR );
Application->Terminate();
}
return nNum;
}
*/
//---------------------------------------------------------------------------
/*
void __fastcall TReferenceStream::LoadFromFile( const System::AnsiString FileName )
{
}
*/
//---------------------------------------------------------------------------
/*
void __fastcall TReferenceStream::SaveToFile( const System::AnsiString FileName )
{
// ofstream ofsRefer( m_asFileName, ios::out, filebuf::openprot );
}
*/
//---------------------------------------------------------------------------
//TReferenceStream *pReferenceStream = new TReferenceStream( "RF1993.rrf", fmCreate );
#pragma package(smart_init)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -