//------------------------------------------------------------------------- // Desc: Class for displaying an FFILE structure in HTML on a web page. // Tabs: 3 // // Copyright (c) 2001-2006 Novell, Inc. All Rights Reserved. // // This program is free software; you can redistribute it and/or // modify it under the terms of version 2 of the GNU General Public // License as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, contact Novell, Inc. // // To contact Novell about this file by physical or electronic mail, // you may find current contact information at www.novell.com // // $Id: imonffil.cpp 12329 2006-01-20 17:49:30 -0700 (Fri, 20 Jan 2006) ahodgkinson $ //------------------------------------------------------------------------- #include "flaimsys.h" /**************************************************************************** Desc: This function handle the details of extracting the parameters needed to interpret the request and then generating the response HTML page ****************************************************************************/ RCODE F_FFilePage::display( FLMUINT uiNumParams, const char ** ppszParams) { RCODE rc = FERR_OK; #define GENERIC_SIZE_B 20 char szFrom[ GENERIC_SIZE_B]; char szBucket[ 4]; FLMUINT uiBucket; FFILE localFFile; FFILE * pFile; FLMBOOL bRefresh; void * pvAddress; char szAddress[GENERIC_SIZE_B]; char szLink[GENERIC_SIZE_B]; FLMBOOL bFlmLocked = FALSE; DATASTRUCT DataStruct; FLMBYTE * pszTemp = NULL; FLMBYTE * pszTemp1 = NULL; if( RC_BAD( rc = f_alloc( 150, &pszTemp))) { printErrorPage( rc, TRUE, (char *)"Failed to allocate temporary buffer"); goto Exit; } if( RC_BAD( rc = f_alloc( 150, &pszTemp1))) { printErrorPage( rc, TRUE, (char *)"Failed to allocate temporary buffer"); goto Exit; } // Initialize a few variables first... szFrom[0] = '\0'; szBucket[0] = '\0'; pFile = NULL; // Get the "From" parameter. We use this to determine everything else. if (RC_BAD( rc = ExtractParameter( uiNumParams, ppszParams, "From", sizeof( szFrom), szFrom))) { goto Exit; } f_mutexLock( gv_FlmSysData.hShareMutex); bFlmLocked = TRUE; if (!f_stricmp( szFrom, "FileHashTbl")) { // Get the hash bucket index if (RC_BAD( rc = ExtractParameter( uiNumParams, ppszParams, "Bucket", sizeof( szBucket), szBucket))) { goto Exit; } uiBucket = f_atoud( szBucket); pFile = (FFILE *)gv_FlmSysData.pFileHashTbl[uiBucket].pFirstInBucket; } else if ( (f_stricmp( szFrom, "SCacheBlock") == 0) || (f_stricmp( szFrom, "RCache") == 0) || (f_stricmp( szFrom, "FDB") == 0)) { // Get the FFile address and the Hash Bucket if (RC_BAD( rc = ExtractParameter( uiNumParams, ppszParams, "Bucket", sizeof( szBucket), szBucket))) { goto Exit; } uiBucket = f_atoud( szBucket); if (RC_BAD( rc = ExtractParameter( uiNumParams, ppszParams, "Address", sizeof( szAddress), szAddress))) { goto Exit; } pvAddress = (void *)f_atoud( szAddress); pFile = (FFILE *)gv_FlmSysData.pFileHashTbl[uiBucket].pFirstInBucket; while (pFile && (void *)pFile != pvAddress) { pFile = pFile->pNext; } } else if (f_stricmp( szFrom, "FlmSysData") == 0) { // Get the Link and the FFile address if (RC_BAD( rc = ExtractParameter( uiNumParams, ppszParams, "Link", sizeof( szLink), szLink))) { goto Exit; } if (RC_BAD( rc = ExtractParameter( uiNumParams, ppszParams, "Address", sizeof( szAddress), szAddress))) { goto Exit; } pvAddress = (void *)f_atoud( szAddress); if (f_stricmp( szLink, "pMrnuFile") == 0) { pFile = gv_FlmSysData.pMrnuFile; // Now let's make sure we are looking at the right FFile... while (pFile && (void *)pFile != pvAddress) { pFile = pFile->pNextNUFile; } } else if (f_stricmp( szLink, "pLrnuFile") == 0) { pFile = gv_FlmSysData.pLrnuFile; // Now let's make sure we are looking at the right FFile... while (pFile && (void *)pFile != pvAddress) { pFile = pFile->pPrevNUFile; } } } else if (f_stricmp( szFrom, "FFile") == 0) { // We need to get the Link, Bucket & Address if (RC_BAD(rc = ExtractParameter( uiNumParams, ppszParams, "Link", sizeof( szLink), szLink))) { goto Exit; } if (RC_BAD(rc = ExtractParameter( uiNumParams, ppszParams, "Address", sizeof( szAddress), szAddress))) { goto Exit; } pvAddress = (void *)f_atoud( szAddress); if (RC_BAD(rc = ExtractParameter( uiNumParams, ppszParams, "Bucket", sizeof( szBucket), szBucket))) { goto Exit; } uiBucket = f_atoud( szBucket); // First, let's get a reference to an FFile from the specified bucket if (gv_FlmSysData.pFileHashTbl[uiBucket].pFirstInBucket) { pFile = (FFILE *)gv_FlmSysData.pFileHashTbl[uiBucket].pFirstInBucket; } // Now let's make sure we are looking at the right FFile... while (pFile && (void *)pFile != pvAddress) { pFile = pFile->pNext; } // Now what link are we supposed to follow? if (f_stricmp( szLink, "pNext") == 0) { pFile = pFile->pNext; } else if (f_stricmp( szLink, "pPrev") == 0) { pFile = pFile->pPrev; } else if (f_stricmp( szLink, "pNextNUFile") == 0) { pFile = pFile->pNextNUFile; } else if (f_stricmp( szLink, "pPrevNUFile") == 0) { pFile = pFile->pPrevNUFile; } } // Gather additional data if present. Initialize the structure before // using it. f_memset( &DataStruct, 0, sizeof(DataStruct)); if (pFile) { f_memcpy( &localFFile, pFile, sizeof(localFFile)); if (pFile->pSCacheList) { DataStruct.SCacheBlkAddress = pFile->pSCacheList->uiBlkAddress; DataStruct.SCacheLowTransID = scaGetLowTransID( pFile->pSCacheList), DataStruct.SCacheHighTransID = pFile->pSCacheList->uiHighTransID; } if (pFile->pPendingWriteList) { DataStruct.PendingWriteBlkAddress = pFile->pPendingWriteList->uiBlkAddress; DataStruct.PendingWriteLowTransID = scaGetLowTransID( pFile->pPendingWriteList), DataStruct.PendingWriteHighTransID = pFile->pPendingWriteList->uiHighTransID; } if (pFile->pLastDirtyBlk) { DataStruct.LastDirtyBlkAddress = pFile->pLastDirtyBlk->uiBlkAddress; DataStruct.LastDirtyLowTransID = scaGetLowTransID( pFile->pLastDirtyBlk), DataStruct.LastDirtyHighTransID = pFile->pLastDirtyBlk->uiHighTransID; } if (pFile->pFirstRecord) { DataStruct.FirstRecordContainer = pFile->pFirstRecord->uiContainer; DataStruct.FirstRecordDrn = pFile->pFirstRecord->uiDrn; DataStruct.FirstRecordLowTransId = pFile->pFirstRecord->uiLowTransId; } if (pFile->pLastRecord) { DataStruct.LastRecordContainer = pFile->pLastRecord->uiContainer; DataStruct.LastRecordDrn = pFile->pLastRecord->uiDrn; DataStruct.LastRecordLowTransId = pFile->pLastRecord->uiLowTransId; } } f_mutexUnlock( gv_FlmSysData.hShareMutex); bFlmLocked = FALSE; stdHdr(); fnPrintf( m_pHRequest, HTML_DOCTYPE); fnPrintf( m_pHRequest, "\n"); // Determine if we are being requested to refresh this page or not. if ((bRefresh = DetectParameter( uiNumParams, ppszParams, "Refresh")) == TRUE) { // Send back the page with a refresh command in the header f_sprintf( (char *)pszTemp, "%s/FFile?Refresh&From=%s&Bucket=%s", m_pszURLString, szFrom, szBucket); fnPrintf( m_pHRequest, "
" "" "Unable to find the FFile structure that you requested." " This is probably because the state of the cache changed between " "the time that you displayed the previous page and the time that you " "clicked on the link that brought you here.\n" "
Click on your browser's \"Back\" button, then click \"Reload\" "
"and then try the link again.\n");
}
fnPrintf( m_pHRequest, "\n");
fnEmit();
Exit:
if (bFlmLocked)
{
f_mutexUnlock( gv_FlmSysData.hShareMutex);
bFlmLocked = FALSE;
}
if (pszTemp)
{
f_free( &pszTemp);
}
if (pszTemp1)
{
f_free( &pszTemp1);
}
return( rc);
}
/****************************************************************************
Desc: This procedure generates the HTML page to display
the contents of the FFile structure
****************************************************************************/
void F_FFilePage::write_data(
FFILE * pFile,
void * pvFFileAddress,
DATASTRUCT * pDataStruct)
{
char szFormattedTime[13];
char szTemp[100];
char szAddress[20];
char szFFileAddress[20];
FLMBOOL bHighlight = FALSE;
F_UNREFERENCED_PARM( fnPrintf);
if (pFile == NULL)
{
flmAssert(0);
return;
}
else
{
printAddress( pvFFileAddress, szFFileAddress);
// pNext
if ( pFile->pNext)
{
f_sprintf( (char *)szTemp,
"%s/FFile?From=FFile?Link=pNext?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pNext",
"FFILE *",
(void *)pFile,
(void *)&pFile->pNext,
(void *)pFile->pNext,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pPrev - previous file in hash bucket.
if (pFile->pPrev)
{
f_sprintf( (char *)szTemp,
"%s/FFile?From=FFile?Link=pPrev?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pPrev",
"FFILE *",
(void *)pFile,
(void *)&pFile->pPrev,
(void *)pFile->pPrev,
(char *)szTemp,
(bHighlight = ~bHighlight));
// uiZeroUseCountTime - Time Use Count went to zero
FormatTime(pFile->uiZeroUseCountTime, szFormattedTime);
printHTMLString(
"uiZeroUseCountTime",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiZeroUseCountTime,
(char *)szFormattedTime,
(bHighlight = ~bHighlight));
// uiInternalUseCount - Internal Use Count
printHTMLUint(
"uiInternalUseCount",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiInternalUseCount,
pFile->uiInternalUseCount,
(bHighlight = ~bHighlight));
// uiUseCount - Current Use Count
printHTMLUint(
"uiUseCount",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiUseCount,
pFile->uiUseCount,
(bHighlight = ~bHighlight));
// pFirstDb
if (pFile->pFirstDb)
{
char szFDBAddr[20];
printAddress( pFile->pFirstDb, szAddress);
f_sprintf( szFDBAddr, "%s", szAddress);
f_sprintf( (char *)szTemp,
"%s/FDB?FFileAddress=%s?Bucket=%lu?FDBAddress=%s",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket, szFDBAddr);
}
printHTMLLink(
"pFirstDb",
"FDB *",
(void *)pFile,
(void *)&pFile->pFirstDb,
(void *)pFile->pFirstDb,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pszDbPath - Database File Name
printHTMLString(
"pszDbPath",
"FLMBYTE *",
(void *)pFile,
(void *)&pFile->pszDbPath,
(char *)(pFile->pszDbPath ? (char *)pFile->pszDbPath : "Null"),
(bHighlight = ~bHighlight));
// pszDataDir
printHTMLString(
"pszDataDir",
"FLMBYTE *",
(void *)pFile,
(void *)&pFile->pszDataDir,
(char *)(pFile->pszDataDir ? (char *)pFile->pszDataDir : "Null"),
(bHighlight = ~bHighlight));
// pNextNUFile - Next Not Used File
if (pFile->pNextNUFile)
{
f_sprintf( (char *)szTemp,
"%s/FFile?From=FFile?Link=pNextNUFile?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pNextNUFile",
"FFILE *",
(void *)pFile,
(void *)&pFile->pNextNUFile,
(void *)pFile->pNextNUFile,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pPrevNUFile - Previous Not Used File
if (pFile->pPrevNUFile)
{
f_sprintf( (char *)szTemp,
"%s/FFile?From=FFile?Link=pPrevNUFile?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pPrevNUFile",
"FFILE *",
(void *)pFile,
(void *)&pFile->pPrevNUFile,
(void *)pFile->pPrevNUFile,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pSCacheList - Shared Cache Blocks
if (pFile->pSCacheList)
{
f_sprintf( (char *)szTemp,
"%s/SCacheBlock?"
"BlockAddress=%ld&File=%s&LowTransID=%ld&HighTransID=%ld",
m_pszURLString,
pDataStruct->SCacheBlkAddress,
szFFileAddress,
pDataStruct->SCacheLowTransID,
pDataStruct->SCacheHighTransID);
}
printHTMLLink(
"pSCacheList",
"SCACHE *",
(void *)pFile,
(void *)&pFile->pSCacheList,
(void *)pFile->pSCacheList,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pPendingWriteList
if (pFile->pPendingWriteList)
{
f_sprintf( (char *)szTemp,
"%s/SCacheBlock?"
"BlockAddress=%ld&File=%s&LowTransID=%ld&HighTransID=%ld",
m_pszURLString,
pDataStruct->PendingWriteBlkAddress,
szFFileAddress,
pDataStruct->PendingWriteLowTransID,
pDataStruct->PendingWriteHighTransID);
}
printHTMLLink(
"pPendingWriteList",
"SCACHE *",
(void *)pFile,
(void *)&pFile->pPendingWriteList,
(void *)pFile->pPendingWriteList,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pLastDirtyBlk
if (pFile->pLastDirtyBlk)
{
f_sprintf( (char *)szTemp,
"%s/SCacheBlock?"
"BlockAddress=%ld&File=%s&LowTransID=%ld&HighTransID=%ld",
m_pszURLString,
pDataStruct->LastDirtyBlkAddress,
szFFileAddress,
pDataStruct->LastDirtyLowTransID,
pDataStruct->LastDirtyHighTransID);
}
printHTMLLink(
"pLastDirtyBlk",
"SCACHE *",
(void *)pFile,
(void *)&pFile->pLastDirtyBlk,
(void *)pFile->pLastDirtyBlk,
(char *)szTemp,
(bHighlight = ~bHighlight));
// uiDirtyCacheCount
printHTMLUint(
"uiDirtyCacheCount",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiDirtyCacheCount,
pFile->uiDirtyCacheCount,
(bHighlight = ~bHighlight));
// uiLogCacheCount
printHTMLUint(
"uiLogCacheCount",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiLogCacheCount,
pFile->uiLogCacheCount,
(bHighlight = ~bHighlight));
// pFirstRecord - First Record Cache Block
// **Do we need to rework this by passing in the Container, Drn, pFile & LowTransId? ** //
if (pFile->pFirstRecord)
{
f_sprintf( (char *)szTemp,
"%s/RCache?Container=%lu?DRN=%lu?File=%s?Version=%lu",
m_pszURLString,
pDataStruct->FirstRecordContainer,
pDataStruct->FirstRecordDrn,
szFFileAddress,
pDataStruct->FirstRecordLowTransId);
}
printHTMLLink(
"pFirstRecord",
"RCACHE_p",
(void *)pFile,
(void *)&pFile->pFirstRecord,
(void *)pFile->pFirstRecord,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pLastRecord - Last Record Cache Block
if (pFile->pLastRecord)
{
f_sprintf( (char *)szTemp,
"%s/RCache?Container=%lu?DRN=%lu?File=%s?Version=%lu",
m_pszURLString,
pDataStruct->LastRecordContainer,
pDataStruct->LastRecordDrn,
szFFileAddress,
pDataStruct->LastRecordLowTransId);
}
printHTMLLink(
"pLastRecord",
"RCACHE_p",
(void *)pFile,
(void *)&pFile->pLastRecord,
(void *)pFile->pLastRecord,
(char *)szTemp,
(bHighlight = ~bHighlight));
// ppBlocksDone - List of blocks to be written to the Rollback
if (pFile->ppBlocksDone)
{
f_sprintf( (char *)szTemp,
"%s/SCache?From=FFile?Link=ppBlocksDone?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"ppBlocksDone",
"SCACHE **",
(void *)pFile,
(void *)&pFile->ppBlocksDone,
(void *)pFile->ppBlocksDone,
(char *)szTemp,
(bHighlight = ~bHighlight));
// uiBlocksDoneArraySize
printHTMLUint(
"uiBlocksDoneArraySize",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiBlocksDoneArraySize,
pFile->uiBlocksDoneArraySize,
(bHighlight = ~bHighlight));
// uiBlocksDone - Number of Blocks in Blocks Done Array
printHTMLUint(
"uiBlocksDone",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiBlocksDone,
pFile->uiBlocksDone,
(bHighlight = ~bHighlight));
// pTransLogList - Shared Cache Log List
if (pFile->pTransLogList != NULL)
{
f_sprintf( (char *)szTemp,
"%s/SCache?From=FFile?Link=pTransLogList?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pTransLogList",
"SCACHE *",
(void *)pFile,
(void *)&pFile->pTransLogList,
(void *)pFile->pTransLogList,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pOpenNotifies - Open Notifies Threads
if (pFile->pOpenNotifies != NULL)
{
f_sprintf( (char *)szTemp,
"%s/FNOTIFY?From=FFile?Link=pOpenNotifies?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pOpenNotifies",
"FNOTIFY *",
(void *)pFile,
(void *)&pFile->pOpenNotifies,
(void *)pFile->pOpenNotifies,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pCloseNotifies
if (pFile->pCloseNotifies != NULL)
{
f_sprintf( (char *)szTemp,
"%s/FNOTIFY?From=FFile?Link=pCloseNotifies?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pCloseNotifies",
"FNOTIFY *",
(void *)pFile,
(void *)&pFile->pCloseNotifies,
(void *)pFile->pCloseNotifies,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pDictList - Dictionaries List
if (pFile->pDictList != NULL)
{
f_sprintf( (char *)szTemp,
"%s/FDICT?From=FFile?Link=pDictList?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pDictList",
"FDICT *",
(void *)pFile,
(void *)&pFile->pDictList,
(void *)pFile->pDictList,
(char *)szTemp,
(bHighlight = ~bHighlight));
// krefPool - Kref pool
printAddress( &pFile->krefPool, szAddress);
printHTMLString(
"krefPool",
"POOL",
(void *)pFile,
(void *)&pFile->krefPool,
(char *)szAddress,
(bHighlight = ~bHighlight));
// FileHdr - File Header
f_sprintf( (char *)szTemp,
"%s/FILE_HDR?From=FFile?Link=FileHdr?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
printHTMLLink(
"FileHdr",
"FILE_HDR",
(void *)pFile,
(void *)&pFile->FileHdr,
(void *)&pFile->FileHdr,
(char *)szTemp,
(bHighlight = ~bHighlight));
// uiMaxFileSize - Maximum File Size
printHTMLUint(
"uiMaxFileSize",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiMaxFileSize,
pFile->uiMaxFileSize,
(bHighlight = ~bHighlight));
// uiFileExtendSize - File Extend Size
printHTMLUint(
"uiFileExtendSize",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiFileExtendSize,
pFile->uiFileExtendSize,
(bHighlight = ~bHighlight));
// uiUpdateTransID - Update Transaction Id
printHTMLUint(
"uiUpdateTransID",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiUpdateTransID,
pFile->uiUpdateTransID,
(bHighlight = ~bHighlight));
// pRfl - Roll Forward Log Object
if (pFile->pRfl)
{
f_sprintf( (char *)szTemp,
"%s/Rfl?From=FFile?Link=pRfl?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pRfl",
"F_Rfl *",
(void *)pFile,
(void *)&pFile->pRfl,
(void *)pFile->pRfl,
(char *)szTemp,
(bHighlight = ~bHighlight));
// ucLastCommittedLogHdr - Last Committed Log Header
f_sprintf( (char *)szTemp,
"%s/LogHdr?From=FFile?"
"Link=ucLastCommittedLogHdr?"
"Address=%s?Bucket=%ld",
m_pszURLString,
szFFileAddress, pFile->uiBucket);
printHTMLLink(
"ucLastCommittedLogHdr",
"FLMBYTE",
(void *)pFile,
(void *)&pFile->ucLastCommittedLogHdr[0],
(void *)&pFile->ucLastCommittedLogHdr[0],
(char *)szTemp,
(bHighlight = ~bHighlight));
// ucCheckpointLogHdr - Checkpoint Log Header
f_sprintf( (char *)szTemp,
"%s/LogHdr?From=FFile?"
"Link=ucCheckpointLogHdr?"
"Address=%s?Bucket=%ld",
m_pszURLString,
szFFileAddress, pFile->uiBucket);
printHTMLLink(
"ucCheckpointLogHdr",
"FLMBYTE",
(void *)pFile,
(void *)&pFile->ucCheckpointLogHdr[0],
(void *)&pFile->ucCheckpointLogHdr[0],
(char *)szTemp,
(bHighlight = ~bHighlight));
// ucUncommittedLogHdr - Uncommitted Log Header
f_sprintf( (char *)szTemp,
"%s/LogHdr?From=FFile?Link=ucUncommittedLogHdr?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress, (unsigned long)pFile->uiBucket);
printHTMLLink(
"ucUncommittedLogHdr",
"FLMBYTE",
(void *)pFile,
(void *)&pFile->ucUncommittedLogHdr[0],
(void *)&pFile->ucUncommittedLogHdr[0],
(char *)szTemp,
(bHighlight = ~bHighlight));
// pBufferMgr
f_sprintf( (char *)szTemp,
"%s/F_IOBufferMgr?From=FFile?"
"Link=pBufferMgr?"
"Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket);
printHTMLLink(
"pBufferMgr",
"F_IOBufferMgr *",
(void *)pFile,
(void *)&pFile->pBufferMgr,
(void *)pFile->pBufferMgr,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pCurrLogBuffer
f_sprintf( (char *)szTemp,
"%s/F_IOBuffer?From=FFile?"
"Link=pCurrLogBuffer?"
"Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket);
printHTMLLink(
"pCurrLogBuffer",
"F_IOBuffer *",
(void *)pFile,
(void *)&pFile->pCurrLogBuffer,
(void *)pFile->pCurrLogBuffer,
(char *)szTemp,
(bHighlight = ~bHighlight));
// uiCurrLogWriteOffset
printHTMLUint(
"uiCurrLogWriteOffset",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiCurrLogWriteOffset,
pFile->uiCurrLogWriteOffset,
(bHighlight = ~bHighlight));
// uiCurrLogBlkAddr
printHTMLUint(
"uiCurrLogBlkAddr",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiCurrLogBlkAddr,
pFile->uiCurrLogBlkAddr,
(bHighlight = ~bHighlight));
// pFileLockObj - File Locking Object
if (pFile->pFileLockObj)
{
f_sprintf( (char *)szTemp,
"%s/ServerLockObject?From=FFile?"
"Link=pFileLockObj?"
"Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pFileLockObj",
"ServerLockObject_p",
(void *)pFile,
(void *)&pFile->pFileLockObj,
(void *)pFile->pFileLockObj,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pWriteLockObj
if (pFile->pWriteLockObj)
{
f_sprintf( (char *)szTemp,
"%s/ServerLockObject?From=FFile?"
"Link=pWriteLockObj?"
"Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pWriteLockObj",
"ServerLockObject_p",
(void *)pFile,
(void *)&pFile->pWriteLockObj,
(void *)pFile->pWriteLockObj,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pLockFileHdl - File Lock Handle (3.x Db)
if (pFile->pLockFileHdl)
{
f_sprintf( (char *)szTemp,
"%s/F_FileHdl?From=FFile?"
"Link=pLockFileHdl?"
"Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pLockFileHdl",
"F_FileHdl_p",
(void *)pFile,
(void *)&pFile->pLockFileHdl,
(void *)pFile->pLockFileHdl,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pLockNotifies - Notifies List
if (pFile->pLockNotifies)
{
f_sprintf( (char *)szTemp,
"%s/FNOTIFY?From=FFile?"
"Link=pLockNotifies?"
"Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pLockNotifies",
"FNOTIFY *",
(void *)pFile,
(void *)&pFile->pLockNotifies,
(void *)pFile->pLockNotifies,
(char *)szTemp,
(bHighlight = ~bHighlight));
// bBeingLocked - File being locked
printHTMLString(
"bBeingLocked",
"FLMBOOL",
(void *)pFile,
(void *)&pFile->bBeingLocked,
(char *)(pFile->bBeingLocked ? "Yes" : "No"),
(bHighlight = ~bHighlight));
// pFirstReadTrans - First Read Transaction
if (pFile->pFirstReadTrans)
{
char szFDBAddr[20];
printAddress( pFile->pFirstReadTrans, szAddress);
f_sprintf( szFDBAddr, "%s", szAddress);
f_sprintf( (char *)szTemp,
"%s/FDB?FFileAddress=%s?Bucket=%lu?FDBAddress=%s",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket, szFDBAddr);
}
printHTMLLink(
"pFirstReadTrans",
"FDB *",
(void *)pFile,
(void *)&pFile->pFirstReadTrans,
(void *)pFile->pFirstReadTrans,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pLastReadTrans - Last Read Transaction
if (pFile->pLastReadTrans)
{
char szFDBAddr[20];
printAddress( pFile->pLastReadTrans, szAddress);
f_sprintf( szFDBAddr, "%s", szAddress);
f_sprintf(
(char *)szTemp, "%s/FDB?FFileAddress=%s?Bucket=%lu?FDBAddress=%s",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket, szFDBAddr);
}
printHTMLLink(
"pLastReadTrans",
"FDB *",
(void *)pFile,
(void *)&pFile->pLastReadTrans,
(void *)pFile->pLastReadTrans,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pFirstKilledTrans - First Killed Transaction
if (pFile->pFirstKilledTrans)
{
char szFDBAddr[20];
printAddress( pFile->pFirstKilledTrans, szAddress);
f_sprintf( szFDBAddr, "%s", szAddress);
f_sprintf(
(char *)szTemp, "%s/FDB?FFileAddress=%s?Bucket=%lu?FDBAddress=%s",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket, szFDBAddr);
}
printHTMLLink(
"pFirstKilledTrans",
"FDB *",
(void *)pFile,
(void *)&pFile->pFirstKilledTrans,
(void *)pFile->pFirstKilledTrans,
(char *)szTemp,
(bHighlight = ~bHighlight));
// uiFirstLogBlkAddress
printHTMLUint(
"uiFirstLogBlkAddress",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiFirstLogBlkAddress,
pFile->uiFirstLogBlkAddress,
(bHighlight = ~bHighlight));
// uiFirstLogCPBlkAddress - First Log Checkpoint Block Address
printHTMLUint(
"uiFirstLogCPBlkAddress",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiFirstLogCPBlkAddress,
pFile->uiFirstLogCPBlkAddress,
(bHighlight = ~bHighlight));
// uiLastCheckpointTime - Last Checkpoint Time
FormatTime( pFile->uiLastCheckpointTime, szFormattedTime);
printHTMLString(
"uiLastCheckpointTime",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiLastCheckpointTime,
(char *)szFormattedTime,
(bHighlight = ~bHighlight));
// pCPThrd
if (pFile->pCPThrd)
{
f_sprintf( (char *)szTemp,
"%s/F_Thread?From=FFile?"
"Link=pCPThrd?"
"Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pCPThrd",
"F_Thread *",
(void *)pFile,
(void *)&pFile->pCPThrd,
(void *)pFile->pCPThrd,
(char *)szTemp,
(bHighlight = ~bHighlight));
// pCPInfo - Checkpoint Info Buffer
if (pFile->pCPInfo)
{
f_sprintf( (char *)szTemp,
"%s/CP_INFO?From=FFile?Link=pCPInfo?Address=%s?Bucket=%lu",
m_pszURLString,
szFFileAddress,
(unsigned long)pFile->uiBucket);
}
printHTMLLink(
"pCPInfo",
"CP_INFO_p",
(void *)pFile,
(void *)&pFile->pCPInfo,
(void *)pFile->pCPInfo,
(char *)szTemp,
(bHighlight = ~bHighlight));
// CheckpointRc - Last Checkpoint Return Code
printHTMLUint(
"CheckpointRc",
"FLMUINT",
(void *)pFile,
(void *)&pFile->CheckpointRc,
pFile->CheckpointRc,
(bHighlight = ~bHighlight));
// uiBucket - Hash Table Bucket
printHTMLUint(
"uiBucket",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiBucket,
pFile->uiBucket,
(bHighlight = ~bHighlight));
// uiFlags - Flags
if (pFile->uiFlags)
{
FLMBOOL bTest = FALSE;
char * pTemp = (char *)szTemp;
f_sprintf( (char *)szTemp, "%08X
", (unsigned)pFile->uiFlags);
pTemp += 12;
if (pFile->uiFlags & DBF_BEING_OPENED)
{
f_sprintf(pTemp, "Being Opened");
pTemp += f_strlen("Being Opened");
bTest=TRUE;
}
if (pFile->uiFlags & DBF_IN_NU_LIST)
{
if (bTest)
{
f_sprintf(pTemp, "
");
pTemp += f_strlen("
");
}
f_sprintf(pTemp, "In Not Used List");
pTemp += f_strlen("In Not Used List");
bTest = TRUE;
}
if (pFile->uiFlags & DBF_BEING_CLOSED)
{
if (bTest)
{
f_sprintf(pTemp, "
");
pTemp += f_strlen("
");
}
f_sprintf(pTemp, "Being Closed");
pTemp += f_strlen("Being Closed");
}
}
else
{
f_sprintf( (char *)szTemp, "%08X
Normal", (unsigned)pFile->uiFlags);
}
printHTMLString(
"uiFlags",
"FLMUINT",
(void *)pFile,
(void *)&pFile->uiFlags,
(char *)szTemp,
(bHighlight = ~bHighlight));
// bBackupActive - Backup Active
printHTMLString(
"bBackupActive",
"FLMBOOL",
(void *)pFile,
(void *)&pFile->bBackupActive,
(char *)(pFile->bBackupActive ? "Yes" : "No"),
(bHighlight = ~bHighlight));
printTableEnd();
}
}