Program: gdcm
Module: $RCSfile: AnonymizeDicomDir.cxx,v $
Language: C++
- Date: $Date: 2005/06/07 14:41:47 $
- Version: $Revision: 1.3 $
+ Date: $Date: 2007/05/23 14:18:04 $
+ Version: $Revision: 1.11 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#include "gdcmSQItem.h"
#include "gdcmSeqEntry.h"
-#include "gdcmValEntry.h"
+#include "gdcmDataEntry.h"
#include "gdcmDocument.h"
#include "gdcmFile.h"
* \brief AnonymizeDicomDir
*/
-void AnoNoLoad(gdcm::SQItem *s, std::fstream *fp,
+void AnoNoLoad(GDCM_NAME_SPACE::SQItem *s, std::fstream *fp,
uint16_t group, uint16_t elem,
std::string val);
-void AnoNoLoad(gdcm::SQItem *s, std::fstream *fp,
+void AnoNoLoad(GDCM_NAME_SPACE::SQItem *s, std::fstream *fp,
uint16_t group, uint16_t elem,
std::string val)
{
- gdcm::DocEntry *d;
+ GDCM_NAME_SPACE::DocEntry *d;
uint32_t offset;
uint32_t lgth;
uint32_t valLgth = 0;
if ( d == NULL)
return;
- if ( ! dynamic_cast<gdcm::ValEntry *>(d) )
+ if ( ! dynamic_cast<GDCM_NAME_SPACE::DataEntry *>(d) )
return;
offset = d->GetOffset();
fp->write( v.c_str(), lgth );
}
+
int main(int argc, char *argv[])
{
START_USAGE(usage)
- " \n AnonymizeDicomDir :\n",
- " Anonymize a gdcm-readable DICOMDIR ",
- " even when some 'Objects' are not yet taken into account",
- " Warning : the DICOMDIR is overwritten",
- " usage: AnonymizeDicomDir filein=dicomDirName [debug] ",
- " debug : user wants to run the program in 'debug mode' ",
+ " \n AnonymizeDicomDir :\n ",
+ " Anonymize a gdcm-readable DICOMDIR ",
+ " even when some 'Objects' are not yet taken into account ",
+ " Warning : the DICOMDIR is overwritten ",
+ " usage: AnonymizeDicomDir filein=dicomDirName [debug] ",
+ " debug : developper wants to run the program in 'debug mode' ",
FINISH_USAGE
// ----- Initialize Arguments Manager ------
- gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv);
+ GDCM_NAME_SPACE::ArgMgr *am = new GDCM_NAME_SPACE::ArgMgr(argc, argv);
- if (am->ArgMgrDefined("usage"))
+ if (argc == 1 || am->ArgMgrDefined("usage"))
{
am->ArgMgrUsage(usage); // Display 'usage'
delete am;
char *fileName = am->ArgMgrWantString("filein",usage);
- delete am; // we don't need Argument Manager any longer
+ // if unused Param we give up
+ if ( am->ArgMgrPrintUnusedLabels() )
+ {
+ am->ArgMgrUsage(usage);
+ delete am;
+ return 0;
+ }
+ delete am; // --- we don't need Argument Manager any longer ---
-// ============================================================
-// Read the input DICOMDIR
-// ============================================================
- gdcm::File *f1 = new gdcm::File( fileName );
- if (!f1->IsReadable()) {
+ // Read the input DICOMDIR
+ GDCM_NAME_SPACE::File *f;
+ f = GDCM_NAME_SPACE::File::New( );
+ f->SetLoadMode(0);
+ f->SetFileName( fileName );
+ bool res = f->Load();
+ if ( !res )
+ {
std::cerr << "Sorry, " << fileName <<" not a gdcm-readable "
<< "file" <<std::endl;
}
std::cout << " ... is readable " << std::endl;
- // Directory record sequence
- gdcm::DocEntry *e = f1->GetDocEntry(0x0004, 0x1220);
+ // Look for Directory record sequence
+ GDCM_NAME_SPACE::DocEntry *e = f->GetDocEntry(0x0004, 0x1220);
if ( !e )
{
std::cout << "No Directory Record Sequence (0004,1220) found" <<std::endl;;
- delete f1;
- delete e;
- return 0;
+ f->Delete();
+ return 0;
}
- gdcm::SeqEntry *s = dynamic_cast<gdcm::SeqEntry *>(e);
+ GDCM_NAME_SPACE::SeqEntry *s = dynamic_cast<GDCM_NAME_SPACE::SeqEntry *>(e);
if ( !s )
{
std::cout << "Element (0004,1220) is not a Sequence ?!?" <<std::endl;
- delete f1;
- delete e;
+ f->Delete();
return 0;
}
// Open the file LTTG (aka ALAP)
std::fstream *fp = new std::fstream(fileName,
std::ios::in | std::ios::out | std::ios::binary);
- gdcm::DocEntry *d;
+ GDCM_NAME_SPACE::DocEntry *d;
std::string v;
int patientNumber = 0;
std::ostringstream oss;
- gdcm::SQItem *tmpSI=s->GetFirstSQItem(); // For all the SQItems
+ GDCM_NAME_SPACE::SQItem *tmpSI=s->GetFirstSQItem(); // For all the SQItems
while(tmpSI)
{
d = tmpSI->GetDocEntry(0x0004, 0x1430); // Directory Record Type
- if ( gdcm::ValEntry* valEntry = dynamic_cast<gdcm::ValEntry *>(d) )
+ if ( GDCM_NAME_SPACE::DataEntry *dataEntry =
+ dynamic_cast<GDCM_NAME_SPACE::DataEntry *>(d) )
{
- v = valEntry->GetValue();
+ v = dataEntry->GetString();
}
else
{
- std::cout << "(0004,1430) not a ValEntry ?!?" << std::endl;
+ std::cout << "(0004,1430) not a DataEntry ?!?" << std::endl;
continue;
}
- if( v != "PATIENT " )
+ if( v != "PATIENT " ) // Work only on PATIENT
{
- continue; // Work only on PATIENT
+ tmpSI=s->GetNextSQItem();
+ continue;
}
oss << patientNumber;
// Telephone
AnoNoLoad(tmpSI, fp, 0x0010, 0x2154, oss.str());
- // Aware use will add more Entries he wants to rubb out here
+ // Aware use will add here more Entries if he wants to rubb them out
oss << "";
patientNumber++;
fp->close();
delete fp;
- delete e;
- delete f1;
+ f->Delete();
return 0;
}