fulliautomatix_data* DataItem::getData(int byteoffset) { fulliautomatix_data *firstData, *lastData; std::string strDesc; char tmp[20]; sprintf(tmp, "Data item %s - ", m_pDescription->m_strID.c_str()); strDesc = tmp; strDesc += m_pDescription->m_strName; lastData = firstData = newDataTree(NULL, byteoffset, m_nLength, (char*)strDesc.c_str()); if (m_pDescription && m_pDescription->m_pFormat && m_pData) { lastData->next = m_pDescription->m_pFormat->getData(m_pData, m_nLength, byteoffset); } else { lastData->next = newDataMessage(NULL, byteoffset, m_nLength, 2, (char*)"Error: Unknown item format."); } while (lastData->next) { if (lastData->next->err) firstData->err = lastData->next->err; lastData = lastData->next; } byteoffset += m_nLength; lastData = newDataTreeEnd(lastData,byteoffset); return firstData; }
fulliautomatix_data* DataRecord::getData(int byteoffset) { fulliautomatix_data *firstData = NULL, *lastData=NULL; int endOffset = byteoffset+m_nLength; char tmp[64]; sprintf(tmp, "Data Record %d - %ld bytes", m_nID, m_nLength); firstData = lastData = newDataTree(lastData, byteoffset, m_nLength, tmp); UAP* pUAP = m_pCategory->getUAP(m_pFSPECData, m_nFSPECLength); if (!pUAP) { Tracer::Error("UAP for CAT%03d not found!", m_pCategory->m_id); firstData->err = 2; } else { lastData = newDataTree(lastData, byteoffset, m_nFSPECLength, (char*)"FSPEC"); // go through all UAPitems items in this record std::list<UAPItem*>::iterator uapit; for ( uapit=pUAP->m_lUAPItems.begin(); uapit != pUAP->m_lUAPItems.end(); uapit++ ) { UAPItem* uap = (UAPItem*)(*uapit); lastData->next = uap->getData(m_pFSPECData, m_nFSPECLength, byteoffset); if(lastData->next) { lastData = lastData->next; } else { break; } } byteoffset += m_nFSPECLength; lastData = newDataTreeEnd(lastData, byteoffset); // go through all present data items in this record std::list<DataItem*>::iterator it; for ( it=m_lDataItems.begin() ; it != m_lDataItems.end(); it++ ) { DataItem* di = (DataItem*)(*it); if (di) { lastData->next = di->getData(byteoffset); while(lastData->next) { if (lastData->next->err) { firstData->err = lastData->next->err; } lastData = lastData->next; } byteoffset = lastData->bytenr; } } } if (!m_bFormatOK) { firstData->err = 2; } lastData = newDataTreeEnd(lastData,endOffset); return firstData; }